您的位置:首页 > 移动开发 > Android开发

Android开发接入第三方原生SDK实现QQ登录

2018-03-10 15:41 931 查看
首先我们梳理一下流程:
1.对我们的应用进行授权,授权成功之后,拿到openid
2.设置openid和token,就可以获取到用户的基本信息
一、准备工作1.在腾讯开放平台上注册账号,注册应用,然后获取APPID和APPKEY
   (这个过程还是很简单的,只需要填一些基本的应用信息即可获取) 
   腾讯开发平台: http://open.qq.com/



2. 下载SDK (http://wiki.open.qq.com/wiki/mobile/SDK%E4%B8%8B%E8%BD%BD

3. 将SDK中的open_sdk_r5990_lite.jar放在我们工程的libs下( 也可以用下边的链接直接下载 )
   链接下载地址 : https://pan.baidu.com/s/1UqS6ao1Rf9rvZHp-JyKbnQ    
  ( 提取密码 : 0nyh )

4. 在工程的清单文件AndroidManifest.xml的application标签中添加两个activity:<activity
android:name="com.tencent.tauth.AuthActivity"
android:noHistory="true"
android:launchMode="singleTask" >
<intent-filter>
<action android:name="android.intent.action.VIEW" />
<category android:name="android.intent.category.DEFAULT" />
<category android:name="android.intent.category.BROWSABLE" />
<data android:scheme="tencent222222" /><!--替换成自己在腾讯开发平台申请的的APPID-->
</intent-filter>
</activity>
<activity
android:name="com.tencent.connect.common.AssistActivity"
android:theme="@android:style/Theme.Translucent.NoTitleBar"
android:configChanges="orientation|keyboardHidden|screenSize">
</activity>PS:记得一定要替换成自己的APPID,如果你在腾讯开放平台上申请到的appid为123456,则这里的APPID值就为tencent123456;

5. 在工程的清单文件AndroidManifest.xml中添加权限:
<uses-permission android:name="android.permission.INTERNET" />  
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />  
<uses-permission android:name="android.permission.ACCESS_WIFI_STATE" />  

二、进行授权

 1.授权的话需要两个重要的类:   //... (1)腾讯提供的一个Tencent类
private Tencent mTencent;
//... (2)一个IUiListener 的实现类(LogInListener implements IUiListener)
private LogInListener mListener;2. LogInListener是IUiListener的实现类,通过这个类里边的回调方法我们可以获得授权返回的结果class LogInListener implements IUiListener {
//... (1)授权成功
@Override
public void onComplete(Object o) {
JSONObject jsonObject = (JSONObject) o;
// 1. 设置openid和token,进一步获取用户信息
initOpenidAndToken(jsonObject);
// 2. 获取QQ用户的各信息
getUserInfo();
}
//... (2)授权失败
@Override
public void onError(UiError uiError) {
ToastUtils.show("授权失败:错误信息:"+uiError.toString());
}
//... (3)授权取消
@Override
public void onCancel() {
ToastUtils.show("授权失败");
}
}在这个OnComplete()回调中,给我们返回的JsonObject格式的数据如下:
{  
    "ret": 0,  
    "openid": "",  
    "access_token": "",  
    "pay_token": "",  
    "expires_in": 7776000,  
    "pf": "",  
    "pfkey": "",  
    "msg": "",  
    "login_cost": 442,  
    "query_authority_cost": 322,  
    "authority_cost": 0  
}  

3. 重写OnActivityResult()方法,确保可以接收到回调@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
super.onActivityResult(requestCode, resultCode, data);
Tencent.onActivityResultData(requestCode, resultCode, data, mListener);
}
4. 进行登录://首先需要用APP ID 获取到一个Tencent实例
mTencent = Tencent.createInstance(Constant.QQ_APPID, this.getApplicationContext());
//初始化一个IUiListener对象,在IUiListener接口的回调方法中获取到有关授权的某些信息
mListener = new LogInListener();
mTencent.login(this, "all", mListener);

5. 退出登录:mTencent.logout(MainActivity.this); 到这里授权的过程已经完毕,接下来我们要获取到QQ给我们返回的用户基本信息:

三、获取用户基本信息

在授权成功之后,就会回调LoginListener中的OnComplete()方法,其中OnComplete()方法会给我们返回一个JsonObject格式的数据,在这个数据里,我们可以获取到openid,然后:
1.设置openid和token private void initOpenidAndToken(JSONObject jsonObject) {
try {
String openid = jsonObject.getString("openid");//获取OpenId
String token = jsonObject.getString("access_token");
String expires = jsonObject.getString("expires_in");
mTencent.setAccessToken(token, expires);
mTencent.setOpenId(openid);
} catch (JSONException e) {
e.printStackTrace();
}
}2.获取用户的基本信息private void getUserInfo() {
QQToken mQQToken = mTencent.getQQToken();
UserInfo userInfo = new UserInfo(QQActivity.this, mQQToken);
userInfo.getUserInfo(new IUiListener() {
@Override
public void onComplete(final Object o) {
try {
JSONObject jsonObject=new JSONObject(o.toString());
String mNickname=jsonObject.getString("nickname");//获取用户QQ名称
String mGender=jsonObject.getString("gender");//获取用户性别
String mUserHeader=jsonObject.getString("figureurl_qq_2");//获取用户头像
} catch (JSONException e) {
e.printStackTrace();
}
}
@Override
public void onError(UiError uiError) {
ToastUtils.show("获取用户QQ信息错误");
}
@Override
public void onCancel() {
ToastUtils.show("取消获取用户QQ信息");
}
}
);
}在这个LoginListner中的OnComplete()回调中,返回的JsonObject数据如下(跟上边的回调返回的数据有所不同):
{  
    "ret": 0,  
    "msg": "",  
    "is_lost": 0,  
    "nickname": "",  
    "gender": "",  
    "province": "",  
    "city": "",  
    "figureurl": "",  
    "figureurl_1": "",  
    "figureurl_2": "",  
    "figureurl_qq_1": "",  
    "figureurl_qq_2": "",  
    "is_yellow_vip": "0",  
    "vip": "0",  
    "yellow_vip_level": "0",  
    "level": "0",  
    "is_yellow_year_vip": "0"  
}  
   

大功告成!   QQ:963231481   如有问题,加我QQ ! 
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息