flutter 集成腾讯QQ分享登录

原创:@As.Kai
博客地址:https://blog.csdn.net/qq_42362997
如果以下内容对您有帮助,点赞点赞点赞~

项目内容:

  • 当前环境监测(当前设备中有没有qq或者TIM)
  • 登录
  • 获取用户信息
  • 获取UnionID
  • 分享说说
  • 文本分享
  • 网页分享
  • 图片分享

首先需要在腾讯开放平台申请一个开发者账号并且添加应用授权
腾讯开放平台:https://open.tencent.com/
位置信息要填写具体到X栋X号 不然很容易审核失败
别问我为什么会知道

审核通过后,点击创建应用-选择移动应用-选择Android平台

上传应用时会让你填写一个应用包名和一个应用签名
应用包名在哪找我就不细说了 因为对接过其他的第三方都知道

这里主要说一下应用签名在哪看:
官方提供了一个获取应用签名的app
我这边已经提取出来打了包 AppManage.apk

自行下载下就行(Android环境下运行)

打开AppManage.apk后找到你需要集成QQ的项目
选择左边一键复制即可复制项目的应用签名
应用签名包名填写完成后提交审核


审核通过后 会给到你一个appId和appKey
拿到我们的appId和appKey回到我们的项目中来

找到app/build.gradle中的,进项相对应配置

android{.......defaultConfig{......ndk{//选择要添加的对应 cpu 类型的 .so 库。abiFilters 'armeabi', 'armeabi-v7a', 'x86', 'x86_64', 'mips', 'mips64', 'arm64-v8a'}manifestPlaceholders = [TENCENT_APP_ID: "你的AppId"//腾讯QQ AppId]}
}

接着回到page页面
引入所需要的包:

import 'package:tencent_kit/tencent_kit.dart';
import 'package:okhttp_kit/okhttp_kit.dart';
import 'package:path_provider/path_provider.dart' as path_provider;
import 'package:path/path.dart' as path;

并且声明变量以及监听方法

//QQ分享
static const String _TENCENT_APPID = '你的APPID';
Tencent _tencent = Tencent()..registerApp(appId: _TENCENT_APPID);
TabController _controller;//分享
StreamSubscription<TencentShareResp> _share;//登录
StreamSubscription<TencentLoginResp> _login;
TencentLoginResp _loginResp;//分享监听回调
void _listenShare(TencentShareResp resp) {String content = 'share:${resp.ret} - ${resp.msg}';_showTips('分享', content);
}//登录监听回调
void _listenLogin(TencentLoginResp resp) {_loginResp = resp;String content = 'login: ${resp.openid} - ${resp.accessToken}';_showTips('登录', content);
}//展示提示
void _showTips(String title, String content) {showDialog<void>(context: context,builder: (BuildContext btx) {return AlertDialog(title: new Text(title),content: new Text(content),);});
}
@override
void initState(){//初始化监听_share = _tencent.shareResp().listen(_listenShare);_login = _tencent.loginResp().listen(_listenLogin);super.initState();
}

内容build中代码

build(BuildContext context){
...............
new Container(width: MediaQuery.of(context).size.width,height: MediaQuery.of(context).size.height,child: new Column(children: [new ListTile(title: const Text('环境检查',style: TextStyle(color: Colors.white),),onTap: () async {String content ='QQ install: ${await _tencent.isQQInstalled()}\nTIM install: ${await _tencent.isTIMInstalled()}';_showTips('环境检查', content);},),new ListTile(title: const Text('登录',style: TextStyle(color: Colors.white)),onTap: () {//获取简单的登录信息_tencent.login(scope: <String>[TencentScope.GET_SIMPLE_USERINFO]);},),new ListTile(title: const Text('获取用户信息',style: TextStyle(color: Colors.white)),onTap: () async {if (_loginResp != null &&_loginResp.isSuccessful() &&!_loginResp.isExpired()) {TencentUserInfoResp userInfo =await _tencent.getUserInfo(appId: _TENCENT_APPID,openid: _loginResp.openid,accessToken: _loginResp.accessToken);if (userInfo.isSuccessful()) {_showTips('用户信息','${userInfo.nickname} - ${userInfo.gender} - ${userInfo.genderType}');} else {print('用户信息msg===${userInfo.msg}');}} else {print('请先登录');_showTips('请先登录', '未找到登录信息,请重新登录后重试!');}},),new ListTile(title: const Text('获取UnionId',style: TextStyle(color: Colors.white)),onTap: () async {//_login不为空并且成功并且没过期if (_loginResp != null &&_loginResp.isSuccessful() &&!_loginResp.isExpired()) {TencentUnionidResp unionid =await _tencent.getUnionId(accessToken: _loginResp.accessToken);if (unionid.isSuccessful()) {_showTips('UnionId','${unionid.clientId} - ${unionid.openid} - ${unionid.unionid}');} else {_showTips('UnionId','${unionid.error} - ${unionid.errorDescription}');}} else {print('请先登录');_showTips('请先登录', '未找到登录信息,请重新登录后重试!');}}),new ListTile(title: const Text('分享说说',style: TextStyle(color: Colors.white)),onTap: () {_tencent.shareMood(scene: TencentScene.SCENE_QZONE,summary: '说说分享测试');},),new ListTile(title: const Text('文本分享',style: TextStyle(color: Colors.white)),onTap: () {_tencent.shareText(scene: TencentScene.SCENE_QQ,summary: '分享测试',);},),new ListTile(title: const Text('网页分享',style: TextStyle(color: Colors.white)),onTap: () {_tencent.shareWebpage(scene: TencentScene.SCENE_QQ,title: 'title',targetUrl: 'https://www.baidu.com/');},),new ListTile(title: const Text('图片分享',style: TextStyle(color: Colors.white)),onTap: () async {OkHttpClient client = OkHttpClientBuilder().build();var resp = await client.newCall(RequestBuilder().get().url(HttpUrl.parse('https://document-export.canva.cn/RLH-M/DAESUzRLH-M/11/thumbnail/GHHxA-Zy0XwAMUv5EpJSow-0001-216768191.png')).build()).enqueue();if (resp.isSuccessful()) {Directory saveDir = Platform.isIOS? await path_provider.getApplicationDocumentsDirectory(): await path_provider.getExternalStorageDirectory();File saveFile =File(path.join(saveDir.path, 'timg.png'));if (!saveFile.existsSync()) {saveFile.createSync(recursive: true);saveFile.writeAsBytesSync(await resp.body().bytes(),flush: true,);}await _tencent.shareImage(scene: TencentScene.SCENE_QQ,imageUri: Uri.file(saveFile.path),);}},),],),
),
}

效果展示:

别忘了点赞~
关注我,一起成长!
@As.Kai

flutter 简单集成第三方腾讯QQ分享/登录相关推荐

  1. QQ消息丢失与腾讯QQ的登录服务器浅析

    前言:"又断网了...","群消息有没有收到...","我怎么看不到之前的群消息?","为什么我的QQ消息时间是乱的,后发的消息先 ...

  2. iOS 类似简单的第三方微博客户端,可进行登录微博浏览相关信息

    Demo地址:https://github.com/ChenNan-FRAM/Fenvo (如果你觉得有用麻烦star一下感激不尽) Fenvo Objective-C, iOS 类似简单的第三方微博 ...

  3. Flutter如何集成第三方插件

    https://pub.dev/flutter是Google官方的Dart Packages仓库,类似于node中的npm仓库,我们可以在上面查找我们需要的包和插件,也可以向pub发布我们的包和插件 ...

  4. iOS开发集成第三方微信支付和分享问题

    前言 直入主题 有关微信支付问题 在这里就不再介绍有关微信支付申请的流程了,小白可以参看微信开放平台和微信服务号也可申请微信支付接口.这里是微信官方给的微信支付接入指南(然而并没有太大用处) 1. A ...

  5. linux小红帽系统能用微信,小红帽腾讯QQ微信登录版-小红帽腾讯版v1.0.3 安卓版-腾牛安卓网...

    小红帽腾讯版是一款专为广大喜爱玩童话类手游的玩家打造的欧美风游戏,这款游戏有着最为精致的游戏画面,黑色风格的童话故事,带领玩家领略不一样的童年世界,给您带来最佳的游戏体验! 小红帽腾讯版简介 < ...

  6. PC端QQ分享到好友链接

    ShareQQ() { var url = //这个很重要 腾讯QQ分享外部接口 "https://connect.qq.com/widget/shareqq/index.html" ...

  7. android qq分享自动弹出,史上最详细Android集成QQ,微信,微博分享(不要第三方)持续更新中...

    QQ1 下载sdk并运行demo 2 各种配置 IUiListener 4 分享图片41 分享到QQ 41 分享到QZONE Sina微博配置 选择集成sdk方式 分享图片 现在项目中用个第三方登录, ...

  8. 【第三方互联】4、分享至腾讯QQ、新浪微博(sina)

    在项目开发中,我们需要将项目中相关信息分享至第三方平台,本次学习分享至 QQ.新浪微博 一.开发准备 在学习之前,我们选介绍一下我们分享至第三方平台时所需要的信息 url:项目访问地址 title:标 ...

  9. 用sharesdk第三方等陆或分享到QQ空间,qq好友,微信,朋友圈,新浪微博,腾讯微博等

    公司最近不景气,辞职后的日子刚开始还挺嗨皮,过两天闲的蛋都碎了,都四月份了,还是领到毕业证在找吧...... 不扯淡了,项目中经常有第三方等陆或者分享的功能,以下是我用sharesdk实现的步骤.. ...

最新文章

  1. Go后台项目架构思考与重构 | 深度长文
  2. Scala 学习笔记(1)
  3. XSD详解二 - 简易元素、属性、内容限定
  4. java md5加密32位小写_Java生成MD5的方法,简单封装并转为32位小写
  5. char与TCHAR相互转化
  6. 微服务启动报错命令行太长解决方案
  7. 嵌入式实时系统的任务设计
  8. 复频域求零输入响应_第十四章 动态电路的复频域分析 习题答案
  9. creo配置文件config选项详解_5年资深架构师重点聚焦:SpringBoot的配置详解+内嵌Servlet容器
  10. 苦B的程序猿道路数据验证
  11. php 对mvc的认识,【PHP】MVC框架为何这么难! 4年后终于明白了,被ThinkPHP害得!...
  12. leetcode 之Rotate List(18)
  13. 【Learning】 动态树分治
  14. vue router-link添加点击事件无效
  15. SteamSDK发布更新
  16. 金融类自定义View(三)--股票分时图(关于细节和实现思路)
  17. Word导出PDF出现空白页
  18. So Far Away
  19. 用友NC V5.7 5.6 5.5 2019新个人所得税增强包
  20. Windows系统百宝箱

热门文章

  1. win7虚拟计算机名,[计算机]win7自带虚拟机.doc
  2. 403Forbidden错误的原因和解决方法
  3. MX1508 手册及说明
  4. Windows系统关机及快速关机原理
  5. zabbix案例--监控网站的PV-UV-IP
  6. 比肩“瑞波+以太坊”底层平台,「井通科技」底气从何来?
  7. 阿里云常见问题解答汇总,关于阿里云的疑问你都可以在这里找到答案
  8. 基于龙芯2K1000适配WIFI模块(型号:Intel 8265NGW)
  9. 虚拟机--第一章走进java--(抄书)
  10. Unity-移动端打包记录(持续更新)