您的位置:首页 > 其它

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中的一个即可解决问题

<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端登录,均显示一样的内容了)。

如果大家碰到什么问题可以给我留言,看到第一时间为大家解答
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: