看了好多人遇到第一次登录成功,然后第二次登录出现问题的情况相当不少,就一个授权问题搞出了不少事,所以,贴出代码并给大家具体说明下一次性成功无忧的方案:
<span style="font-size:18px;"> @Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_others_login);
initView();
bundle = getIntent().getExtras();
otherLoginType = Format.null2Zero(bundle.getInt("platform"));
if(otherLoginType==1){
otherLoginType = 1;
login(SHARE_MEDIA.QQ);
}else{
otherLoginType = 3;
login(SHARE_MEDIA.SINA);
}
}
/**
*
*/
private void initView() {
context = getApplicationContext();
// 关闭toast
mController.getConfig().closeToast();
mController.getConfig().enableSIMCheck(false);
// 添加新浪SSO授权
SinaSsoHandler sinaSsoHandler = new SinaSsoHandler();
mController.getConfig().setSsoHandler(sinaSsoHandler);
addQZoneQQPlatform();
other_login_content_tv =(TextView)findViewById(R.id.other_login_content_tv);
}
/** <span style="color:#FF0000;">清除授权</span>
* 注销本次登录</br>
*/
private void logout(final SHARE_MEDIA platform) {
mController.deleteOauth(OtherLoginActivity.this, platform, new SocializeClientListener() {
@Override
public void onStart() {
}
@Override
public void onComplete(int status, SocializeEntity entity) {
UMQQSsoHandler qqHandler = (UMQQSsoHandler) mController.getConfig().getSsoHandler(HandlerRequestCode.QQ_REQUEST_CODE);
if (qqHandler != null) {
//qqHandler.cleanQQCache();
}
}
});
}
/**
* 授权。如果授权成功,则获取用户信息</br>
*/
private void login(final SHARE_MEDIA platform) {
<span style="color:#FF0000;">// 如果已经授权,直接获取用户信息并返回</span>
boolean flag = OauthHelper.isAuthenticatedAndTokenNotExpired(this,platform);
if(flag){
getUserInfo(platform);
return;
}
mController.doOauthVerify(OtherLoginActivity.this, platform, new UMAuthListener() {
@Override
public void onStart(SHARE_MEDIA platform) {
}
@Override
public void onError(SocializeException e, SHARE_MEDIA platform) {
<span style="color:#FF0000;">// 授权失败的话,清除一下之前的授权比较保险,你觉得呢?</span>
logout(platform);
// ToastTool.showLongToast(context, "失败:"+e.getErrorCode()+","+e.getMessage());
OtherLoginActivity.this.finish();
}
@Override
public void onComplete(Bundle value, SHARE_MEDIA platform) {
String uid = value.getString("uid");
if (!TextUtils.isEmpty(uid)) {
LogUtil.e("uid"+uid);
getUserInfo(platform);
} else {
ToastTool.showLongToast(context, "授权失败...");
OtherLoginActivity.this.finish();
}
}
@Override
public void onCancel(SHARE_MEDIA platform) {
OtherLoginActivity.this.finish();
}
});
}
/**
* 获取授权平台的用户信息</br>
*/
private void getUserInfo(final SHARE_MEDIA platform) {
mController.getPlatformInfo(OtherLoginActivity.this, platform, new UMDataListener() {
@Override
public void onStart() {
// Toast.makeText(context, "登录成功,正在跳转...", Toast.LENGTH_SHORT).show();
other_login_content_tv.setText("登录成功,正在跳转...");
}
@Override
public void onComplete(int status, Map<String, Object> info) {
if ( info != null ) {
<span style="color:#FF0000;">// 这里是处理获取到的用户信息,你自己看着来吧</span>
requestOtherLogin(platform,info);
LogUtil.e(TAG, "info:"+info.toString());
// Toast.makeText(context, info.toString(), Toast.LENGTH_SHORT).show();
}else{
ToastTool.showShortToast(context, "失败!");
OtherLoginActivity.this.finish();
}
}
});
}
private void addQZoneQQPlatform() {
String appId = Constant.QQ_APP_ID;
String appKey = Constant.QQ_APP_SECRET;
// 添加QQ支持, 并且设置QQ分享内容的target url
UMQQSsoHandler qqSsoHandler = new UMQQSsoHandler(OtherLoginActivity.this,appId, appKey);
qqSsoHandler.addToSocialSDK();
}
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
super.onActivityResult(requestCode, resultCode, data);
/**使用SSO授权必须添加如下代码 */
UMSsoHandler ssoHandler = mController.getConfig().getSsoHandler(requestCode);
if(ssoHandler != null){
ssoHandler.authorizeCallBack(requestCode, resultCode, data);
}
}</span>
至于这个,
<span style="font-size:18px;">OtherLoginActivity.this.finish();</span>
我是做了一个中转页面,就是你目前看到的这个,每次成功失败我都要干掉这个页面的,也许你觉得没有必要有这个中转页面,这个考虑自己情况了