一、配置工程
首先下载SDK,得到jar包放到自己的工程中,并添加依赖。
1、添加依赖(我用的是Studio)
compile files('libs/mta-sdk-1.6.2.jar')
compile files('libs/open_sdk_r5778.jar')
2、 配置AndroidManife
<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" />
<!--tencent要保留不能去掉-->
<data android:scheme="tencent你的AppId" />
</intent-filter>
</activity>
<activity android:name="com.tencent.connect.common.AssistActivity"
android:screenOrientation="portrait"
android:theme="@android:style/Theme.Translucent.NoTitleBar"/>
<application>
二、QQ第三方登录
完成第三方登录要实现两个接口的回调,一个是授权的、一个是获取用户信息的,在授权完成后去获取用户信息,在获取用户信息成功后,去调用自己App的接口完成登录
1、创建Tencent实例(所有接口都通过Tencent进行调用)
Tencent mTencent = Tencent.createInstance(APP_ID, this.getApplicationContext());
2、实现回调接口为登录做准备
//QQ授权监听
private class BaseUiListener implements IUiListener {
//登录成功后获取的数据
@Override
public void onComplete(Object o) {
//获取登录成功后的数据
JSONObject jsonObject = (JSONObject) o;
try {
uid = jsonObject.getString("openid");
thirdLogin.setUid(uid);
String accessToken = jsonObject.getString("access_token");
String expires = jsonObject.getString("expires_in");
mTencent.setOpenId(uid);
mTencent.setAccessToken(accessToken, expires);
} catch (JSONException e) {
e.printStackTrace();
}
//获取用户信息
UserInfo userInfo= new UserInfo(context,mTencent.getQQToken());
userInfo.getUserInfo(new GetUserInfoListener());
}
@Override
public void onError(UiError uiError) {
}
@Override
public void onCancel() {
}
}
获取用户信息
//QQ获取用户信息监听
private class GetUserInfoListener implements IUiListener{
@Override
public void onComplete(Object o) {
JSONObject jsonObject = (JSONObject) o;
fullName = jsonObject.optString("nickname");
imageUrl = jsonObject.optString("figureurl_qq_2");
thirdLogin.setFullName(fullName);
thirdLogin.setImageUrl(imageUrl);
//获取用户的用户信息后,调用本地的登录接口,实现你的App的登录功能
HttpAPI.getInstence(context,handler).ThirdLoginTask(platform,uid,fullName,imageUrl);
}
@Override
public void onError(UiError uiError) {
}
@Override
public void onCancel() {
}
}
3、调用登录接口
if(!mTencent.isSessionValid()){
mTencent.login((Activity)context,"get_simple_userinfo",mBaseUiListener);
}
登录成功后获取的信息在onComplete方法中返回,数据包括:
{
"ret":0,
"pay_token":"xxxxxxxxxxxxxxxx",
"pf":"openmobile_android",
"expires_in":"7776000",
"openid":"xxxxxxxxxxxxxxxxxxx",
"pfkey":"xxxxxxxxxxxxxxxxxxx",
"msg":"sucess",
"access_token":"xxxxxxxxxxxxxxxxxxxxx"
}
获取的用户信息:
{
"is_yellow_year_vip": "0",
"ret": 0,
"figureurl_qq_1": "http://q.qlogo.cn/qqapp/222222/8C75BBE3DC6B0E9A64BD31449A3C8CB0/40",
"figureurl_qq_2": "http://q.qlogo.cn/qqapp/222222/8C75BBE3DC6B0E9A64BD31449A3C8CB0/100",
"nickname": "小罗",
"yellow_vip_level": "0",
"msg": "",
"figureurl_1": "http://qzapp.qlogo.cn/qzapp/222222/8C75BBE3DC6B0E9A64BD31449A3C8CB0/50",
"vip": "0",
"level": "0",
"figureurl_2": "http://qzapp.qlogo.cn/qzapp/222222/8C75BBE3DC6B0E9A64BD31449A3C8CB0/100",
"is_yellow_vip": "0",
"gender": "男",
"figureurl": "http://qzapp.qlogo.cn/qzapp/222222/8C75BBE3DC6B0E9A64BD31449A3C8CB0/30"
}
4、授权Activity退出后会调用onActivityResult
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
super.onActivityResult(requestCode, resultCode, data);
Tencent.onActivityResultData(requestCode,resultCode,data,new QQLoginListener());
}
三、分享
Bundle bundle = new Bundle();
//这条分享消息被好友点击后的跳转URL。
bundle.putString(QQShare.SHARE_TO_QQ_TARGET_URL, actionUrl);
//分享的标题。注:PARAM_TITLE、PARAM_IMAGE_URL、PARAM_SUMMARY不能全为空,最少必须有一个是有值的。
bundle.putString(QQShare.SHARE_TO_QQ_TITLE, title);
//分享的图片URL
bundle.putString(QQShare.SHARE_TO_QQ_IMAGE_URL, imageUrl);
//分享的消息摘要,最长50个字
bundle.putString(QQShare.SHARE_TO_QQ_SUMMARY, description);
bundle.putInt(QQShare.SHARE_TO_QQ_KEY_TYPE, QQShare.SHARE_TO_QQ_TYPE_DEFAULT);
// bundle.putInt(QQShare.SHARE_TO_QQ_EXT_INT,QQShare.SHARE_TO_QQ_FLAG_QZONE_AUTO_OPEN);//QQ空间
mTencent.shareToQQ(this, bundle , new QQShareListener());
class QQShareListener implements IUiListener{
@Override
public void onComplete(Object o) {
Log.e("-------->","分享成功");
}
@Override
public void onError(UiError uiError) {
}
@Override
public void onCancel() {
}
}
也需要重写onActivityResult方法
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
if (null != mTencent)
mTencent.onActivityResult(requestCode, resultCode, data);
}