QQ三方登录
2016-05-15 11:04
204 查看
转载请说明出处 /article/7749658.html
今天与大家分享的是QQ三方登录,第一步我们需要在友盟注册友盟账号,然后申请我们的应用,会得到一个Key
这个AppKey是友盟区分每个应用所用的,也是唯一的。我们可以先下载sdk的demo,因为里面已经包含了我们所需要的大部分内容,这里我集成的是android 5.0版本的文档,
我们在我们的项目中添加一些权限,和导入jar包,
这里我们要集成什么就选择什么,如果我们集成QQ就选择QQ,集成新浪微博就选择新浪微博。
把QQ这几个Jar包导入项目里即可。
注意
1:QQ和QQ Zone SSO(免登录)引用的jar文件相同。当需要同时支持QQ和QQ Zone的时候,只需添加一次SocialSDK_QQZone_1.jar,SocialSDK_QQZone_2.jar,SocialSDK_QQZone_3.jar文件即可.
2:由于我们对微信的包名做了修改(libammsdk.jar SocialSDK_WeiXin.jar),如出现”Unable to execute dex: Multiple dex files define “问题,请删除libammsdk.jar或者SocialSDK_WeiXin.jar中的一个即可解决问题
然后在Activity节点下添加友盟AppKey,这里需要写成我们自己
接下来我们大家想一想,我们既然要用QQ登录,为什么要在友盟继承呢?QQ跟友盟又是如何关联起来的呢?我们需要通过腾讯开放平台申请一个,www.open.qq.com去申请一个腾讯开放平台的账号,登陆后
点击移动应用,点击创建应用
点击移动应用创建
这里输入我们友盟的APPkey信息即可,创建完成后是这个样
然后我们在返回友盟,点击我们的应用,选择组件,选择社会话分享,设置,这里我们要绑定我们腾讯开放平台申请的APP ID 和 APP KEY
这样我们就在有梦平台与QQ开放平台进行了绑定,然后我们在配置文件里配置一下申请的QQ的Key,在activity节点下
导入所需要的jar包!
如果我们运行的时候出现这个错误在eclipse里面
我们需要把libs里面的httpmime-4.1.3.jar包删除,然后新建个文件夹,把httpmime-4.1.3.jar包拖进去,然后点击新创建的这个文件夹libs1右键,如下图
然后可能大家还会有一些问题,我们需要如下图,把友盟的jar移动到最上面即可
在AS里面不会有这些问题,只有在eclipse里有时候会出现类似的问题。
然后点击运行即可,运行效果如下
需要注意的是,如果我们申请的是debug版本,比如我们腾讯开放平台用的是另一个QQ申请的,前提条件是这个QQ里面你们互相都是好友才可以登录,如果你把这个pak发给你朋友或者同事,他们的QQ是登录不上的,必须把你朋友或者你同事的QQ添加到你申请腾讯平台的QQ,必须互相是好友,才可以登录,如下图
想让谁登录就把谁添加到应用调试者的QQ号
如果想让其他人都可以登录,必须是打包签名后的release版本,这样其他人就可以登录了。还有一种比较特别的情况是,如果你们公司也有IOS开发也是用QQ,他们返回的字段没有一个相同的APPID,如果你们三方登录用一个账号登录,比如我QQ返回的id是123,ios返回的是456,导致了不统一,用户分别用一个QQ号登录APP显示的数据居然不同?,这个时候需要你们跟腾讯开放平台的服务人员沟通,让他们把IOS改成和android端一样的id就行,或者把android端改成和IOS一样的id即可,这样就可以用同一个QQ(既android端,和IOS端登录,均显示一样的内容了)。
如果大家碰到什么问题可以给我留言,看到第一时间为大家解答
今天与大家分享的是QQ三方登录,第一步我们需要在友盟注册友盟账号,然后申请我们的应用,会得到一个Key
这个AppKey是友盟区分每个应用所用的,也是唯一的。我们可以先下载sdk的demo,因为里面已经包含了我们所需要的大部分内容,这里我集成的是android 5.0版本的文档,
我们在我们的项目中添加一些权限,和导入jar包,
这里我们要集成什么就选择什么,如果我们集成QQ就选择QQ,集成新浪微博就选择新浪微博。
把QQ这几个Jar包导入项目里即可。
注意
1:QQ和QQ Zone SSO(免登录)引用的jar文件相同。当需要同时支持QQ和QQ Zone的时候,只需添加一次SocialSDK_QQZone_1.jar,SocialSDK_QQZone_2.jar,SocialSDK_QQZone_3.jar文件即可.
2:由于我们对微信的包名做了修改(libammsdk.jar SocialSDK_WeiXin.jar),如出现”Unable to execute dex: Multiple dex files define “问题,请删除libammsdk.jar或者SocialSDK_WeiXin.jar中的一个即可解决问题
<uses-permission android:name="android.permission.INTERNET" /> <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" /> <uses-permission android:name="android.permission.READ_SMS" /> <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" /> <uses-permission android:name="android.permission.ACCESS_WIFI_STATE" /> <uses-permission android:name="android.permission.READ_PHONE_STATE" /> <uses-permission android:name="android.permission.READ_LOGS" /> <uses-permission android:name="android.permission.CALL_PHONE" /> <uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" /> <uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" /> <!-- renren sso Permission for Unit Test --> <!-- QQ、QQ空间所需权限 --> <uses-permission android:name="android.permission.GET_TASKS" /> <uses-permission android:name="android.permission.SET_DEBUG_APP" /> <uses-permission android:name="android.permission.SYSTEM_ALERT_WINDOW" /> <uses-permission android:name="android.permission.GET_ACCOUNTS" /> <uses-permission android:name="android.permission.USE_CREDENTIALS" /> <uses-permission android:name="android.permission.MANAGE_ACCOUNTS" />
然后在Activity节点下添加友盟AppKey,这里需要写成我们自己
<!-- 友盟AppKey, 需要替换成你自己的 --> <meta-data android:name="UMENG_APPKEY" android:value="xxxxxxxx" > </meta-data>
接下来我们大家想一想,我们既然要用QQ登录,为什么要在友盟继承呢?QQ跟友盟又是如何关联起来的呢?我们需要通过腾讯开放平台申请一个,www.open.qq.com去申请一个腾讯开放平台的账号,登陆后
点击移动应用,点击创建应用
点击移动应用创建
这里输入我们友盟的APPkey信息即可,创建完成后是这个样
然后我们在返回友盟,点击我们的应用,选择组件,选择社会话分享,设置,这里我们要绑定我们腾讯开放平台申请的APP ID 和 APP KEY
这样我们就在有梦平台与QQ开放平台进行了绑定,然后我们在配置文件里配置一下申请的QQ的Key,在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" /> <!--这里xxxx替换成QQ的APPID,腾讯开放平台申请的 --> <data android:scheme="tencent11xxxxxx" /> </intent-filter> </activity> <activity android:name="com.tencent.connect.common.AssistActivity" android:screenOrientation="portrait" android:theme="@android:style/Theme.Translucent.NoTitleBar" > </activity>
导入所需要的jar包!
package com.example.qdemo; import java.util.Map; import android.app.Activity; import android.os.Bundle; import android.text.TextUtils; import android.view.View; import android.view.View.OnClickListener; import android.widget.Toast; import com.umeng.socialize.bean.SHARE_MEDIA; import com.umeng.socialize.bean.SocializeEntity; import com.umeng.socialize.bean.StatusCode; import com.umeng.socialize.controller.UMServiceFactory; import com.umeng.socialize.controller.UMSocialService; import com.umeng.socialize.controller.listener.SocializeListeners.SocializeClientListener; import com.umeng.socialize.controller.listener.SocializeListeners.UMAuthListener; import com.umeng.socialize.controller.listener.SocializeListeners.UMDataListener; import com.umeng.socialize.exception.SocializeException; import com.umeng.socialize.sso.QZoneSsoHandler; import com.umeng.socialize.sso.UMQQSsoHandler; public class MainActivity extends Activity { // 整个平台的Controller, 负责管理整个SDK的配置、操作等处理 private UMSocialService mController = UMServiceFactory .getUMSocialService("com.umeng.login"); @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); addQZoneQQPlatform(); findViewById(R.id.btnQQ).setOnClickListener(new OnClickListener() { @Override public void onClick(View v) { login(SHARE_MEDIA.QQ); } }); } /** * 注销本次登录</br> */ private void logout(final SHARE_MEDIA platform) { mController.deleteOauth(MainActivity.this, platform, new SocializeClientListener() { @Override public void onStart() { } @Override public void onComplete(int status, SocializeEntity entity) { String showText = "解除" + platform.toString() + "平台授权成功"; if (status != StatusCode.ST_CODE_SUCCESSED) { showText = "解除" + platform.toString() + "平台授权失败[" + status + "]"; } Toast.makeText(MainActivity.this, showText, Toast.LENGTH_SHORT).show(); } }); } /** * 授权。如果授权成功,则获取用户信息</br> */ private void login(final SHARE_MEDIA platform) { mController.doOauthVerify(MainActivity.this, platform, new UMAuthListener() { @Override public void onStart(SHARE_MEDIA platform) { Toast.makeText(MainActivity.this, "start", 0).show(); } @Override public void onError(SocializeException e, SHARE_MEDIA platform) { } @Override public void onComplete(Bundle value, SHARE_MEDIA platform) { Toast.makeText(MainActivity.this, "onComplete", 0).show(); String uid = value.getString("uid"); if (!TextUtils.isEmpty(uid)) { getUserInfo(platform); } else { Toast.makeText(MainActivity.this, "授权失败...", Toast.LENGTH_SHORT).show(); } } @Override public void onCancel(SHARE_MEDIA platform) { } }); } /** * 获取授权平台的用户信息</br> */ private void getUserInfo(SHARE_MEDIA platform) { mController.getPlatformInfo(MainActivity.this, platform, new UMDataListener() { @Override public void onStart() { } @Override public void onComplete(int status, Map<String, Object> info) { // String showText = ""; // if (status == StatusCode.ST_CODE_SUCCESSED) { // showText = "用户名:" + info.get("screen_name").toString(); // Log.d("#########", "##########" + info.toString()); // } else { // showText = "获取用户信息失败"; // } if (info != null) { Toast.makeText(MainActivity.this, info.toString(), Toast.LENGTH_SHORT).show(); } } }); } private void addQZoneQQPlatform() { String appId = "xxxxx"; // 这里配置的是QQID和QQKEY String appKey = "xxxxxxxx"; // 添加QQ支持, 并且设置QQ分享内容的target url UMQQSsoHandler qqSsoHandler = new UMQQSsoHandler(MainActivity.this, appId, appKey); qqSsoHandler.setTargetUrl("http://www.umeng.com"); qqSsoHandler.addToSocialSDK(); // 添加QZone平台 QZoneSsoHandler qZoneSsoHandler = new QZoneSsoHandler(MainActivity.this, appId, appKey); qZoneSsoHandler.addToSocialSDK(); } }
如果我们运行的时候出现这个错误在eclipse里面
我们需要把libs里面的httpmime-4.1.3.jar包删除,然后新建个文件夹,把httpmime-4.1.3.jar包拖进去,然后点击新创建的这个文件夹libs1右键,如下图
然后可能大家还会有一些问题,我们需要如下图,把友盟的jar移动到最上面即可
在AS里面不会有这些问题,只有在eclipse里有时候会出现类似的问题。
然后点击运行即可,运行效果如下
需要注意的是,如果我们申请的是debug版本,比如我们腾讯开放平台用的是另一个QQ申请的,前提条件是这个QQ里面你们互相都是好友才可以登录,如果你把这个pak发给你朋友或者同事,他们的QQ是登录不上的,必须把你朋友或者你同事的QQ添加到你申请腾讯平台的QQ,必须互相是好友,才可以登录,如下图
想让谁登录就把谁添加到应用调试者的QQ号
如果想让其他人都可以登录,必须是打包签名后的release版本,这样其他人就可以登录了。还有一种比较特别的情况是,如果你们公司也有IOS开发也是用QQ,他们返回的字段没有一个相同的APPID,如果你们三方登录用一个账号登录,比如我QQ返回的id是123,ios返回的是456,导致了不统一,用户分别用一个QQ号登录APP显示的数据居然不同?,这个时候需要你们跟腾讯开放平台的服务人员沟通,让他们把IOS改成和android端一样的id就行,或者把android端改成和IOS一样的id即可,这样就可以用同一个QQ(既android端,和IOS端登录,均显示一样的内容了)。
如果大家碰到什么问题可以给我留言,看到第一时间为大家解答
相关文章推荐
- Geek-Band--第十一周分享
- 动态污点分析隐式流--动静结合的解决方法
- Mybatis+Oracle进行数据的批量插入和更新
- C#反射Assembly 详细说明
- ASP.NET路径解惑
- Linux反空闲设置的两种方式
- C++和Java写文件(int类型)
- effective objective-c 2.0 笔记 第三章 :接口与API设计
- POJ 1004 Financial Management GCC编译
- 1003. Emergency (25)
- 《啊哈算法》第七章 神奇的树
- Java基础 封装
- 加拿大滑铁卢大学Maluuba机器人的中文名称该如何翻译?
- 树链剖分求LCA(最近公共祖先)
- android开发笔记之sh脚本
- PHPCMS V9后台密码忘记重置工具
- mysql_command_study
- 【iOS】SDWebImage的图片缓存机制
- android 比较靠谱的图片压缩
- 在ios 7下,使用@import代替#import