使用 apifm 插件进行 Flutter 云开发——QQ一键登录/注册
在你的 App 中集成手机QQ一键授权(注册)登录功能,达到快速注册、快速登录功能
按照本教程的操作指引,预计5分钟即可帮你实现并掌握QQ登录的实现
申请开通QQ互联
https://connect.qq.com/
前往QQ互联官网,创建一个移动应用的接入,审核通过后,你就可以获取到一个 APP ID;
下文中所提的 APP ID,或者 oauthConsumerKey,以及 oauth_consumer_key 都是值得这里的 APP ID;
安装 Flutter 依赖
pubspec.yaml 文件增加依赖
dependencies:flutter_qq: ^0.0.5
安装依赖
$ flutter pub get
引入 package
在 dart 文件中,引入插件,下面会用到
import 'package:flutter_qq/flutter_qq.dart';
配置 Android / IOS 打包设置
Android
修改 AndroidManifest.xml 文件
添加权限
<uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
application标签下增加:
<uses-library android:name="org.apache.http.legacy" android:required="false" />
添加activity
下面的 [QQ APPId] 请用上面的 APP ID 替换
<activityandroid:name="com.tencent.connect.common.AssistActivity"android:configChanges="orientation|keyboardHidden"android:screenOrientation="behind"android:theme="@android:style/Theme.Translucent.NoTitleBar" />
<activityandroid:name="com.tencent.tauth.AuthActivity"android:launchMode="singleTask"android:noHistory="true" ><intent-filter><action android:name="android.intent.action.VIEW" /><category android:name="android.intent.category.DEFAULT" /><category android:name="android.intent.category.BROWSABLE" /><data android:scheme="[QQ APPId]" /></intent-filter>
</activity>
IOS
项目的Info.plist文件中增加:
<key>CFBundleURLTypes</key>
<array><dict><key>CFBundleTypeRole</key><string>Editor</string><key>CFBundleURLName</key><string>tencent</string><key>CFBundleURLSchemes</key><array><string>tencent1107493622</string></array></dict>
</array>
<key>LSApplicationQueriesSchemes</key>
<array><string>mqq</string><string>mqqapi</string><string>mqqwpa</string><string>mqqbrowser</string><string>mttbrowser</string><string>mqqOpensdkSSoLogin</string><string>mqqopensdkapiV2</string><string>mqqopensdkapiV3</string><string>mqqopensdkapiV4</string><string>wtloginmqq2</string><string>mqzone</string><string>mqzoneopensdk</string><string>mqzoneopensdkapi</string><string>mqzoneopensdkapi19</string><string>mqzoneopensdkapiV2</string><string>mqqapiwallet</string><string>mqqopensdkfriend</string><string>mqqopensdkdataline</string><string>mqqgamebindinggroup</string><string>mqqopensdkgrouptribeshare</string><string>tencentapi.qq.reqContent</string><string>tencentapi.qzone.reqContent</string>
</array>
<key>NSMicrophoneUsageDescription</key>
<string>microphoneUsageDescription</string>
<key>NSPhotoLibraryUsageDescription</key>
<string>photoLibraryDesciption</string>
<key>NSCameraUsageDescription</key>
<string>cameraUsageDesciption</string>
<key>LSRequiresIPhoneOS</key>
<true/>
<key>UIBackgroundModes</key>
<array><string>fetch</string><string>remote-notification</string>
</array>
项目的AppDelegate.m文件中增加:
- (BOOL)application:(UIApplication *)application openURL:(NSURL *)urloptions:(NSDictionary<NSString*, id> *)options
{NSString * urlStr = [url absoluteString];[[NSNotificationCenter defaultCenter]postNotificationName:@"QQ" object:nil userInfo:@{@"url":urlStr}];return YES;
}
调用手机QQ
loginQQ () async {const appid = '1105644913';await FlutterQq.registerQQ(appid);var qqResult = await FlutterQq.login(); if (qqResult.code == 0) {// 登录成功Fluttertoast.showToast(msg: '授权成功', gravity: ToastGravity.CENTER, fontSize: 14);var res = await Apifm.loginQQConnect(appid, qqResult.response['openid'], qqResult.response['accessToken']);if (res['code'] == 10000) {// 用户不存在,则先注册await Apifm.registerQQConnect({'oauthConsumerKey': appid,'openid': qqResult.response['openid'],'accessToken': qqResult.response['accessToken'],});// 注册完后重新登录res = await Apifm.loginQQConnect(appid, qqResult.response['openid'], qqResult.response['accessToken']);}if (res['code'] != 0) {// 登录失败Fluttertoast.showToast(msg: res['msg'], gravity: ToastGravity.CENTER, fontSize: 14);return;}processLoginSuccess (res['data']['token'], res['data']['uid']); // 登录成功后的业务处理} else if (qqResult.code == 1) {// 授权失败Fluttertoast.showToast(msg: qqResult.message, gravity: ToastGravity.CENTER, fontSize: 14);} else {// 用户取消授权Fluttertoast.showToast(msg: '已取消', gravity: ToastGravity.CENTER, fontSize: 14);}}
方法拆解
初始化QQ互联组件
FlutterQq.registerQQ(APP ID);
弹出QQ授权窗口
FlutterQq.login();
用户点击同意授权后,你就可以取到授权参数:openid、accessToken
QQ互联一键注册
Apifm.registerQQConnect(Map<String, String> params)
QQ互联的一键注册功能,需要以下参数:
QQ授权后返回的参数:
oauthConsumerKey、openid、accessToken
具体请查阅QQ互联的接口文档说明
可选参数:
referrer 邀请人,邀请你注册的用户id
postJsonString 注册的扩展信息,Json数据格式
QQ互联一键登录
Apifm.loginQQConnect(String oauthConsumerKey, String openid, String accessToken)
登录的3个参数,请查阅QQ互联的接口文档返回值说明
用户管理
开通开发者后台
《使用 apifm 插件进行 Flutter 云开发——安装篇》
用户管理
本例Flutter源码:
https://github.com/gooking/apifm-flutter-demo
使用 apifm 插件进行 Flutter 云开发——QQ一键登录/注册相关推荐
- 使用 apifm 插件进行 Flutter 云开发——微信一键登录/注册
在你的 App 中集成手机微信一键授权(注册)登录功能,达到快速注册.快速登录功能 按照本教程的操作指引,预计5分钟即可帮你实现并掌握微信登录的实现 用户管理 微信开放平台创建应用 https://o ...
- 使用 apifm 插件进行 Flutter 云开发——积分功能(积分明细 / 积分券 / 连续签到得积分 / 购物积分抵扣规则)
功能说明: 积分券 后台批量生成积分券(每个积分券有自己独立的券号): 你可以根据自己的需要: 制作实体vip积分卡,类似目前的超市卡,刮开涂层后查看券号: 印刷纸质优惠券.积分券,上面印刷券号: 使 ...
- Android高效率编码-第三方SDK详解系列(二)——Bmob后端云开发,实现登录注册,更改资料,修改密码,邮箱验证,上传,下载,推送消息,缩略图加载等功能
Android高效率编码-第三方SDK详解系列(二)--Bmob后端云开发,实现登录注册,更改资料,修改密码,邮箱验证,上传,下载,推送消息,缩略图加载等功能 我的本意是第二篇写Mob的shareSD ...
- 微信小程序云开发用户身份登录_微信小程序+云开发实现欢迎登录注册
前段时间和同学一起做了一个小程序,用来参加学校的比赛,完成后把项目内容分割一下,贴到博客上面,算是学习记录和总结吧. 因为是学生党,而且并没有很大的需要,所以选择了微信小程序为开发者提供的" ...
- QQ一键登录助手_DedeCMS插件_适合FOR V55 V56 V57_GBK.zip
QQ一键登录助手_DedeCMS插件_适合FOR V55 V56 V57_GBK.zip 此插件是方便会员进行注册登录操作,为 站长 带来更多活跃会员 使用此插件要注意一下几点: 1.此插件使用前请到 ...
- Android插件化的思考——仿QQ一键换肤,思考比实现更重要!
Android插件化的思考--仿QQ一键换肤,思考比实现更重要! 今天群友希望写一个关于插件的Blog,思来想去,插件也不是很懂,只是用大致的思路看看能不能模拟一个,思路还是比较重要的,如果你有兴趣的 ...
- android 仿qq换肤功能,Android插件化的思考——仿QQ一键换肤,思考比实现更重要!.doc...
Android插件化的思考--仿QQ一键换肤,思考比实现更重要! 关于QQ的换肤,他们的实现思路我不是很清楚,但是你可以看一下这张换肤的截图 我们想使用哪个主题就直接下载就好了,这一实现的过程我们大致 ...
- php 一键登录插件,[免费]ZblogPHP QQ一键登录免费插件
先上背景:自从装了ZBlogPHP程序,一直在寻找QQ互联的插件,因为我懒得记密码!!!因为懒...所以就在某应用中心搜索,工夫不负有心人,找是找到了,,但是,,,但是价格不菲啊!!! ,,,作为一个 ...
- 织梦DEDECMS QQ一键登录插件返回空白解决方法
修改织梦网站时,遇到个QQ一键登录返回是空白的问题 找了好久没发现什么原因,最后才知道原因在于服务器, 因为腾讯OAuth2.0采用的是https协议进行数据请求,QQ一键登录插件采用curl拓展对数 ...
最新文章
- 腐蚀rust高速箭怎么做不了_皮带轮动平衡怎么做
- 控制-超前校正-C语言实现
- poj2479与poj2593 , 同一道DP题
- 学习笔记(47):Python实战编程-pack布局
- 数据结构——最小生成树之克鲁斯卡尔算法(Kruskal)
- Android商城开发系列(二)——App启动欢迎页面制作
- linux命令行sip电话,基于Linux和MiniGUI的SIP电话终端设计
- bean type not found
- 利用thread和sleep生成字符串的伪随机序列
- 3.5框架不能创建就加这一段代码
- Pyrene-PEG2000-RB,含有芘丁酸和罗丹明的PEG,Rhodamine-PEG2000-Pyrene
- win7共享中心服务器运行失败,Win7系统网络与共享中心无法打开怎样解决?
- 致远OA A6 员工敏感信息泄露
- 机器人操作系统ROS(9)Gazebo物理仿真(摄像头仿真)
- python解一元二次方程复数_python – SymPy和复数的平方根
- 图像超分辨率重建(pytorch)
- python进程通信方式总结(一):管道与信号量
- 分布式GK Summary算法
- 【资源分享】少女爱上姐姐汉化版游戏下载,附图文攻略
- 漫漫D3路----W3C+CSS+JS