- 新增手机号授权等待状态及定时器,防止重复触发授权操作 - 增加手机号授权超时弹窗提示,支持切换短信验证码登录 - 修改手机号授权冷却时间由3000ms调整为8000ms,减少频繁操作 - 控制手机号授权按钮状态,确保用户协议同意且无冷却或等待中才能操作 - 清理手机号授权等待定时器,防止内存泄露 - 调整加载状态时按钮UI表现,提高用户交互体验
36 lines
1.3 KiB
TypeScript
36 lines
1.3 KiB
TypeScript
/**
|
||
* getPhoneNumber 全局频率控制
|
||
*
|
||
* 微信原生层对 getPhoneNumber API 有调用频率限制,短时间内多次调用会报:
|
||
* [渲染层错误] invoke getPhoneNumber too frequently
|
||
*
|
||
* 本模块提供模块级(跨页面)的时间戳锁,配合各页面的 useRef 同步锁 + 条件渲染使用。
|
||
*/
|
||
|
||
/** 上次 getPhoneNumber 回调触发的时间戳(ms) */
|
||
let lastPhoneAuthTime = 0
|
||
|
||
/** 冷却期(ms),在此期间不允许再次触发 getPhoneNumber */
|
||
const PHONE_AUTH_COOLDOWN = 8000
|
||
|
||
/**
|
||
* 检查当前是否在冷却期内。
|
||
* 在渲染 getPhoneNumber 按钮前调用此函数,若在冷却期内则不渲染 openType。
|
||
*/
|
||
export function isPhoneAuthCoolingDown(): boolean {
|
||
if (lastPhoneAuthTime === 0) return false
|
||
return Date.now() - lastPhoneAuthTime < PHONE_AUTH_COOLDOWN
|
||
}
|
||
|
||
/** 记录一次 getPhoneNumber 回调已触发(在 onGetPhoneNumber 回调入口调用) */
|
||
export function markPhoneAuthCalled(): void {
|
||
lastPhoneAuthTime = Date.now()
|
||
}
|
||
|
||
/** 获取冷却期剩余时间(ms),用于设置 unlock 延迟 */
|
||
export function getPhoneAuthCooldownRemaining(): number {
|
||
if (lastPhoneAuthTime === 0) return 0
|
||
const remaining = PHONE_AUTH_COOLDOWN - (Date.now() - lastPhoneAuthTime)
|
||
return remaining > 0 ? remaining : 0
|
||
}
|