uni-app 一键登录功能 IOS正常安卓失效
uni-app 一键登录功能 IOS正常安卓失效
项目信息 | 详情 |
---|---|
产品分类 | uniapp/App |
PC开发环境 | Windows |
PC开发环境版本 | win11 |
HBuilderX类型 | 正式 |
HBuilderX版本 | 4.24 |
手机系统 | 全部 |
手机系统版本 | Android 15 |
手机厂商 | 华为 |
页面类型 | vue |
vue版本 | vue2 |
打包方式 | 云端 |
项目创建方式 | HBuilderX |
测试过的手机
华为/苹果
操作步骤
- app的安卓版本首页点击一键登录
预期结果
- 弹出手机号码和确认登录之类
实际结果
- 无弹出无任何反应
bug描述
同一套代码,发布APP为IOS版本和安卓版本。发现ios版本的一键登录正常,而安卓的一键登录功能无任何反应。
以前是正常使用的。近期才发现安卓不正常,请问如何解决?
你好,你的一键登录按钮,使用的相关代码是啥?
您好,我刚刚贴了代码。这段代码一年多都没有变更过,之前一直安卓和苹果手机都正常使用这个一键登录。 目前云打包发布app发现是安卓不行。 谢谢您
回复 Scitico: 不应该啊,你改之前的代码还能运行吗?
回复 DCloud_UNI_yuhe: 我刚才检查了一下,这login整个文件3年没有人改过了已经,你看下你是不是什么配置失效了
回复 DCloud_UNI_yuhe: 刚刚手机去安装之前已发布到华为平台的版本,发现目前也不能一键登录了,说明跟目前打包的代码无关。会不会跟云空间那边(云函数之类)有什么关系呢?
回复 Scitico: 你看一下,有什么报错信息吗?提供一下线索
回复 DCloud_UNI_yuhe: 谢谢您。我们也在尝试查找可能原因。目前用2台不同型号的华为手机,在华为应用中心安装之前(成功)的版本,发现都不能“一键登录”,用OPPO手机安装,就正常一键登录。VIVO那边审核员发回的审核视频也是说不能一键登录。目前就一台oppo手机和苹果手机正常。
//一键登录认证
submitlogin() {
// #ifdef APP-PLUS
//短震动 iOS上只有长震动,没有短震动
// uni.vibrateShort({
// success: function() {
// //console.log(‘success’);
// }
// });
if (!this.agreement) {
uni.showToast({
title: '请先同意用户协议和隐私政策',
icon: 'none'
})
} else {
let that = this
uni.login({ //正式登录,弹出授权窗
provider: 'univerify',
univerifyStyle: { // 自定义登录框样式
"fullScreen": false, // 是否全屏显示,true表示全屏模式,false表示非全屏模式,默认值为false。
"backgroundColor": "#ffffff", // 授权页面背景颜色,默认值:#ffffff
"phoneNum": {
"color": "#2281F5", // 手机号文字颜色 默认值:#000000
},
"authButton": {
"normalColor": "#3479f5", // 授权按钮正常状态背景颜色 默认值:#3479f5
"highlightColor": "#2861c5", // 授权按钮按下状态背景颜色 默认值:#2861c5(仅ios支持)
"disabledColor": "#73aaf5", // 授权按钮不可点击时背景颜色 默认值:#73aaf5(仅ios支持)
"textColor": "#ffffff", // 授权按钮文字颜色 默认值:#ffffff
"title": "本机号码一键登录", // 授权按钮文案 默认值:“本机号码一键登录”
"borderRadius": "24px" // 授权按钮圆角 默认值:"24px" (按钮高度的一半)
},
"otherLoginButton": {
"visible": true, // 是否显示其他登录按钮,默认值:true
"normalColor": "", // 其他登录按钮正常状态背景颜色 默认值:透明
"highlightColor": "", // 其他登录按钮按下状态背景颜色 默认值:透明
"textColor": "#656565", // 其他登录按钮文字颜色 默认值:#656565
"title": "其他登录/注册方式", // 其他登录方式按钮文字 默认值:“其他登录方式”
"borderColor": "", //边框颜色 默认值:透明(仅iOS支持)
"borderRadius": "0px" // 其他登录按钮圆角 默认值:"24px" (按钮高度的一半)
},
"privacyTerms": {
"defaultCheckBoxState": false, // 条款勾选框初始状态 默认值: true
"uncheckedImage": "", // 可选 条款勾选框未选中状态图片(仅支持本地图片 建议尺寸 24x24px)(3.2.0+ 版本支持)
"checkedImage": "", // 可选 条款勾选框选中状态图片(仅支持本地图片 建议尺寸24x24px)(3.2.0+ 版本支持)
"checkBoxSize": 12, // 可选 条款勾选框大小,仅android支持
"textColor": "#BBBBBB", // 文字颜色 默认值:#BBBBBB
"termsColor": "#5496E3", // 协议文字颜色 默认值: #5496E3
"prefix": "我已阅读并同意", // 条款前的文案 默认值:“我已阅读并同意”
"suffix": "并使用本机号码登录", // 条款后的文案 默认值:“并使用本机号码登录”
"privacyItems": [ // 自定义协议条款,最大支持2个,需要同时设置url和title. 否则不生效
{
"url": "https://www.tothink.co/policy_app.aspx", // 点击跳转的协议详情页面
"title": "用户协议" // 协议名称
},
{
"url": "https://www.tothink.co/privacy_app.aspx", // 点击跳转的协议详情页面
"title": "隐私政策" // 协议名称
}
]
}
},
success(res) { // 正式登录成功
// console.log(res.authResult); // {openid:'登录授权唯一标识',access_token:'接口返回的 token'}
// that.info1 = res.authResult
// 在得到access_token后,通过callfunction调用云函数
uniCloud.callFunction({
name: 'getPhoneNumber', // 云函数名称
data: { //传给云函数的参数
'access_token': res.authResult
.access_token, // 客户端一键登录接口返回的access_token
'openid': res.authResult.openid // 客户端一键登录接口返回的openid
},
success(callRes) {
// console.log('调用云函数成功' + callRes)
// that.info1 = '调用云函数成功'
// that.phone = callRes.phoneNumber
that.goLoginUni(callRes.result.phoneNumber);
},
fail(callErr) {
console.log('调用云函数出错' + callErr)
// that.info3 = '调用云函数出错' + callErr
},
complete() {
uni.closeAuthView() //关闭授权登录界面
}
})
},
fail(err) { // 正式登录失败
console.log(err.errCode)
console.log(err.errMsg)
uni.closeAuthView() //关闭授权登录界面
}
})
}
// #endif
},<br>
在处理uni-app中的一键登录功能时,如果遇到iOS正常而Android失效的问题,这通常与平台差异、权限配置或者SDK集成有关。以下是一个简化的代码案例和检查步骤,帮助你定位和解决问题。
步骤1:检查Android权限配置
首先,确保你的Android项目中已经正确配置了所有必要的权限。对于一键登录功能,通常需要网络权限和读取手机状态的权限。
<!-- 在AndroidManifest.xml中添加 -->
<uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
<uses-permission android:name="android.permission.READ_PHONE_STATE" />
步骤2:集成第三方一键登录SDK
大多数一键登录功能依赖于第三方SDK,如阿里云、腾讯云等提供的一键登录服务。确保你已经按照SDK文档正确集成了SDK,并且已经替换了相关的AppID和密钥。
// 假设使用某云的一键登录SDK
import OneClickLogin from '@somecloud/one-click-login-sdk';
// 初始化SDK
OneClickLogin.init({
appId: 'your_app_id',
appSecret: 'your_app_secret'
});
// 调用一键登录
OneClickLogin.login().then(result => {
console.log('Login successful:', result);
}).catch(error => {
console.error('Login failed:', error);
});
步骤3:检查Android特定配置
某些SDK在Android上可能需要额外的配置,比如ProGuard规则或者Manifest占位符替换。确保这些配置已经按照SDK文档进行了设置。
# 如果SDK需要ProGuard规则,添加以下规则
-keep class com.somecloud.sdk.** { *; }
步骤4:调试和日志
在Android设备上使用Logcat来捕获相关的日志信息,这可以帮助你理解登录失败的具体原因。检查是否有权限被拒绝、网络请求失败或者其他错误信息。
adb logcat | grep "OneClickLogin" # 假设SDK的日志标签为OneClickLogin
步骤5:检查版本兼容性
确保你使用的SDK版本与uni-app的版本兼容,有时候新版本的SDK可能不支持旧版本的uni-app,反之亦然。
结论
如果以上步骤仍然不能解决问题,建议查阅SDK的官方文档,或者联系SDK的技术支持团队获取帮助。此外,也可以在uni-app的社区或者开发者论坛中搜索是否有其他开发者遇到并解决了类似的问题。