在上一篇文章中,我们讲了android与js间如何交互,说白了就是在H5页面上的登录按钮如何触发android中的处理流程。
本篇文章主要讲的是当你点击登录按钮之后发生的事。
首先,在js中触发了交互接口后,会进入到:
class H5AndAndroidInterface {
@JavascriptInterface
public void doApp(int type, String jsonString) {
if (jsonString == null) {
jsonString = "没有值";
}
Log.e("Webview_doApp()", type + "--" + jsonString);
switch (type) {
case 8:
WbLogin wbLogin = WbLogin.getInstance(WebActivity.this);
wbLogin.login(WebActivity.this);
break;
default:
toast("没有制定类型函数" + jsonString);
break;
}
}
下面给出WbLogin类的具体实现
package xxx.thirdlogin.wblogin;(你自己的包)
import android.app.Activity;
import android.app.Application;
import android.content.Context;
import android.content.Intent;
import android.widget.Toast;
import com.baidu.android.common.logging.Log;
import com.sina.weibo.sdk.WbSdk;
import com.sina.weibo.sdk.auth.AccessTokenKeeper;
import com.sina.weibo.sdk.auth.AuthInfo;
import com.sina.weibo.sdk.auth.Oauth2AccessToken;
import com.sina.weibo.sdk.auth.WbConnectErrorMessage;
import com.sina.weibo.sdk.auth.sso.SsoHandler;
import com.sina.weibo.sdk.exception.WeiboException;
import com.sina.weibo.sdk.net.RequestListener;
/**
* 根据weibo文档封装的第三方登录工具
*/
public class WbLogin {
private static final String TAG = "WbLogin";
/** 封装了 "access_token","expires_in","refresh_token",并提供了他们的管理功能 */
private Oauth2AccessToken mAccessToken;
/** 注意:SsoHandler 仅当 SDK 支持 SSO 时有效 */
private SsoHandler mSsoHandler;
private SelfWbAuthListener mAuthListener;
private Activity mActivity;
private static WbLogin instance;
private WbLogin(Context context){
//微博SDK初始化
WbSdk.install(context.getApplicationContext(),new AuthInfo(context.getApplicationContext(),Constants.APP_KEY,Constants.REDIRECT_URL,Constants.SCOPE));
}
public static WbLogin getInstance(Context context) {
if(instance == null){
instance = new WbLogin(context);
}
return WbLogin.instance;
}
public void login(Activity activity){
this.mActivity = activity;
if(mSsoHandler == null){
this.mSsoHandler = new SsoHandler(mActivity);
}
if(mAuthListener == null){
this.mAuthListener = new SelfWbAuthListener(mActivity);
}
//ALL IN ONE 方式授权,若用户手机安装有微博客户端,则拉起客户端,若没有则转到网页微博
mSsoHandler.authorize(mAuthListener);
}
public void onResult(int requestCode, int resultCode, Intent data){
if(mSsoHandler!=null){
mSsoHandler.authorizeCallBack(requestCode, resultCode, data);
}
}
private class SelfWbAuthListener implements com.sina.weibo.sdk.auth.WbAuthListener{
private Activity mActivity;
public SelfWbAuthListener(Activity activity) {
this.mActivity = activity;
}
@Override
public void onSuccess(final Oauth2AccessToken token) {
mActivity.runOnUiThread(new Runnable() {
@Override
public void run() {
mAccessToken = token;
if (mAccessToken.isSessionValid()) {
// 显示 Token
//updateTokenView(false);
// 保存 Token 到 SharedPreferences
AccessTokenKeeper.writeAccessToken(mActivity, mAccessToken);
Toast.makeText(mActivity,"授权登录成功", Toast.LENGTH_SHORT).show();
}
}
});
}
@Override
public void cancel() {
Toast.makeText(mActivity,"取消登录", Toast.LENGTH_LONG).show();
}
@Override
public void onFailure(WbConnectErrorMessage errorMessage) {
Toast.makeText(mActivity, errorMessage.getErrorMessage(), Toast.LENGTH_LONG).show();
}
}
}
PS: 以上代码中Constants来自于微博所提供的文档和sdk,请自行查阅
登录成功后会回调到onSuccess函数,可以在这里写后续的处理逻辑。到这里还没完,因为我们向微博发起认证请求后,首先会回到onActivityResult中,所以要在这里添加逻辑:
@Override
public void onActivityResult(int requestCode, int resultCode, Intent data) {
super.onActivityResult(requestCode, resultCode, data);
//微博登录相关
WbLogin wbLogin = WbLogin.getInstance(WebActivity.this);
wbLogin.onResult(requestCode,resultCode,data);
}
至此,关于微博web app 第三方登录的相关东西就写完了,欢迎讨论~
附上前一篇文章的链接:
web app 第三方登录-微博登录(一)