当前位置:   article > 正文

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

android new iuilistener

转自:http://blog.csdn.net/u013451048/article/details/52352810


配置项目

上一篇文章已经讲过如何注册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文件

  1. 刚刚导入的jar包里有已经实现好的Activity(就是点击使用QQ登录后弹出的授权Activity),所以需要在清单文件中配置一下
  2. <application>节点下添加两个<activity>节点,内容如下:
  1. <activity
  2. android:name="com.tencent.tauth.AuthActivity"
  3. android:launchMode="singleTask"
  4. android:noHistory="true">
  5. <intent-filter>
  6. <action android:name="android.intent.action.VIEW" />
  7. <category android:name="android.intent.category.DEFAULT" />
  8. <category android:name="android.intent.category.BROWSABLE" />
  9. <data android:scheme="222222" />
  10. </intent-filter>
  11. </activity>
  12. <activity
  13. android:name="com.tencent.connect.common.AssistActivity"
  14. android:configChanges="orientation|keyboardHidden|screenSize"
  15. android:theme="@android:style/Theme.Translucent.NoTitleBar" >
  16. </activity>
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16

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

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

实现JAVA代码

如果你想要使用qq的登录分享功能,你需要下面几个属性
  1. private Tencent mTencent;
  2. private String APP_ID = "222222";
  3. private IUiListener loginListener;
  4. private String SCOPE = "all"
  • 1
  • 2
  • 3
  • 4
  1. 其中,mTencent是必须要用到的一个对象,qq的登录分享功能等大部分都封装在了这个类里边。
  2. APP_ID,是你创建应用时的appid,这个id必须跟你的清单文件里的 data android:scheme="222222"节点的值是一样的。
  3. loginListener,是一个回调接口,在你登录或分享成功后会执行该接口。
  4. SCOPE,应用需要获得哪些API的权限,由“,”分隔。例如:SCOPE =get_user_info,add_t”;所有权限用“all

详细权限见下图:

qq权限列表

然后我们实现一个方法,用来初始化这些属性。
  1. //初始化QQ登录分享的需要的资源
  2. private void initQqLogin(){
  3. mTencent = Tencent.createInstance(APP_ID, this);
  4. //创建QQ登录回调接口
  5. loginListener = new IUiListener() {
  6. @Override
  7. public void onComplete(Object o) {
  8. //登录成功后回调该方法
  9. Toast.makeText(MainActivity.this, "登录成功", Toast.LENGTH_SHORT).show();
  10. }
  11. @Override
  12. public void onError(UiError uiError) {
  13. //登录失败后回调该方法
  14. Toast.makeText(MainActivity.this, "登录失败", Toast.LENGTH_SHORT).show();
  15. Log.e("LoginError:", uiError.toString());
  16. }
  17. @Override
  18. public void onCancel() {
  19. //取消登录后回调该方法
  20. Toast.makeText(MainActivity.this, "取消登录", Toast.LENGTH_SHORT).show();
  21. }
  22. };
  23. }
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  1. 这么详细的注释就不用解释了吧。
  2. 然后我们还需要重写Activity中的onActivityResult方法。因为这个登录功能会打开一个Activity,而且要返回登录是否成功的结果,所以要重写该方法。
  1. @Override
  2. protected void onActivityResult(int requestCode, int resultCode, Intent data) {
  3. // 官方文档上面的是错误的
  4. // if(requestCode == Constants.REQUEST_API) {
  5. // if(resultCode == Constants.RESULT_LOGIN) {
  6. // mTencent.handleLoginData(data, loginListener);
  7. // }
  8. // resultCode 是log出来的,官方文档里给的那个属性是没有的
  9. if (requestCode == Constants.REQUEST_LOGIN) {
  10. if (resultCode == -1) {
  11. Tencent.onActivityResultData(requestCode, resultCode, data, loginListener);
  12. Tencent.handleResultData(data, loginListener);
  13. }
  14. }
  15. }
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
最后写一个button实现一个监听调用一下
  1. public void qqLogin(View view) {
  2. initQqLogin();
  3. mTencent.login(this, SCOPE, loginListener);
  4. }
  • 1
  • 2
  • 3
  • 4
好了,到此,你的登录功能就已经实现了,运行一下试试吧。

获取用户信息

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

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

我们需要在登录成功后,将返回的openId记录下来。改写后的代码如下
  1. loginListener = new IUiListener() {
  2. @Override
  3. public void onComplete(Object o) {
  4. //登录成功后调用的方法
  5. JSONObject jo = (JSONObject) o;
  6. Toast.makeText(NewsMainActivity.this, "登录成功", Toast.LENGTH_SHORT).show();
  7. Log.e("COMPLETE:", jo.toString());
  8. String openID;
  9. try {
  10. openID = jo.getString("openid");
  11. String accessToken = jo.getString("access_token");
  12. String expires = jo.getString("expires_in");
  13. mTencent.setOpenId(openID);
  14. mTencent.setAccessToken(accessToken, expires);
  15. } catch (JSONException e) {
  16. e.printStackTrace();
  17. }
  18. }
  19. @Override
  20. public void onError(UiError uiError) {
  21. //登录失败后调用的方法
  22. Toast.makeText(NewsMainActivity.this, "登录成功", Toast.LENGTH_SHORT).show();
  23. }
  24. @Override
  25. public void onCancel() {
  26. //取消登录后调用的方法
  27. }
  28. };
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
有兴趣的话可以log一下返回的json数据。

2. 添加userInfoiuiListener回调接口

与登录功能一样,要获取用户信息依然需要实现一个回调函数,我们在Activity中添加一个属性
private IUiListener userInfoListener;
 
 
  • 1
然后在initQqLogin()方法中将这个回调接口实现出来
  1. userInfoListener = new IUiListener() {
  2. @Override
  3. public void onComplete(Object o) {
  4. if(o == null){
  5. return;
  6. }
  7. try {
  8. JSONObject jo = (JSONObject) o;
  9. Log.e("JO:",jo.toString());
  10. int ret = jo.getInt("ret");
  11. String nickName = jo.getString("nickname");
  12. String gender = jo.getString("gender");
  13. Toast.makeText(MainActivity.this, "你好," + nickName,Toast.LENGTH_LONG).show();
  14. } catch (Exception e) {
  15. }
  16. }
  17. @Override
  18. public void onError(UiError uiError) {
  19. }
  20. @Override
  21. public void onCancel() {
  22. }
  23. };
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
这里说明一下返回的json数据。有兴趣的可以log一下。大致包含,昵称,性别,不同尺寸的qq头像url,不同尺寸的qq空间头像url。

用户信息

3.改写onActivityResult方法

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

分享功能

实现分享功能也很简单,与获取用户信息一样,需要一个回调接口,我们在initQqLogin()方法中将这个回调接口实现出来
  1. //qq分享的回调接口
  2. shareListener = new IUiListener() {
  3. @Override
  4. public void onComplete(Object o) {
  5. //分享成功后回调
  6. Toast.makeText(MainActivity.this, "分享成功!", Toast.LENGTH_SHORT).show();
  7. }
  8. @Override
  9. public void onError(UiError uiError) {
  10. //分享失败后回调
  11. }
  12. @Override
  13. public void onCancel() {
  14. //取消分享后回调
  15. }
  16. };
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
然后写一个按钮,写一个监听
  1. public void qqShare(View view) {
  2. Bundle params = new Bundle();
  3. params.putInt(QQShare.SHARE_TO_QQ_KEY_TYPE, QQShare.SHARE_TO_QQ_TYPE_DEFAULT);
  4. params.putString(QQShare.SHARE_TO_QQ_TITLE, "标题");
  5. params.putString(QQShare.SHARE_TO_QQ_SUMMARY,"摘要");
  6. params.putString(QQShare.SHARE_TO_QQ_TARGET_URL,"http://blog.csdn.net/u013451048");
  7. params.putString(QQShare.SHARE_TO_QQ_IMAGE_URL,"http://avatar.csdn.net/C/3/D/1_u013451048.jpg");
  8. params.putString(QQShare.SHARE_TO_QQ_APP_NAME, "CSDN");
  9. mTencent.shareToQQ(this, params, shareListener);
  10. }
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
从上到下依次是设置分享的类型,是图文,纯图片,纯文本等,分享的标题,摘要,分享的url链接,分享的图片,分享的来源

Demo在shareqqdemo目录下


问题

appid问题

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


声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/IT小白/article/detail/292830?site
推荐阅读
相关标签
  

闽ICP备14008679号