在上一篇文章中,我们讲了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 第三方登录-微博登录(一)

更多相关文章

  1. Android(安卓)Wifi驱动--底层
  2. Android(安卓)中input event的分析
  3. Android(安卓)4.1 Netd详细分析(五)代码分析3
  4. Android(安卓)GDI之SurfaceFlinger之动态结构示意图
  5. android velocityTracker 简介
  6. binder实例分析
  7. android native内存泄漏检测原理
  8. Android(安卓)SystemUI的EventBus实现原理
  9. cocos2dx实现获得设备的网络连接状态

随机推荐

  1. Adapter用法总结
  2. Android 使用cmwap访问互联网的办法
  3. 在手机上开发程序之AIDE(Android集成开发
  4. android 应用层开发
  5. Android 使用 lambda 表达式
  6. Android(Java):Android的状态栏通知(Noti
  7. Funambol android eclipse上的配置及说明
  8. android 、java优质资料合集
  9. Android(安卓)4.0的图形硬件加速及绘制技
  10. 解决Android Studio Gradle DSL method n