feat(user): 添加关于页隐藏开发者登录功能
- 在底部版权信息连续点击11次时弹出开发者登录弹窗 - 登录方式采用手机号加短信验证码,复用现有登录API - 点击计数器使用useRef实现,3秒无操作自动重置 - 第4次及以后点击显示剩余步数提示,前3次触发轻震动反馈 - 登录成功后同步React登录态,关闭弹窗并重置表单 - 弹窗中使用NutUI组件,实现验证码发送和倒计时功能
This commit is contained in:
79
src/utils/privacy.ts
Normal file
79
src/utils/privacy.ts
Normal file
@@ -0,0 +1,79 @@
|
||||
import Taro from '@tarojs/taro'
|
||||
|
||||
/**
|
||||
* 在调用隐私相关 API / 组件前,确保用户已完成微信隐私协议授权。
|
||||
* 基础库 3.16.1+ 强制要求,未授权会抛 errno:112 / buttonId is wrong 等错误。
|
||||
* 旧基础库或不支持隐私协议的版本直接放行。
|
||||
*/
|
||||
export const ensurePrivacyAuthorized = (): Promise<void> => {
|
||||
return new Promise((resolve) => {
|
||||
const wxAny: any = Taro
|
||||
if (typeof wxAny.requirePrivacyAuthorize !== 'function') {
|
||||
resolve()
|
||||
return
|
||||
}
|
||||
if (typeof wxAny.getPrivacySetting === 'function') {
|
||||
wxAny.getPrivacySetting({
|
||||
success: (res: any) => {
|
||||
if (res && res.needAuthorization) {
|
||||
wxAny.requirePrivacyAuthorize({
|
||||
success: () => resolve(),
|
||||
fail: () => resolve(),
|
||||
})
|
||||
} else {
|
||||
resolve()
|
||||
}
|
||||
},
|
||||
fail: () => resolve(),
|
||||
})
|
||||
} else {
|
||||
wxAny.requirePrivacyAuthorize({
|
||||
success: () => resolve(),
|
||||
fail: () => resolve(),
|
||||
})
|
||||
}
|
||||
})
|
||||
}
|
||||
|
||||
/**
|
||||
* 打开官方隐私协议页面(半屏协议)。
|
||||
* 返回是否成功打开。
|
||||
*/
|
||||
export const openPrivacyContract = (): Promise<boolean> => {
|
||||
return new Promise((resolve) => {
|
||||
const wxAny: any = Taro
|
||||
if (typeof wxAny.openPrivacyContract !== 'function') {
|
||||
resolve(false)
|
||||
return
|
||||
}
|
||||
wxAny.openPrivacyContract({
|
||||
success: () => resolve(true),
|
||||
fail: () => resolve(false),
|
||||
})
|
||||
})
|
||||
}
|
||||
|
||||
/**
|
||||
* 检查当前用户是否需要同意隐私协议。
|
||||
*/
|
||||
export const checkPrivacyAuthorization = (): Promise<{
|
||||
needAuthorization: boolean
|
||||
isAuthorization: boolean
|
||||
}> => {
|
||||
return new Promise((resolve) => {
|
||||
const wxAny: any = Taro
|
||||
if (typeof wxAny.getPrivacySetting !== 'function') {
|
||||
resolve({ needAuthorization: false, isAuthorization: true })
|
||||
return
|
||||
}
|
||||
wxAny.getPrivacySetting({
|
||||
success: (res: any) => {
|
||||
resolve({
|
||||
needAuthorization: !!res?.needAuthorization,
|
||||
isAuthorization: !!res?.isAuthorization,
|
||||
})
|
||||
},
|
||||
fail: () => resolve({ needAuthorization: false, isAuthorization: true }),
|
||||
})
|
||||
})
|
||||
}
|
||||
Reference in New Issue
Block a user