在 uni-app/uni-app-x 中,iOS 上一键登录(univerify)默认是禁用状态,且 不会触发 success / fail 回调 的根本原因通常是:
当前设备不满足一键登录的前置条件(无 SIM 卡、蜂窝网络关闭、无信号、未预登录成功等)。
这与“隐私协议勾选提示”无直接关联——即使你在界面上加了勾选框,如果前置条件不满足,login 方法仍会被系统拦截,表现为“无回调”。
正确做法(知识库依据)
-
必须先执行预登录
在显示“一键登录”按钮前,调用 univerifyManager.preLogin()(或旧版 uni.preLogin)判断环境是否支持:
const univerifyManager = uni.getUniverifyManager()
univerifyManager.preLogin({
success() {
// 只有这里成功,才允许用户点击“一键登录”按钮
this.canUniverify = true
},
fail(res) {
// 隐藏或置灰一键登录按钮,引导短信验证码登录
console.log('预登录失败', res.errCode, res.errMsg)
}
})
-
隐私协议勾选状态由你自行控制
- 一键登录弹窗本身 不会 帮你做协议勾选校验。
- 你需要在页面上放一个自定义勾选框(如 checkbox),并在点击“一键登录”按钮时先判断勾选状态:
// 假设页面已有一个 checkbox 绑定到 agreePrivacy
if (!this.agreePrivacy) {
uni.showToast({ title: '请先同意隐私协议', icon: 'none' })
return
}
// 已勾选且预登录成功,才调用 login
univerifyManager.login({
univerifyStyle: { /* 你的样式 */ },
success(res) { /* 拿到 openid 等凭证 */ },
fail(res) { /* 网络或运营商异常 */ }
})
-
uni-id-pages 已集成完整逻辑
如果你使用 uni-id-pages,上述预登录 + 勾选校验 + 失败转短信验证码的交互已内置,无需重复开发。
常见误区澄清
- “没有回调” ≠ “隐私协议问题”。只要预登录失败,login 方法会直接被系统拦截,任何回调都不会触发。
- iOS 标准基座测试限制:若使用非默认 Bundle ID,需打自定义基座才能正常测试一键登录。
按上述步骤先确保预登录成功,再自行处理勾选逻辑即可。
2 个回复
Ask小助手
在 uni-app/uni-app-x 中,iOS 上一键登录(univerify)默认是禁用状态,且 不会触发 success / fail 回调 的根本原因通常是:
当前设备不满足一键登录的前置条件(无 SIM 卡、蜂窝网络关闭、无信号、未预登录成功等)。
这与“隐私协议勾选提示”无直接关联——即使你在界面上加了勾选框,如果前置条件不满足,login 方法仍会被系统拦截,表现为“无回调”。
正确做法(知识库依据)
必须先执行预登录
在显示“一键登录”按钮前,调用
univerifyManager.preLogin()(或旧版uni.preLogin)判断环境是否支持:隐私协议勾选状态由你自行控制
uni-id-pages 已集成完整逻辑
如果你使用 uni-id-pages,上述预登录 + 勾选校验 + 失败转短信验证码的交互已内置,无需重复开发。
常见误区澄清
按上述步骤先确保预登录成功,再自行处理勾选逻辑即可。
t***@163.com (作者)
你们一键登录的隐私协议能自定义?
要回复问题请先登录或注册
公告
更多>相关问题