IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 移动开发 -> uniapp使用uniCloud实现手机号一键登录 -> 正文阅读

[移动开发]uniapp使用uniCloud实现手机号一键登录

uni-app手机号一键登录是DCloud联合个推公司推出的,整合三大运营商网关认证能力的服务。

通过运营商的底层SDK,实现App端无需短信验证码直接获取手机号,实现一键登录功能。手机一键登录 替换了短信验证登录的方式,消除有短信验证模式等待时间较长,操作繁琐和容易泄露的痛点。

  • 支持版本:HBuilderX 3.0+
  • 支持项目类型:uni-app的App端,5+App,Wap2App
  • 支持系统平台:Android、IOS
  • 支持运营商:中国移动、中国联通、中国电信

一、开通服务

登录DCloud开发者后台,找到“一键登录”,选择“基础配置”,开通一键登录功能。

二、添加应用

  • DCloud AppId:创建uniapp项目时,生成的ID,如?__UNI__XXXXXX
  • 应用名称:填写App名称即可
  • Android签名:打包时使用的包名
  • Android应用签名MD5:通过keytool工具自定义生成,也可以使用dcloud测试默认:BA:AD:09:3A:82:82:9F:B4:32:A7:B2:8C:B4:CC:F0:E9:F3:7D:AE:58。 建议自己生成
  • IOS BundleId:IOS打包时的包名,一般跟Android包名一样

提交申请后,如”开通服务“中图例,状态为”正常“,则审核通过。

三、充值

一键登录是一个收费项目,需要充值后使用。开发环境中,可以”连接本地云函数“实现登录功能。

四、安全配置

在一键登录中选择”安全配置“项,添加服务空间,系统提供uniCloud服务空间白名单安全配置,可以提高接口调用安全性,防止被他人盗用。

五、实现一键登录功能

5.1 创建云函数

创建云函数其实很简单,如果有不清楚的,可以参照前一篇文章中如何创建的:uni-app中使用uniCloud实现发送短信验证码(开通、配置、使用)

注:开发云函数或调用云函数,一定要先开通云空间

uniCloud云开发平台地址:uniCloud官网-web控制台

代码如下:

'use strict';
exports.main = async (event, context) => {
  // event里包含着客户端提交的参数
  const res = await uniCloud.getPhoneNumber({
  	appid: '_UNI_ABCDEFG', // 替换成自己开通一键登录的应用的DCloud appid
  	provider: 'univerify',
  	apiKey: 'xxx', // 在开发者中心开通服务并获取apiKey
  	apiSecret: 'xxx', // 在开发者中心开通服务并获取apiSecret
  	access_token: event.access_token,
  	openid: event.openid
  });
  
  return {
    code: 0,
    data: res,
    message: '获取手机号成功'
  }
}

5.2 客户端-请求登录授权

预登录操作可以判断当前设备环境是否支持一键登录。代码如下:

uni.preLogin({
	provider: 'univerify',
	success(){  //预登录成功
		// 显示一键登录选项
	},
	fail(res){  // 预登录失败
		// 不显示一键登录选项(或置灰)
    // 根据错误信息判断失败原因,如有需要可将错误提交给统计服务器
		console.log(res.errCode)
		console.log(res.errMsg)
	}
})
  • 如果当前设备环境不支持一键登录,此时应该显示其他的登录选项。
  • 如果手机没有插入有效的sim卡,或者手机蜂窝数据网络关闭,都有可能造成预登录校验失败。

预登录成功后,可以调用授权功能,根据用户操作及授权结果返回对应的回调,拿到access_token,代码如下:

uni.login({
	provider: 'univerify',
	univerifyStyle: { // 自定义登录框样式
    //参考`univerifyStyle 数据结构`
  },
	success(res){ // 登录成功
		console.log(res.authResult);  // {openid:'登录授权唯一标识',access_token:'接口返回的 token'}
	},
	fail(res){  // 登录失败
		console.log(res.errCode)
		console.log(res.errMsg)
	}
})

5.3 返回值

{
	"errMsg": "login:ok",
	"authResult": {
		"openid": "208E2FBE6EF64DF3B2D377D886EF2A14124262bfd7ae16465ea0f0634554dcee7636",
		"access_token": "ZGI4NjkxZWE4YjAyNGUzMjhiMmZiNDcwODBjYjc5MDF8fDJ8djJ8Mg=="
	}
}

5.4 客户端通过callFunction向uniCloud云端换取手机号信息

通过5.3中的返回值,通过执行云函数换取手机号信息,代码如下:

// 在得到access_token后,通过callfunction调用云函数
uniCloud.callFunction({
  name: 'xxx', // 你的云函数名称
  data: {
    'access_token': 'xxx', // 客户端一键登录接口返回的access_token
    'openid': 'xxx' // 客户端一键登录接口返回的openid
  }
}).then(res => {
  // res.result = {
  //   code: '',
  //   message: ''
  // }
  // 登录成功,可以关闭一键登录授权界面了
}).catch(err=>{
  // 处理错误
})

5.5 综合示例

以上 客户端整合后,如下代码所示:

methods: {
	//登录函数
	login(){
		let that = this;
		uni.preLogin({
			provider: 'univerify',
			success() {
				uni.login({
					provider: 'univerify',
					success: res => {
						if(res.errMsg=='login:ok'){
							//执行云函数
							uniCloud.callFunction({
								name: 'phoneNumber',
								data: {
									// 客户端一键登录接口返回的access_token
									access_token: res.authResult['access_token'],
									// 客户端一键登录接口返回的openid
									openid: res.authResult['openid']
								}
							}).then(res => {
								//关闭弹框事件
								uni.closeAuthView();
								if(res.result['code']==0){
									//获取的手机号
									//do somthing...
									console.log(res.result['phoneNumber']);
								}else{
									uni.showToast({
										icon: 'none',
										title: '授权失败~'
									});
								}
								//if end
							}).catch(msg => {
								//关闭弹框事件
								uni.closeAuthView();
								console.error(msg);
							});
						}else{
							//关闭弹框事件
							uni.closeAuthView();
							uni.showToast({
								icon: 'none',
								title: res['errMsg']
							});
						}
					},
					fail: res => {
						uni.showToast({
							icon: 'none',
							title: res['errMsg']
						});
					}
				});
			},
			fail: res => {
				uni.showToast({
					icon: 'none',
					title: res['errMsg']
				});
			}
		});
	}
}

以上仅供参考,更详细请访问官方文档:概述 | uni-app官网

  移动开发 最新文章
Vue3装载axios和element-ui
android adb cmd
【xcode】Xcode常用快捷键与技巧
Android开发中的线程池使用
Java 和 Android 的 Base64
Android 测试文字编码格式
微信小程序支付
安卓权限记录
知乎之自动养号
【Android Jetpack】DataStore
上一篇文章      下一篇文章      查看所有文章
加:2022-04-09 18:32:44  更:2022-04-09 18:35:23 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/24 20:58:42-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码