三方登录-QQ登录开发-Android(as版本)
2017-11-27 本文已影响60人
流水潺湲
一、导入jar文件
gradle配置:
compile files('libs/open_sdk_r5923_lite.jar')
二、 配置AndroidManifest
在应用的AndroidManifest.xml增加配置的<application>节点下增加以下配置(注:不配置将会导致无法调用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互联的SDK进行开发了。
三、创建实例并实现回调
建议在Application中配置全局的比较实用
public class MyApplication extendsApplication {
public static Tencent mTencent;
public static Tencent getmTencent() {
return mTencent;
}
public static void setmTencent(Tencent mTencent) {
SkyPineApplication.mTencent = mTencent;
}
@Override
public void onCreate() {
super.onCreate();
// Tencent类是SDK的主要实现类,开发者可通过Tencent类访问腾讯开放的OpenAPI。
// 其中APP_ID是分配给第三方应用的appid,类型为String。
mTencent = Tencent.createInstance(ConfigurationSettings.TENCENT_APP_ID, this.getApplicationContext());
}
接下来就是直接登录、获取用户信息即可
登录
/**
* qq
* scope 应用需要获得哪些API的权限,由“,”分隔。
* 例如:SCOPE = “get_user_info,add_t”;所有权限用“all”
*/
public static final String ACOPE_ALL = "all";
BaseUiListener listener;
public void login() {
listener = new BaseUiListener();
if (!mTencent.isSessionValid()) {
mTencent.login(this, ACOPE_ALL, listener);
}
}
登录回调
private class BaseUiListener implements IUiListener {
@Override
public void onComplete(Object value) {
Log.e(TAG, value.toString());
//{"ret":0,"openid":"1BD6DE05A2A48E3AFF3905766855C30C","access_token":"072A085194740A54A85EA555D3AFE7EB",
// "pay_token":"765794D8CB4DFE50B743E98A9BBFC239","expires_in":7776000,"pf":"desktop_m_qq-10000144-android-2002-",
// "pfkey":"20d22c7e64c46aa138b69b5ebe89511a","msg":"","login_cost":493,"query_authority_cost":118,"authority_cost":24924}
try {
JSONObject jsonObject = (JSONObject) value;
int ret = jsonObject.getInt("ret");
if (ret == 0) {
showMessage("login success");
//此处登录授权成功
String openId = jsonObject.getString(PARAM_OPEN_ID);
String access_token = jsonObject.getString(PARAM_ACCESS_TOKEN);
String expires = jsonObject.getString(PARAM_EXPIRES_IN);
mTencent.setOpenId(openId);
mTencent.setAccessToken(access_token, expires);
//获取用户信息
getUserInfo();
} else {
showMessage("login failed");
}
} catch (JSONException e) {
e.printStackTrace();
}
}
@Override
public void onError(UiError uiError) {
Log.e(TAG, uiError.errorMessage);
showMessage("falied");
}
@Override
public void onCancel() {
Log.e(TAG, "cancel");
showMessage("cancel");
}
}
用户信息
private void getUserInfo() {
UserInfo info = new UserInfo(LoginActivity.this, mTencent.getQQToken());
info.getUserInfo(new IUiListener() {
@Override
public void onComplete(Object value) {
JSONObject jsonObject = (JSONObject) value;
Log.e(TAG, jsonObject.toString());
}
@Override
public void onError(UiError uiError) {
Log.e(TAG, uiError.errorMessage);
}
@Override
public void onCancel() {
}
});
}
调用QQ注销接口
public void logout()
{
mTencent.logout(this);
}
特别注意
应用调用Andriod_SDK接口时,如果要成功接收到回调,需要在调用接口的Activity的onActivityResult方法中增加如下代码:
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
Tencent.onActivityResultData(requestCode,resultCode,data,listener);
}
其中onActivityResultData接口中的listener为当前调用的Activity所实现的相应回调UIListener。