web app 第三方登录-微博登录(二)
16lz
2021-01-26
在上一篇文章中,我们讲了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 第三方登录-微博登录(一)
更多相关文章
- Android(安卓)Wifi驱动--底层
- Android(安卓)中input event的分析
- Android(安卓)4.1 Netd详细分析(五)代码分析3
- Android(安卓)GDI之SurfaceFlinger之动态结构示意图
- android velocityTracker 简介
- binder实例分析
- android native内存泄漏检测原理
- Android(安卓)SystemUI的EventBus实现原理
- cocos2dx实现获得设备的网络连接状态