uniapp实现一键登录(保姆式教程)

官方文档入口链接

  • 前置条件:
  • 手机安装有sim卡
  • 手机开启数据流量(与wifi无关,不要求关闭wifi,但数据流量不能禁用。)
  • 开通uniCloud服务(但不要求所有后台代码都使用uniCloud)

没调用成功时候不要急,根据错误码来找问题 错误码入口链接

第一步 .开通uniCloud服务并创建服务空间

申请开通地址:https://unicloud.dcloud.net.cn/home
创建样板图以(phonedemo)服务空间名为例
在这里插入图片描述

第二步 开通uni一键登陆服务

开发者需要登录 DCloud开发者中心,申请开通一键登录服务。
详细步骤参考:开通一键登录服务的详细教程

申请一键登录服务信息ok样板图(调用成功一次会扣掉0.02)。
申请一键登陆服务信息(调用成功一次会扣掉0.02)

第三步 回到开发者中心(安全配置)https://dev.dcloud.net.cn/uniLogin/security 关联上配置好的服务空间

  • 添加配置好的服务空间入口
    在这里插入图片描述
    在这里插入图片描述
  • 添加服务空间 ok
    在这里插入图片描述
    注:在 uniCloud 中使用一键登录接口时,将允许调用接口的服务空间添加到此列表中。服务空间添加成功后,只有列表中的服务空间才可以调用当前账号下的短信接口。此列表为空时,不校验调用方的服务空间。

第四步 在云数据库建立regUser数据表,用于保存登录成功的手机号与openid

在这里插入图片描述

第五步 实战教程

1.创建新项目(phoneLogin)
在这里插入图片描述

  • 建立云函数并上传部署 (点击项目右键 uniCloud云开发环境 (以阿里云为例))
    在这里插入图片描述

  • 点击uniCloud右键(关联云服务空间或项目选项)在这里插入图片描述

  • 关联服务空间 ok 样板图
    在这里插入图片描述

  • 点击uniCloud ----> cloudfunctions 创建getPhoneNumber --> index.js 文件在这里插入图片描述
    附上源码

    'use strict';
    
    const db = uniCloud.database()
    
    exports.main = async (event, context) => {
    	const res = await uniCloud.getPhoneNumber({
    		appid: '', // 替换成自己开通一键登录的应用的DCloud appid,使用callFunction方式调用时可以不传(会自动取当前客户端的appid),如果使用云函数URL化的方式访问必须传此参数
    		provider: 'univerify',
    		apiKey: '', // 在开发者中心开通服务并获取apiKey
    		apiSecret: '', // 在开发者中心开通服务并获取apiSecret
    		access_token: event.access_token,
    		openid: event.openid
    	});
    
    	console.log(res); // res里的数据格式	{ code: 0, success: true, phoneNumber: '186*****078' }
    
    	// 执行入库等操作,正常情况下不要把完整手机号返回给前端	
    	return await db.collection('regUser').add({		
    		openid: event.openid, //前端提交过来的数据
    		PhoneNumber:res.phoneNumber,
    		createTime: Date.now()		
    	})
    };
    

``

保姆式提醒
  • appid指的是(附上截图)在这里插入图片描述
  • apiKey和 apiSecret 所指的是,附上截图+链接(https://dev.dcloud.net.cn/uniLogin)在这里插入图片描述

前端代码实现

<template>
	<view>
		<view v-if="autoStatus" class="login-view">
			<image class="logo-img" src="/static/logo.png"></image>
			<view class="login-btn" @click="submitlogin()">
				一键登陆
			</view>
		</view>
		<view v-else>
			不支持一键登陆功能
		</view>
	</view>
</template>

<script>
	export default {
		data() {
			return {
				autoStatus: true
			}
		},
		onLoad() {
			this.isAutoLogin()
		},
		methods: {
			// 判断是否支持一键登陆
			isAutoLogin() {
				let _that = this
				uni.getProvider({ //获取可用的服务提供商
					service: 'oauth',
					success: function(res) {
						console.log(res.provider) // ['weixin', qq', 'univerify']
					}
				});
				uni.preLogin({ //预登录
					provider: 'univerify', //用手机号登录
					success() {
						_that.autoStatus = true
						console.log('预登录成功')
					},

					fail(err) { //预登录失败
						_that.autoStatus = false
						console.log('错误码:' + err.errCode)
						console.log(err.errMsg)
					}
				})
			},
			submitlogin() {
				uni.login({ //正式登录,弹出授权窗
					provider: 'univerify',
					univerifyStyle: { // 自定义登录框样式
						"fullScreen": true, // 是否全屏显示,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": "本机号码一键登录" // 授权按钮文案 默认值:“本机号码一键登录”  
						}
					},
					success(res) { // 正式登录成功
						console.log(res.authResult); // {openid:'登录授权唯一标识',access_token:'接口返回的 token'}

						// 在得到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)
							},
							fail(callErr) {
								console.log('调用云函数出错' + callErr)
							},
							complete() {
								uni.closeAuthView() //关闭授权登录界面
							}
						})
					},
					fail(err) { // 正式登录失败
						console.log(err.errCode)
						console.log(err.errMsg)
						uni.closeAuthView() //关闭授权登录界面
					}
				})
			}
		}
	}
</script>

<style lang="scss">
	.login-view {
		display: flex;
		flex-direction: column;
		align-items: center;
		justify-content: center;

		.logo-img {
			width: 200rpx;
			height: 200rpx;
			border-radius: 50%;
			margin: 100rpx auto;
		}

		.login-btn {
			width: 50%;
			text-align: center;
			background-color: #939393;
			color: #FFFFFF;
			border-radius: 50rpx;
			height: 70rpx;
			line-height: 70rpx;
			font-size: 26rpx;
		}
	}
</style>

页面吊起截图
在这里插入图片描述

  • 查询调用成功数据 入口
    在这里插入图片描述
    在这里插入图片描述

整体到这已经实现一键登录功能啦~

Xilinx FPGA平台DDR3设计保姆式教程是针对初学者的一种经典教程,旨在帮助他们快速上手并深入了解DDR3存储器的设计。 首先,要设计DDR3接口,我们需要确保FPGA芯片和DDR3存储器之间的信号完整。这包括遵循准则和规范以保证信号的正确传输和时序。在设计过程中,我们需要特别关注信号的布线、阻抗匹配和信号电平的调整。 接下来,我们需要了解DDR3存储器的工作原理和时序要求。DDR3存储器使用双数据速率(DDR)技术,可以在每个时钟周期内传输两个数据。在设计过程中,我们需要根据DDR3规范设置好时钟频率和时序参数,以确保正确的数据读写操作。 然后,我们可以开始FPGA设计和设置。在Xilinx FPGA平台上,我们可以使用Xilinx Vivado设计套件来完成DDR3接口的设计。Vivado提供了一套整合的工具,包括IP核生成器、约束文件编辑器和时序分析器,可以帮助我们完成DDR3接口的设置和验证。 在设计过程中,我们需要使用IP核生成器来生成DDR3控制器和PHY IP核,并根据设计要求进行配置。然后,我们可以使用约束文件编辑器来定义时序约束,以确保时序满足DDR3规范的要求。 最后,我们需要进行验证和调试。通过使用时序分析器进行时序约束评估和时序优化,可以确保DDR3接口的稳定性和可靠性。在验证过程中,我们可以使用模拟工具和硬件调试方法来确保数据的正确读写和传输。 综上所述,Xilinx FPGA平台DDR3设计保姆式教程可以帮助初学者了解和掌握DDR3接口的设计。通过遵循相关准则和规范,使用Xilinx Vivado设计套件进行设计和设置,并进行验证和调试,我们可以实现稳定可靠的DDR3接口,并应用于各种应用领域中。
评论 39
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值