第三方QQ登录有两种方式:
一种是通过友盟SDK,注册key,再通过腾讯开放平台的SDK来实现
另一种是直接通过腾讯开放平台直接实现
通过实际操作,个人觉得直接通过腾讯开放平台来实现比较好用,所以本文所要介绍的就是这种直接通过腾讯开放平台来实现。
创建并配置工程:
1、下载SDK
下载地址:http://wiki.open.qq.com/wiki/mobile/SDK下载
2、新建工程,并导入SDK中的jar文件
mta-sdk-1.6.2.jar:这个包是必须导入的
open_sdk_r5788_lite.jar:精简包
open_sdk_r5788.jar:完整包
这两个包二选一,看需求
3、将jar包添加到依赖中
4、配置AndroidManifest
在应用的AndroidManifest.xml增加配置的节点下增加以下配置(注:不配置将会导致无法调用API);
<uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
<application>
<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="tencent你的AppId" />
</intent-filter>
</activity>
<application>
据官方文档,SDK_V2.0引入了AssistActivity,开发者需在androidManifest.xml中注册。代码如下:
<activity android:name="com.tencent.connect.common.AssistActivity"
android:theme="@android:style/Theme.Translucent.NoTitleBar"
android:configChanges="orientation|keyboardHidden|screenSize"
/>
创建实例并实现登录:
具体代码如下
//第三方QQ登录
public void login() {
mTencent = Tencent.createInstance("1106107726", this.getApplicationContext());
if (!mTencent.isSessionValid())
{
mTencent.login(this, "", iUiListener);
}
}
private IUiListener iUiListener = new IUiListener() {
@Override
public void onComplete(Object o) {
//这里做登录成功后的操作,比如将头像设置到控件中
JSONObject obj = (JSONObject) o;
try {
String openID = obj.getString("openid");
String accessToken = obj.getString("access_token");
String expires = obj.getString("expires_in");
mTencent.setOpenId(openID);
mTencent.setAccessToken(accessToken, expires);
QQToken qqToken = mTencent.getQQToken();
userInfo = new UserInfo(getApplicationContext(), qqToken);
userInfo.getUserInfo(new IUiListener() {
@Override
public void onComplete(Object o) {
JSONObject res = (JSONObject) o;
String nickName = res.optString("nickname");//获取昵称
String figureurl_qq_1 = res.optString("figureurl_qq_1");//获取图片
}
@Override
public void onError(UiError uiError) {
}
@Override
public void onCancel() {
}
});
} catch (JSONException e) {
e.printStackTrace();
}
}
@Override
public void onError(UiError uiError) {
}
@Override
public void onCancel() {
}
};
// 特别注意:
//应用调用Andriod_SDK接口时,如果要成功接收到回调,需要在调用接口的Activity的onActivityResult方法中增加如下代码:
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
Tencent.onActivityResultData(requestCode,resultCode,data,iUiListener);
}
要注意API的调用
1、登录、快速支付登录、应用分享、应用邀请等接口,回调:
IUiListener
2、上传图片、查看相册等,回调:
IRequestListener
参考资料:http://wiki.open.qq.com/wiki/移动应用接入wiki索引