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端登录,均显示一样的内容了)。
如果大家碰到什么问题可以给我留言,看到第一时间为大家解答

1 0
原创粉丝点击