关闭

android 实现QQ第三方登录,分享功能

标签: androidqq第三方登录获取用户信息demo
7816人阅读 评论(8) 收藏 举报
分类:

转载请注明出处


配置项目

上一篇文章已经讲过如何注册QQ互联的开发者了。如果你还没有注册成为开发者请移步至

QQ互联开发者注册

1. 下载SDK。

SDK下载

点击SDK for 移动应用接入

SDK列表

直接点击Android_SDK_V3.1.0 就可以下载

2. 导入jar包

下载完成后是个压缩包,解压后的结果就是下面这个样子,我下载的版本是3.1.0,如果你下载的版本不是这个版本或许有所不同。

解压

将jar文件夹下的两个jar包导入到android studio中,

导入jar包

然后右击jar包,在菜单的下面会有个"Add as Library..."点击它,将这两个jar包加入到lib库。

3. 配置AndroidManifest.xml文件

    刚刚导入的jar包里有已经实现好的Activity(就是点击使用QQ登录后弹出的授权Activity),所以需要在清单文件中配置一下

    在<application>节点下添加两个<activity>节点,内容如下:
<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" />
        <data android:scheme="222222" />
    </intent-filter>
</activity>
<activity          
    android:name="com.tencent.connect.common.AssistActivity"         
    android:configChanges="orientation|keyboardHidden|screenSize"           
    android:theme="@android:style/Theme.Translucent.NoTitleBar" >
</activity>

注意!其中的 data android:scheme=”222222” 你需要将这个值替换为你自己创建的应用的appid。222222是腾讯给的测试appid,仅能够测试使用。

当然了,使用qq登录少不了权限
<uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
好了,到此,清单文件基本上配置完成了。下面开始写java代码

实现JAVA代码

如果你想要使用qq的登录分享功能,你需要下面几个属性
    private Tencent mTencent;
    private String APP_ID = "222222";
    private IUiListener loginListener;
    private String SCOPE = "all"
    其中,mTencent是必须要用到的一个对象,qq的登录分享功能等大部分都封装在了这个类里边。

    APP_ID,是你创建应用时的appid,这个id必须跟你的清单文件里的 data android:scheme="222222"节点的值是一样的。

    loginListener,是一个回调接口,在你登录或分享成功后会执行该接口。

    SCOPE,应用需要获得哪些API的权限,由“,”分隔。例如:SCOPE = “get_user_info,add_t”;所有权限用“all”

详细权限见下图:

qq权限列表

然后我们实现一个方法,用来初始化这些属性。
 //初始化QQ登录分享的需要的资源
    private void initQqLogin(){
        mTencent =  Tencent.createInstance(APP_ID, this);
        //创建QQ登录回调接口
        loginListener = new IUiListener() {
            @Override
            public void onComplete(Object o) {
                //登录成功后回调该方法
                Toast.makeText(MainActivity.this, "登录成功", Toast.LENGTH_SHORT).show();
            }

            @Override
            public void onError(UiError uiError) {
                //登录失败后回调该方法
                Toast.makeText(MainActivity.this, "登录失败", Toast.LENGTH_SHORT).show();
                Log.e("LoginError:", uiError.toString());
            }

            @Override
            public void onCancel() {
                //取消登录后回调该方法
                Toast.makeText(MainActivity.this, "取消登录", Toast.LENGTH_SHORT).show();
            }
        };
    }
这么详细的注释就不用解释了吧。

然后我们还需要重写Activity中的onActivityResult方法。因为这个登录功能会打开一个Activity,而且要返回登录是否成功的结果,所以要重写该方法。
@Override
    protected void onActivityResult(int requestCode, int resultCode, Intent data) {
//  官方文档上面的是错误的
//        if(requestCode == Constants.REQUEST_API) {
//            if(resultCode == Constants.RESULT_LOGIN) {
//                mTencent.handleLoginData(data, loginListener);
//            }
//  resultCode 是log出来的,官方文档里给的那个属性是没有的

        if (requestCode == Constants.REQUEST_LOGIN) {
            if (resultCode == -1) {
                Tencent.onActivityResultData(requestCode, resultCode, data, loginListener);
                Tencent.handleResultData(data, loginListener);
            }
        }
    }
最后写一个button实现一个监听调用一下
 public void qqLogin(View view) {
        initQqLogin();
        mTencent.login(this, SCOPE, loginListener);
    }
好了,到此,你的登录功能就已经实现了,运行一下试试吧。

获取用户信息

当然了,我们用QQ登录不仅仅是判断下登录成功与否,还需要获得用户信息。

1. 改写loginListener的登录成功的方法。

我们需要在登录成功后,将返回的openId记录下来。改写后的代码如下
loginListener = new IUiListener() {
            @Override
            public void onComplete(Object o) {
                //登录成功后调用的方法
                JSONObject jo = (JSONObject) o;
                Toast.makeText(NewsMainActivity.this, "登录成功", Toast.LENGTH_SHORT).show();
                Log.e("COMPLETE:", jo.toString());
                String openID;
                try {
                    openID = jo.getString("openid");
                    String accessToken = jo.getString("access_token");
                    String expires = jo.getString("expires_in");
                    mTencent.setOpenId(openID);
                    mTencent.setAccessToken(accessToken, expires);
                } catch (JSONException e) {
                    e.printStackTrace();
                }
            }
            @Override
            public void onError(UiError uiError) {
                //登录失败后调用的方法
                Toast.makeText(NewsMainActivity.this, "登录成功", Toast.LENGTH_SHORT).show();
            }
            @Override
            public void onCancel() {
                //取消登录后调用的方法
            }
        };
有兴趣的话可以log一下返回的json数据。

2. 添加userInfoiuiListener回调接口

与登录功能一样,要获取用户信息依然需要实现一个回调函数,我们在Activity中添加一个属性
private IUiListener userInfoListener;
然后在initQqLogin()方法中将这个回调接口实现出来
userInfoListener = new IUiListener() {
            @Override
            public void onComplete(Object o) {
                if(o == null){
                    return;
                }
                try {
                    JSONObject jo = (JSONObject) o;
                    Log.e("JO:",jo.toString());
                    int ret = jo.getInt("ret");
                    String nickName = jo.getString("nickname");
                    String gender = jo.getString("gender");
                    Toast.makeText(MainActivity.this, "你好," + nickName,Toast.LENGTH_LONG).show();

                } catch (Exception e) {
                }
            }
            @Override
            public void onError(UiError uiError) {
            }
            @Override
            public void onCancel() {
            }
        };
这里说明一下返回的json数据。有兴趣的可以log一下。大致包含,昵称,性别,不同尺寸的qq头像url,不同尺寸的qq空间头像url。

用户信息

3.改写onActivityResult方法

if (requestCode == Constants.REQUEST_LOGIN) {
            if (resultCode == -1) {
                Tencent.onActivityResultData(requestCode, resultCode, data, loginListener);
                Tencent.handleResultData(data, loginListener);
                UserInfo info = new UserInfo(this, mTencent.getQQToken());
        info.getUserInfo(userInfoListener);
            }
        }
好了,到此,你就可以拿到qq用户的信息了

分享功能

实现分享功能也很简单,与获取用户信息一样,需要一个回调接口,我们在initQqLogin()方法中将这个回调接口实现出来
 //qq分享的回调接口
        shareListener = new IUiListener() {
            @Override
            public void onComplete(Object o) {
                //分享成功后回调
                Toast.makeText(MainActivity.this, "分享成功!", Toast.LENGTH_SHORT).show();
            }

            @Override
            public void onError(UiError uiError) {
                //分享失败后回调
            }

            @Override
            public void onCancel() {
                //取消分享后回调
            }
        };
然后写一个按钮,写一个监听
 public void qqShare(View view) {
        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(this, params, shareListener);
    }
从上到下依次是设置分享的类型,是图文,纯图片,纯文本等,分享的标题,摘要,分享的url链接,分享的图片,分享的来源

Demo在shareqqdemo目录下


问题

appid问题

如果你还不能运行,且提示的错误是appid的问题的话,那么在清单文件中修改scheme节点为 data android:scheme="tencent222222" 。同样将222222替换为你自己的appid,保留tencent字段。
10
0
查看评论

Android实现QQ分享及注意事项

一、获取APPID和帮助文档可以参看新手引导和接入说明:http://wiki.open.qq.com/wiki/移动应用接入wiki索引分享相关文档说明:http://wiki.open.qq.com/index.php?title=Android_API调用说明&=45038#1.13_...
  • lxq_xsyu
  • lxq_xsyu
  • 2014-12-18 23:05
  • 4932

Android之第三方平台实现QQ登录和QQ分享

目前大多数APP都包含了第三方平台的登录,特别是QQ和微信,这篇博客主要讲的是如何实现QQ第三方平台实现QQ登录和分享功能,功能包含: 登录授权登录获取用户信息(昵称,头像,地址等)QQ分享给好友QQ分享到空间 先看看效果图:       ...
  • DickyQie
  • DickyQie
  • 2017-03-27 16:23
  • 760

Android开发QQ登陆、分享、空间分享及回调处理 不回调问题的处理

首先是看  qq互联里面的文档  按文档操作:qqsdk移动应用接入流程  按照这个流程一步一步来就是了。基本上没的错误的。但还是有些很坑的地方。这里列举一些。 接下来 一、首先是qq登陆。 下载sdk集成到项目  并在androidmanifest....
  • meiwan123
  • meiwan123
  • 2017-02-08 15:17
  • 799

使用QQ互联Android SDK 实现本地图片的QQ定向分享

在较新一版的QQ互联Android SDK 中,提供了一个定向分享的办法:void com.tencent.tauth.Tencent.shareToQQ(Activity arg0, Bundle arg1, IUiListener arg2)该方法可以将消息分享给指定的QQ好友。如下所示:然而,...
  • buptlzx
  • buptlzx
  • 2013-08-05 15:12
  • 16014

Android使用系统方法实现分享到QQ和微信!

作者:燕潇洒 导读:在过需求时,发现有分享到qq和微信的功能,百度之后,发现android自带分享到qq和微信的功能! public class AndroidShare { /** * 上下文 */ private Context context; /...
  • yanxiaosa
  • yanxiaosa
  • 2017-05-23 18:16
  • 2366

Android 微信分享与QQ分享功能

微信分享与QQ分享功能现在都挺常见的,可以根据一些第三方社会化分功能快速实现,不过多多少少都不怎么纯净,最好都是自己看官方文档来实现就最好了~一、微信分享微信分享功能需要先在微信开放平台注册应用并获取APP ID,就可以获得微信提供的基本接口了APP ID是对应唯一的应用包名和签名的,所以即使你的应...
  • new_one_object
  • new_one_object
  • 2016-10-04 11:43
  • 5348

android 实现QQ好友分享和QQ空间分享

下载官方的数据包 http://wiki.open.qq.com/wiki/mobile/SDK%E4%B8%8B%E8%BD%BD  下载
  • syz8742874
  • syz8742874
  • 2014-09-14 17:12
  • 49346

android手机qq分享demo

  • 2014-06-04 09:45
  • 2.20MB
  • 下载

QQ空间分享demo

  • 2013-04-27 14:18
  • 2.26MB
  • 下载

官方QQ,QZone分享,第三方登录Demo,临时会话Demo

  • 2016-04-08 17:50
  • 1.74MB
  • 下载
    个人资料
    • 访问:54615次
    • 积分:1101
    • 等级:
    • 排名:千里之外
    • 原创:50篇
    • 转载:2篇
    • 译文:1篇
    • 评论:29条
    文章分类
    最新评论