1、开通uni一键登录服务
1)需要登录DCloud开发者中心,申请开通一键登录服务。(注:已在开发者中心开发了项目应用获取appid)

2)进入基础配置配置相关的信息,我这个是已经配置好了,在获取用户手机号码时需要云服务用到的ApiKey和ApiSecret可在这里获取

真机调试无需添加应用,如需打包使用请添加。一键登录应用ID为离线打包时配置的appid

3)添加服务空间

2、uni-app项目开通uniCloud服务
1)在uni-app项目中创建云开发环境,可阿里云或者腾讯云(我的是阿里云)

2)创建云函数,右键云开发环境创建

3)云函数使用

'use strict';
exports.main = async (event, context) => {
// event里包含着客户端提交的参数
const res = await uniCloud.getPhoneNumber({
appid: 'xxxx', // 替换成自己开通一键登录的应用的DCloud appid,使用callFunction方式调用时可以不传(会自动取当前客户端的appid),如果使用云函数URL化的方式访问必须传此参数
provider: 'univerify',
apiKey: 'caf274f2f33c8715725f28ee5c755602', // 在开发者中心开通服务并获取apiKey
apiSecret: '03f484268054c2b8f4cfb575ed5f2d89', // 在开发者中心开通服务并获取apiSecret
access_token: event.access_token,
openid: event.openid
})
// 这里已经成功获取手机号,访问后端接口处理
const phone = res.phoneNumber
const apiUrl = "xxxx" // 后端登录验证地址
return await uniCloud.httpclient.request(apiUrl, {
method: 'POST',
data: {
phone: phone
},
contentType: 'json', // 指定以application/json发送data内的数据
dataType: 'json' // 指定返回值为json格式,自动进行parse
})
};
4)将云函数上传到云服务器(点击云函数右键上传)

5)项目配置(manifest.json中app模块的一键登录勾选)

3、项目开发
1)页面点击一键登录(客户端-预登录)

uni.preLogin({
provider: 'univerify',
success(res) { //预登录成功
console.log('预登录成功');
uni.login({
provider: 'univerify',
univerifyStyle: {
"icon": {
"path": "static/0105c858eeffaca8012049ef28010c.jpg" // 自定义显示在授权框中的logo,仅支持本地图片 默认显示App logo
},
},
success(res) { // 登录成功
uniCloud.callFunction({
name: 'get_phone_with_card_token', // 你的云函数名称
data: {
access_token: res.authResult
.access_token, // 客户端一键登录接口返回的access_token
openid: res.authResult.openid // 客户端一键登录接口返回的openid
}
}).then(res => {
console.log(res);
if (res.result.data.status == 0) {
// 登陆失败操作
console.log('登陆失败操作');
} else {
console.log('登陆成功操作');
// 登陆成功操作
uni.closeAuthView()
}
}).catch(err => {
console.log("获取失败");
})
},
fail(res) { // 登录失败
}
})
},
fail(res) { // 预登录失败
// 不显示一键登录选项(或置灰)
// 根据错误信息判断失败原因,如有需要可将错误提交给统计服务器
console.log('失败', 2222);
console.log(res.errCode)
console.log(res.errMsg)
}
});2)运行时可在云函数中查看日志(判断是否请求成功)

注)如果手机没有插入有效的sim卡,或者手机蜂窝数据网络关闭,都有可能造成预登陆校验失败。(所以运行测试时需要在有sim卡的真机上测试,使用数据线连接电脑和手机,将项目运行在手机上)
连接后可自动检测
原文链接https://blog.csdn.net/weixin_42373488/article/details/113182370