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

Android_第三方登录——QQ登录

2016-06-20 11:37 721 查看
前文完成了第三方新浪微博的登陆,这篇文章介绍QQ作为第三方登录,登陆流程如下图所示(参考QQ官方文档):



代码实现如下所示:

package com.ppl.get_loc.chat;

import org.json.JSONObject;

import android.app.Activity;
import android.content.Context;
import android.widget.Toast;

import com.ppl.get_loc.MainActivity;
import com.ppl.get_loc.utils.PublicData;
import com.tencent.open.utils.Util;
import com.tencent.tauth.IUiListener;
import com.tencent.tauth.Tencent;
import com.tencent.tauth.UiError;

public class QqLogin {
private static final String Scope = "all";
private Context mContext;
private Activity mActivity;

public QqLogin(Context mContext, Activity mActivity) {
super();
this.mContext = mContext;
this.mActivity = mActivity;
}
public void login()
{
// Tencent类是SDK的主要实现类,开发者可通过Tencent类访问腾讯开放的OpenAPI。
// 其中APP_ID是分配给第三方应用的appid,类型为String。
PublicData.mTencent = Tencent.createInstance(PublicData.QQ_APP_ID, mContext);
if (!PublicData.mTencent.isSessionValid())
{
PublicData.mTencent.login(mActivity, Scope, loginListener);
}
}

public IUiListener loginListener = new BaseUiListener(){

@Override
public void onComplete(Object arg0) {
// TODO Auto-generated method stub
super.onComplete(arg0);
System.out.println("QQ 用户信息: "+arg0.toString());
}

};
/**
* 调用SDK已经封装好的接口时,例如:登录、快速支付登录、应用分享、应用邀请等接口,需传入该回调的实例。
* */
public class BaseUiListener implements IUiListener {

@Override
public void onCancel() {
// TODO Auto-generated method stub
Toast.makeText(mContext, "取消登陆", Toast.LENGTH_LONG).show();
}

@Override
public void onComplete(Object response) {
// TODO Auto-generated method stub
if (null == response) {
Toast.makeText(mContext, "返回为空,登录失败", Toast.LENGTH_LONG).show();
return;
}
JSONObject jsonResponse = (JSONObject) response;
if (null != jsonResponse && jsonResponse.length() == 0) {
Toast.makeText(mContext, "返回为空,登录失败", Toast.LENGTH_LONG).show();
return;
}
Toast.makeText(mContext, "登录成功", Toast.LENGTH_LONG).show();
}

@Override
public void onError(UiError arg0) {
// TODO Auto-generated method stub
Toast.makeText(mContext, "登录失败"+arg0, Toast.LENGTH_LONG).show();
}
}
}


登录成功后调用public void onComplete(JSONObject arg0) 回传的JsonObject, 其中包含OpenId, AccessToken等重要数据。

{

“ret”:0,

“pay_token”:”xxxxxxxxxxxxxxxx”,

“pf”:”openmobile_android”,

“expires_in”:”7776000”,

“openid”:”xxxxxxxxxxxxxxxxxxx”,

“pfkey”:”xxxxxxxxxxxxxxxxxxx”,

“msg”:”sucess”,

“access_token”:”xxxxxxxxxxxxxxxxxxxxx”

}

完成登陆后并获取到用户的头像等信息,下面介绍如何获取用户头像等信息,参考官方文档

在SDK中,有一些功能接口,如登录,分享消息到QQ等,SDK对其调用单独封装成了独立的接口;但是,SDK中的另外一些接口,如获取用户信息、获取用户相册列表、发送分享(addshare)、发表说说、上传图片、创建相册等,则被统一封装在Tencent类的request或requestAsync方法中,通过传入不同的参数实现不同的接口调用。request和requestAsync这两个接口的功能相同。

获取用户信息有两种方式:同步方式和异步方式

request(String graphPath, Bundle params, String httpMethod) 发送同步调用请求访问腾讯提供的OpenAPI。

requestAsync(String graphPath, Bundle params, String httpMethod, IRequestListener listener, Object state) 发送异步调用请求访问腾讯提供的OpenAPI。

所以在获取用户信息后再获取用户的头像 昵称等信息,代码如下:

private void updateUserInfo() {
if (PublicData.mTencent != null && PublicData.mTencent.isSessionValid()) {
IUiListener listener = new IUiListener() {
@Override
public void onError(UiError e) {

}
@Override
public void onComplete(final Object response) {
new Thread(){
@Override
public void run() {
JSONObject json = (JSONObject)response;
UserQQLogin(json);      //根据前文新浪微博账号与自己App绑定方法,对获取的QQ用户信息进行绑定
}
}.start();
}
@Override
public void onCancel() {
}
};
mInfo = new UserInfo(mContext, PublicData.mTencent.getQQToken());
mInfo.getUserInfo(listener);
}
}


至此完成了使用QQ账号登陆自己的App并与自己的App进行绑定的方法。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: