QQ三方登录
来源:互联网 发布:网络传真机号码 编辑:程序博客网 时间:2024/06/02 22:17
转载请说明出处 http://blog.csdn.net/lyfaxt/article/details/51416199
今天与大家分享的是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端登录,均显示一样的内容了)。
如果大家碰到什么问题可以给我留言,看到第一时间为大家解答
- QQ三方登录
- QQ三方登录
- Android开发实现QQ三方登录
- 三方登录(微博微信qq)
- QQ三方登录步骤详解
- Android开发实现QQ三方登录
- PHP QQ网页三方登录
- ThinkPHP3.2.3实现QQ等第三方登录
- QQ第三方登录
- QQ第三方登录
- QQ第三方登录
- QQ第三方登录
- QQ第三方登录
- 第三方qq登录
- QQ第三方登录
- QQ第三方登录
- QQ第三方登录
- 第三方登录QQ
- 《啊哈算法》第七章 神奇的树
- 杭电 2048 (错排)
- Geek-Band--第十一周分享
- 动态污点分析隐式流--动静结合的解决方法
- win 下 solr 链接数据库并把数据导入到solr中
- QQ三方登录
- 怎么实现javascript中调用java类中的方法
- Mybatis+Oracle进行数据的批量插入和更新
- 2016"百度之星" - 资格赛(Astar Round1)-(模拟+线段树+乘法逆元)
- 检索MediaStore中的Video和其对应的缩略图信息
- 机房重构--时序图
- 【Stanford机器学习笔记】12-Dimensionality Reduction
- common lisp 安装和使用第三方包
- 牛腩总结