QQ三方登录

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

  • 2
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值