package com.yang.sharelogin.platform.qq;
import android.content.BroadcastReceiver;
import android.content.Context;
import android.content.Intent;
import android.content.IntentFilter;
import com.tencent.connect.UserInfo;
import com.tencent.tauth.Tencent;
import com.yang.sharelogin.TPManager;
import com.yang.sharelogin.bean.Config;
import com.yang.sharelogin.bean.QQShareContent;
import com.yang.sharelogin.listener.StateListener;
import com.yang.sharelogin.platform.qq.listener.BaseUiListener;
/**
* Created by lujun on 2015/9/6.
*/
public class QQManager {
private Context mContext;
private Intent mIntent;
private StateListener<String> mListener;
private ReceiveBroadCast mReceiveBroadCast;
private static final String TAG = "QQManager";
public QQManager(Context context){
mContext = context;
mIntent = new Intent(mContext, AssistActivity.class);
mIntent.putExtra(Config.KEY_OF_APPID, TPManager.getInstance().getQQAppId());
mIntent.putExtra(Config.KEY_OF_APPSECRET, TPManager.getInstance().getQQAppSecret());
mReceiveBroadCast = new ReceiveBroadCast();
}
/**
* QQ三方登录
*/
public void onLoginWithQQ(){
mIntent.putExtra(Config.KEY_OF_TYPE, Config.LOGIN_TYPE);
mContext.registerReceiver(mReceiveBroadCast, new IntentFilter(Config.KEY_OF_QQ_BCR_ACTION));
mContext.startActivity(mIntent);
}
/**
* 取消QQ授权
*/
public void onLoginOut(){
//TODO 取消授权
}
/**
* QQ分享
*/
public void share(QQShareContent content){
mIntent.putExtra(Config.KEY_OF_TYPE, Config.SHARE_TYPE);
mIntent.putExtra(Config.KEY_OF_BUNDLE, content.getBundle());
mContext.registerReceiver(mReceiveBroadCast, new IntentFilter(Config.KEY_OF_QQ_BCR_ACTION));
mContext.startActivity(mIntent);
}
/**
* 设置登录callback
* @param listener
*/
public void setListener(StateListener<String> listener){
this.mListener = listener;
}
/**
* 获取用户信息
* @param accessToken
* @param expires_in
* @param openId
*/
private void getUserInfo(String accessToken, String expires_in, String openId, final String verifyData){
Tencent tencent = Tencent.createInstance(TPManager.getInstance().getQQAppId(), mContext);
tencent.setAccessToken(accessToken, expires_in);
tencent.setOpenId(openId);
UserInfo userInfo = new UserInfo(mContext, tencent.getQQToken());
BaseUiListener mUserInfoListener = new BaseUiListener();
mUserInfoListener.setListener(new StateListener<Object>() {
@Override
public void onComplete(Object o) {
// 返回格式如下
/*{
"user_data":{},
"verify_data":{}
}*/
mListener.onComplete("{\"user_data\":" + o.toString() + "," + "\"verify_data\":" + verifyData + "}");
}
@Override
public void onError(String s) {
mListener.onError(s);
}
@Override
public void onCancel() {
mListener.onCancel();
}
});
userInfo.getUserInfo(mUserInfoListener);
}
/**
* 接受QQ授权回调得到的用户信息
*/
private class ReceiveBroadCast extends BroadcastReceiver{
@Override
public void onReceive(Context context, Intent intent) {
if (mListener != null){
if (intent.getIntExtra(Config.KEY_OF_TYPE, 0x1000) == Config.LOGIN_TYPE){
getUserInfo(
intent.getStringExtra(Config.KEY_OF_ACCESS_TOKEN),
intent.getStringExtra(Config.KEY_OF_EXPIRES_IN),
intent.getStringExtra(Config.KEY_OF_OPEN_ID),
intent.getStringExtra(Config.KEY_OF_VERIFY_DATA)
);
}else {
mListener.onComplete(intent.getStringExtra(Config.KEY_OF_QQ_BCR));
}
}
mContext.unregisterReceiver(mReceiveBroadCast);
}
}
}