uniapp app端使用uniCloud云函数和云对象

云函数

在uniCloud==>cloudfunctions==>新增云函数,我这是一键登录获取手机号的

simLoginFunction==>index.js代码

javascript 复制代码
'use strict';
exports.main = async (event, context) => {
  // event里包含着客户端提交的参数
  console.log("event:",event,context);
  const res = await uniCloud.getPhoneNumber({
  	appid: '', //填写你自己的appid
  	provider: 'univerify',
  	access_token: event.access_token,
  	openid: event.openid
  })
 
  console.log(res); // res里包含手机号
  // 执行用户信息入库等操作,正常情况下不要把完整手机号返回给前端
  // 如果数据库在uniCloud上,可以直接入库
  // 如果数据库不在uniCloud上,可以通过 uniCloud.httpclient API,
  // 将手机号通过http方式传递给其他服务器的接口,
  // 详见:https://uniapp.dcloud.net.cn/uniCloud/cf-functions?id=httpclient
  return {
    code: 0,
    message: '获取手机号成功',
    data:res
  }
}

使用方法

javascript 复制代码
// sim授权登录
	const goSimAuth = () => {
		if (!checkSelectAgreement('sim')) return;
		uni.getProvider({
			service: 'oauth',
			success: function(res) {
				console.log(res.provider, res.provider == 'univerify') // ['qq', 'univerify']
				if (~res.provider.indexOf('univerify')) {
					console.log("univerify:SIM一键登录", verifyButton.value) // ['qq', 'univerify']
					uni.login({
						provider: 'univerify',
						univerifyStyle: {
							fullScreen: true,
							backgroundColor: "#ffffff", // 授权页面背景颜色,默认值:#ffffff
							backgroundImage: "/static/imgs/loginIcon/univerify/univerify.png",
							icon: {
								"path": " ", // 自定义显示在授权框中的logo,仅支持本地图片 默认显示App logo
								"width": "0px", //图标宽度 默认值:60px
								"height": "0px" //图标高度 默认值:60px
							},
							closeIcon: {
								"path": " ", // 自定义显示在授权框中的logo,仅支持本地图片
								"width": "0px", //图标宽度 默认值:60px (HBuilderX 4.0+ 仅iOS支持)
								"height": "0px" //图标高度 默认值:60px (HBuilderX 4.0+ 仅iOS支持)
							},
							phoneNum: {
								"color": "#05110D" // 手机号文字颜色 默认值:#202020
							},
							slogan: {
								"color": "#05110D" //  slogan 字体颜色 默认值:#BBBBBB
							},
							authButton: {
								"normalColor": "#FF6B35", // 授权按钮正常状态背景颜色 默认值:#3479f5
								"highlightColor": "#FF6B35", // 授权按钮按下状态背景颜色 默认值:#2861c5(仅ios支持)
								"disabledColor": "#FF6B35", // 授权按钮不可点击时背景颜色 默认值:#73aaf5(仅ios支持)
								"textColor": "#ffffff", // 授权按钮文字颜色 默认值:#ffffff
								"title": "登录", // 授权按钮文案 默认值:"本机号码一键登录"
								"borderRadius": "8px" // 授权按钮圆角 默认值:"24px" (按钮高度的一半)
							},
							otherLoginButton: {
								"visible": true, // 是否显示其他登录按钮,默认值:true
								"normalColor": "", // 其他登录按钮正常状态背景颜色 默认值:透明
								"highlightColor": "", // 其他登录按钮按下状态背景颜色 默认值:透明
								"textColor": "#7B7B7B", // 其他登录按钮文字颜色 默认值:#656565
								"title": "短信验证码登录", // 其他登录方式按钮文字 默认值:"其他登录方式"
								"borderColor": "", //边框颜色 默认值:透明(仅iOS支持)
								"borderRadius": "0px" // 其他登录按钮圆角 默认值:"24px" (按钮高度的一半)
							},
							privacyTerms: {
								"defaultCheckBoxState": true, // 条款勾选框初始状态 默认值: true
								"isCenterHint": false, //未勾选服务条款时点击登录按钮的提示是否居中显示 默认值: false (3.7.13+ 版本支持)
								"uncheckedImage": "/static/imgs/loginIcon/univerify/wxz.png", // 可选 条款勾选框未选中状态图片(仅支持本地图片 建议尺寸 24x24px)(3.2.0+ 版本支持)
								"checkedImage": "/static/imgs/loginIcon/univerify/xz.png", // 可选 条款勾选框选中状态图片(仅支持本地图片 建议尺寸24x24px)(3.2.0+ 版本支持)
								"checkBoxSize": 12, // 可选 条款勾选框大小
								"textColor": "#969B9C", // 文字颜色 默认值:#BBBBBB
								"termsColor": "#1F2021", //  协议文字颜色 默认值: #5496E3
								"prefix": "我已阅读并同意", // 条款前的文案 默认值:"我已阅读并同意"
								"suffix": "并使用本机号码登录", // 条款后的文案 默认值:"并使用本机号码登录"
								"privacyItems": [ // 自定义协议条款,最大支持2个,需要同时设置url和title. 否则不生效
									{
										"url": "https://api.minihongyu.com/privacy/usageLicense.html", // 点击跳转的协议详情页面
										"title": "用户协议" // 协议名称
									},
									{
										"url": "https://api.minihongyu.com/privacy/privacyAgreement.html", // 点击跳转的协议详情页面
										"title": "隐私政策" // 协议名称
									}
								]
							},
							buttons: { // 自定义页面下方按钮仅全屏模式生效(3.1.14+ 版本支持)
								"iconWidth": "40px", // 图标宽度(高度等比例缩放) 默认值:45px
								"list": verifyButton.value
							}
						},
						success: function(res) {
							// 关闭授权弹窗
							uni.closeAuthView()
							// {openid:'登录授权唯一标识',access_token:'接口返回的 token'}
							// 登录成功
							console.log(res.authResult, "sim授权的信息")
							// return
							simAuth.value = res.authResult
							goUniCloudFunction()
						},
						fail: function(err) {
							if (err.code == '30008') {
								console.log(err.index)
								switch (err.index) {
									case 0: {
										// 苹果登录
										console.log('苹果登录')
										goAppleAuth();
										break;
									}
									case 1: {
										// 微信登录
										console.log('微信登录')
										goWechatAuth();
										break;
									}
									case 2: {
										// 抖音登录
										console.log('抖音登录')
										goTiktokAuth()
										break;
									}
									default: {
										console.log('不知道点的啥')
									}
								}
							} else if (err.code == '30005') {
								console.log("111请开启移动数据后再次使用")
								uni.showToast({
									title: err.metadata.desc + ',请开启移动数据后再次使用',
									icon: "none"
								})
							}else if (err.code == '30003') {
								// 用户关闭验证界面
								uni.closeAuthView();
							}else if (err.code == '30002') {
								// 用户点击了其他登录方式
								uni.closeAuthView();
							} else {
								uni.showToast({
									title:'一键登录失败,请使用其他方式登录',
									icon: "none"
								})
								uni.closeAuthView();
							}
							// 登录授权失败
							console.log(err, "当前授权·失败了")
						}
					})
				}
			}
		});
	}
	// 上传云函数
	const goUniCloudFunction = () => {
		// simAuthPhone.value = '15881775851';
		// goSmiLoginApi();

		uniCloud.callFunction({
				name: "simLogingFunction", // 填写你自己的云函数名称
				//传入上面获取的openid和access_token获取手机号
				data: {
					access_token: simAuth.value.access_token, // 客户端一键登录接口返回的access_token
					openid: simAuth.value.openid // 客户端一键登录接口返回的openid
				}
			})
			.then((dataRes) => {
				//此处已经成功获取手机号等信息
				console.log("云函数返回的参数", dataRes)
				simAuthPhone.value = dataRes.result.data.phoneNumber;
				
				// 获取手机号后根据自己的需求做后面的登录操作即可
                goSmiLoginApi();
				//...
			})
			.catch((err) => {
				console.log(err);
				console.log("云函数报错", err)
				uni.showToast({
					title: err.errMsg,
					icon: "none"
				})
			})
	}
云对象

在uniCloud==>cloudfunctions==>新增云对象,我这是用的unipush的获取设备在线

uni-push-get-online==》index.obj.js代码

javascript 复制代码
// 云对象教程: https://uniapp.dcloud.net.cn/uniCloud/cloud-obj
// jsdoc语法提示教程:https://ask.dcloud.net.cn/docs/#//ask.dcloud.net.cn/article/129
// 简单的使用示例
'use strict';
const uniPush = uniCloud.getPushManager({appId:""}) //注意这里需要传入你的应用appId,用于指定接收消息的客户端
module.exports = {
	// 云对象
	getUnreadCount(event) {
		return uniPush.getClientStatusByCid(event.push_clientid)
	}
}

使用方法

javascript 复制代码
async getUserStatus() {
				// #ifdef APP-PLUS
				let pushOnline = uniCloud.importObject('uni-push-get-online');
				console.log(pushOnline)
				try {
					const res = await pushOnline.getUnreadCount({
						push_clientid: '0651ba89b18b7c62cfb'
					}) //导入云对象后就可以直接调用该对象的方法了,注意使用异步await
					console.log(res)
					this.isOnline = res.data['0651ba89b18b7c62cfb'].status == 'online'
				} catch (e) {
					console.log(e)
				}
				// #endif
			}
相关推荐
2501_9159214315 小时前
如何将 iOS 应用的 IPA 文件安装到手机进行测试
android·ios·智能手机·小程序·uni-app·iphone·webview
2501_9160088915 小时前
不连 Xcode,也能把 iPhone App 的实时日志看清楚
android·ios·小程序·https·uni-app·iphone·webview
小CC吃豆子16 小时前
uni-app 上架 iOS 时常见的审核被拒原因有哪些?
ios·uni-app
小钟不想敲代码16 小时前
uni-app基础入门
uni-app
郑州光合科技余经理1 天前
技术架构:上门服务APP海外版源码部署
java·大数据·开发语言·前端·架构·uni-app·php
HashTang1 天前
【AI 编程实战】第 6 篇:告别复制粘贴 - 设计一个优雅的 HTTP 模块
前端·uni-app·ai编程
iOS阿玮1 天前
苹果开发者账号申请的痛点,包含新限制说明!
uni-app·app·apple
2501_915921431 天前
iOS App 中 SSL Pinning 场景下代理抓包失效的原因
android·网络协议·ios·小程序·uni-app·iphone·ssl
雪芽蓝域zzs2 天前
uniapp 获取app版本信息(兼容鸿蒙)
uni-app