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登录与分享相关推荐

  1. android 微信登录与分享集成

    android 微信登录与分享 android微信登录与分享这两个功能是很常用的,尤其是现在微信用户日益剧增,qq虽然很经典但是感觉大多数用来办公 每个写android的小伙伴估计都会写到这个功能,我 ...

  2. android qq第三方登录,Android调用第三方QQ登录代码分享

    本文为大家分享了调用QQ登录的相关代码,希望对大家有帮助,减少项目开发的时间,具体内容如下 1.去QQ开放平台注册帐号(http://open.qq.com/),为应用申请QQ的APP_ID , 并下 ...

  3. 关于Android如何集成QQ登录及分享

    首先去友盟进行下载压缩包 然后使用友盟集成工具 将umeng_integratetool_result里的东西拷贝到工程中 新建一个app继承Application,去清单文件里面注册 在oncrea ...

  4. Android QQ登录,分享,分享图片

    近年来三方导流,方便用户使用App,以及方便App数据分享越来越多的App支持了三方登录以及三方分享网页和图片.在此,整理了一系列三方库的集成方法以及集成中遇到的问题 . 一:引用 1:Maven引用 ...

  5. Android QQ 登录接入详细介绍

    /   今日科技快讯   / 近日,百度地图发布2022春节出行大数据.迁徙大数据显示,2022年春运迁徙规模较去年农历同期有明显上升.春节期间全国人口迁徙规模日均值为去年农历同期的近两倍.春节前的迁 ...

  6. android 第三方登录和分享(5)

    使用share SDK实现第三方授权登录.分享综合(2.x版本) StartActivity: package com.home.testshare; import android.app.Activ ...

  7. android qq登录分析,[原创]对QQ手游授权登录的一点分析

    1.前言 最近无事玩王者,发现某些租号平台可以直接通过自身的APP打开腾讯的游戏进行登录,于是对这一登录过程做了简单的分析 2.QQ打开游戏的简单分析 发现不管是IOS还是Android都可以在QQ里 ...

  8. android qq登录分析,Android第三方登录之QQ登录

    1. 在腾讯开放平台创建应用,申请Appkey qqdenglu.PNG 2. 下载sdk ,导入jar包 3.配置AndroidManifest android:name="com.ten ...

  9. Android微信登录以及分享集成步骤

    准备工作 在应用集成微信登录以及分享之前,我们在微信开放平台必须要个开发者账户 1.注册完之后创建一个移动应用 2.填写对应应用包名以及签名(md5)信息,填写完毕后,会有个审核过程,一般第二天就通过 ...

最新文章

  1. linq to sql初步
  2. 二逼平横树——线段树套平衡树
  3. java session创建_request创建session
  4. python人工智能面试题_AI笔试面试题库-Python题目解析4
  5. 查看Oracle有哪些表或者视图
  6. 2018年下半年《软件评测师》下午试卷及答案
  7. 哥哥被我打哭了的飞鸽传书
  8. paip.提升性能----数据库连接池以及线程池以及对象池
  9. python安装第三方库太慢,很容易失败报错?教你如何提速
  10. 什么是ESAM安全模块
  11. 中国互联网20年简史(1998-2018),告诉你本质是什么、规律是什么
  12. 【上位机教程】CANopen通信下一体化步进电机与台达PLC(AS228T)的应用
  13. pmos管驱动原理图
  14. html5倒计时效果,html5+css3进度条倒计时动画特效代码【推荐】
  15. c8051f020 I/O配置小结
  16. 因子分析(factor analyis)
  17. flex布局---某个子元素独占一行
  18. Python-文件存储
  19. 自动化测试概述/自动化工具
  20. 安卓股票悬浮窗_Android 实现悬浮窗功能

热门文章

  1. Pytorch CPU版本转换为GPU版本
  2. Linux DNS原理简介及基本配置文件
  3. Android studio--Android开发添加外来字体库
  4. 怎么选一款家用万用表
  5. Python实现制作原创图片的方法(文字转图片)
  6. 电商导购CPS,京东联盟如何跟单实现用户和订单绑定
  7. 浙江省口腔医院补牙 sonicfil超声树脂
  8. org.opensaml.common.SAMLException: Response issue time is either too old or with date in the future
  9. 学习3dmax游戏建模一定要美术基础很高吗?入门游戏模型怎么做
  10. android 投影 windows,夏昆冈作品 - 将Android手机投影到Windows 10 PC [Soomal]