android QQ登录与分享
android QQ登录与分享是我们一个很常见的功能,除了微信登录、QQ登录、还有微博登录,外加上分享,今天就分享一下android的QQ分享与登录,我这里H5开发的和webview配合使用场景,不过就算是原生的,思路也差不多。
一、腾讯开放平台注册应用获取appId,至于怎么注册很简单,这里就不叙述了。
二、下载sdk,下载链接是http://wiki.open.qq.com/wiki/mobile/SDK%E4%B8%8B%E8%BD%BD,下载最新版本,目前好像已经到3.3.1了
三、将下载下来的包里面的open_sdk_r5990_lite.jar包放入工程的libs目录下,如图
三、build.gradle里面加入
// qq登录
implementation files('libs/open_sdk_r5990_lite.jar')
四、AndroidMainfest.xml里面加入权限和activity
1、权限
<uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
2、加入activity
<!--qq登录--><activity android: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" /><!-- 这地方需要用你在开放平台申请的appid:tencent+appid --><data android:scheme="tencent1106320813" /></intent-filter></activity><activity android:name="com.tencent.connect.common.AssistActivity"android:configChanges="orientation|keyboardHidden"android:screenOrientation="behind"android:theme="@android:style/Theme.Translucent.NoTitleBar" />
五、我这里是提供接口给H5端调用,写在了一个JavascriptUtils工具类里面
//QQ登录 private static final String APP_ID = "1105602574";//官方获取的APPID private Tencent mTencent; public static BaseUiListener mIUiListener; public static final int QQ_LOGIN = 6008;
/** * QQ登录 */ @JavascriptInterface public void qqLogin() {//传入参数APPID和全局Context上下文 if (mTencent == null) {mTencent = Tencent.createInstance(APP_ID,mContext); }mIUiListener = new BaseUiListener(mTencent, mActivity, mContext); //all表示获取所有权限 mTencent.login(mActivity,"all", mIUiListener); }/** * 分享到QQ好友 * */ @JavascriptInterface public void qqShareFriends() {if (mTencent == null) {mTencent = Tencent.createInstance(APP_ID,mContext); }Bundle params = new Bundle(); params.putInt(QQShare.SHARE_TO_QQ_KEY_TYPE, QQShare.SHARE_TO_QQ_TYPE_DEFAULT); params.putString(QQShare.SHARE_TO_QQ_TITLE, "标题"); params.putString(QQShare.SHARE_TO_QQ_SUMMARY,"摘要"); params.putString(QQShare.SHARE_TO_QQ_TARGET_URL,"http://blog.csdn.net/u013451048"); params.putString(QQShare.SHARE_TO_QQ_IMAGE_URL,"http://avatar.csdn.net/C/3/D/1_u013451048.jpg"); params.putString(QQShare.SHARE_TO_QQ_APP_NAME, "CSDN"); mTencent.shareToQQ(mActivity, params, new ShareListener(mActivity)); }/** * 分享到QQ空间 * */ @JavascriptInterface public void qqShareQzone() {Bundle params = new Bundle(); if (mTencent == null) {mTencent = Tencent.createInstance(APP_ID,mContext); }params.putInt(QQShare.SHARE_TO_QQ_EXT_INT, QQShare.SHARE_TO_QQ_FLAG_QZONE_AUTO_OPEN); params.putString(QQShare.SHARE_TO_QQ_TITLE, "标题"); params.putString(QQShare.SHARE_TO_QQ_SUMMARY,"摘要"); params.putString(QQShare.SHARE_TO_QQ_TARGET_URL,"https://mp.csdn.net/postedit/79887607"); params.putString(QQShare.SHARE_TO_QQ_IMAGE_URL,"http://avatar.csdn.net/C/3/D/1_u013451048.jpg"); params.putString(QQShare.SHARE_TO_QQ_APP_NAME, "CSDN"); mTencent.shareToQQ(mActivity, params, new ShareListener(mActivity)); }
六、在唤起QQ登录之后,需要一个回调类BaseUiListener来返回用户信息和检测用户是否登录成功
package com.iwiteks.PalmarTourism.util; import android.app.Activity; import android.content.Context; import android.os.Message; import android.util.Log; import android.widget.Toast; import com.google.gson.Gson; import com.tencent.connect.UserInfo; import com.tencent.connect.auth.QQToken; import com.tencent.tauth.IUiListener; import com.tencent.tauth.Tencent; import com.tencent.tauth.UiError; import org.json.JSONException; import org.json.JSONObject; import java.util.HashMap; /** * QQ登录监听类 * Created by zhaoyi on 2018/3/20. */ public class BaseUiListener implements IUiListener {private static final String TAG = "BaseUiListener"; private Tencent mTencent; private UserInfo mUserInfo; private Context mContext; private Activity mActivity; public BaseUiListener (Tencent mTencent, Activity mActivity, Context mContext) {this.mContext = mContext; this.mActivity = mActivity; this.mTencent = mTencent; }@Override public void onComplete(Object response) {Toast.makeText(mActivity, "授权成功", Toast.LENGTH_SHORT).show(); JSONObject obj = (JSONObject) response; try {String openID = obj.getString("openid"); String accessToken = obj.getString("access_token"); String expires = obj.getString("expires_in"); mTencent.setOpenId(openID); mTencent.setAccessToken(accessToken,expires); QQToken qqToken = mTencent.getQQToken(); mUserInfo = new UserInfo(mContext,qqToken); mUserInfo.getUserInfo(new IUiListener() {@Override public void onComplete(Object response) {Log.e(TAG,"登录成功"+ response.toString()); Message message = new Message(); message.what = JavaScriptUtils.QQ_LOGIN; Gson gson = new Gson(); HashMap<String,String> resultMap = gson.fromJson(response.toString(), HashMap.class); resultMap.put("openid",openID); message.obj = resultMap; JavaScriptUtils.mHandler.sendMessage(message); }@Override public void onError(UiError uiError) {Log.e(TAG,"登录失败"+ uiError.toString()); }@Override public void onCancel() {Log.e(TAG,"登录取消"); }}); } catch (JSONException e) {e.printStackTrace(); }}@Override public void onError(UiError uiError) {Toast.makeText(mActivity, "授权失败", Toast.LENGTH_SHORT).show(); }@Override public void onCancel() {Toast.makeText(mActivity, "授权取消", Toast.LENGTH_SHORT).show(); }}
上面用的到handle会传递到JavascriptUtils工具类里面进行处理,如下
// 消息接受handle,android调用js public static Handler mHandler = new Handler() {public void handleMessage(Message msg) {String method = ""; if (msg.what == QQ_LOGIN) {//语音合成播放完成 HashMap<String,String> result = (HashMap<String, String>) msg.obj; Gson gson = new Gson(); method = "javascript:_Native_QqLogin('"+gson.toJson(result)+"')"; }mWebView.evaluateJavascript(method, new ValueCallback<String>() {@Override public void onReceiveValue(String value) {//此处为 js 返回的结果 }}); } };
这里是android调用js方法传递数据给H5端了
七、在MainActivity的重写方法onActivityResult()里面加入如下代码,不然回调不了是否登录成功,取消等操作
/** * QQ分享监听 */ if (requestCode == 10103) {ShareListener myListener = new ShareListener(MainActivity.this); Tencent.onActivityResultData(requestCode,resultCode,data,myListener); }/** * QQ登录监听 */ if(requestCode == Constants.REQUEST_LOGIN){Tencent.onActivityResultData(requestCode,resultCode,data,JavaScriptUtils.mIUiListener); }
到此,QQ登录与分享集成完成,我的QQ分享参数是死的,可以动态换成参数进行动态传递
android QQ登录与分享相关推荐
- android 微信登录与分享集成
android 微信登录与分享 android微信登录与分享这两个功能是很常用的,尤其是现在微信用户日益剧增,qq虽然很经典但是感觉大多数用来办公 每个写android的小伙伴估计都会写到这个功能,我 ...
- android qq第三方登录,Android调用第三方QQ登录代码分享
本文为大家分享了调用QQ登录的相关代码,希望对大家有帮助,减少项目开发的时间,具体内容如下 1.去QQ开放平台注册帐号(http://open.qq.com/),为应用申请QQ的APP_ID , 并下 ...
- 关于Android如何集成QQ登录及分享
首先去友盟进行下载压缩包 然后使用友盟集成工具 将umeng_integratetool_result里的东西拷贝到工程中 新建一个app继承Application,去清单文件里面注册 在oncrea ...
- Android QQ登录,分享,分享图片
近年来三方导流,方便用户使用App,以及方便App数据分享越来越多的App支持了三方登录以及三方分享网页和图片.在此,整理了一系列三方库的集成方法以及集成中遇到的问题 . 一:引用 1:Maven引用 ...
- Android QQ 登录接入详细介绍
/ 今日科技快讯 / 近日,百度地图发布2022春节出行大数据.迁徙大数据显示,2022年春运迁徙规模较去年农历同期有明显上升.春节期间全国人口迁徙规模日均值为去年农历同期的近两倍.春节前的迁 ...
- android 第三方登录和分享(5)
使用share SDK实现第三方授权登录.分享综合(2.x版本) StartActivity: package com.home.testshare; import android.app.Activ ...
- android qq登录分析,[原创]对QQ手游授权登录的一点分析
1.前言 最近无事玩王者,发现某些租号平台可以直接通过自身的APP打开腾讯的游戏进行登录,于是对这一登录过程做了简单的分析 2.QQ打开游戏的简单分析 发现不管是IOS还是Android都可以在QQ里 ...
- android qq登录分析,Android第三方登录之QQ登录
1. 在腾讯开放平台创建应用,申请Appkey qqdenglu.PNG 2. 下载sdk ,导入jar包 3.配置AndroidManifest android:name="com.ten ...
- Android微信登录以及分享集成步骤
准备工作 在应用集成微信登录以及分享之前,我们在微信开放平台必须要个开发者账户 1.注册完之后创建一个移动应用 2.填写对应应用包名以及签名(md5)信息,填写完毕后,会有个审核过程,一般第二天就通过 ...
最新文章
- linq to sql初步
- 二逼平横树——线段树套平衡树
- java session创建_request创建session
- python人工智能面试题_AI笔试面试题库-Python题目解析4
- 查看Oracle有哪些表或者视图
- 2018年下半年《软件评测师》下午试卷及答案
- 哥哥被我打哭了的飞鸽传书
- paip.提升性能----数据库连接池以及线程池以及对象池
- python安装第三方库太慢,很容易失败报错?教你如何提速
- 什么是ESAM安全模块
- 中国互联网20年简史(1998-2018),告诉你本质是什么、规律是什么
- 【上位机教程】CANopen通信下一体化步进电机与台达PLC(AS228T)的应用
- pmos管驱动原理图
- html5倒计时效果,html5+css3进度条倒计时动画特效代码【推荐】
- c8051f020 I/O配置小结
- 因子分析(factor analyis)
- flex布局---某个子元素独占一行
- Python-文件存储
- 自动化测试概述/自动化工具
- 安卓股票悬浮窗_Android 实现悬浮窗功能
热门文章
- Pytorch CPU版本转换为GPU版本
- Linux DNS原理简介及基本配置文件
- Android studio--Android开发添加外来字体库
- 怎么选一款家用万用表
- Python实现制作原创图片的方法(文字转图片)
- 电商导购CPS,京东联盟如何跟单实现用户和订单绑定
- 浙江省口腔医院补牙 sonicfil超声树脂
- org.opensaml.common.SAMLException: Response issue time is either too old or with date in the future
- 学习3dmax游戏建模一定要美术基础很高吗?入门游戏模型怎么做
- android 投影 windows,夏昆冈作品 - 将Android手机投影到Windows 10 PC [Soomal]