웹 앱 제3자 로그 인 - 웨 이 보 로그 인 (2)

22763 단어 상용 기술
지난 글 에서 우 리 는 안 드 로 이 드 와 js 간 에 어떻게 상호작용 을 하 는 지, 즉 H5 페이지 의 로그 인 버튼 이 안 드 로 이 드 의 처리 절 차 를 어떻게 촉발 하 는 지 에 대해 이야기 했다.
이 글 은 로그 인 단 추 를 누 르 면 일어 나 는 일 을 다 루 고 있다.
우선, 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 함수 로 되 돌아 가 후속 처리 논 리 를 쓸 수 있 습 니 다.여기 서 아직 끝나 지 않 았 습 니 다. 저희 가 웨 이 보 에 인증 요청 을 한 후에 먼저 onActivity Result 로 돌아 가기 때문에 여기에 논 리 를 추가 해 야 합 니 다.
    @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);
    }

이로써 웨 이 보 웹 앱 제3자 로그 인 에 관 한 내용 은 다 썼 습 니 다. 토론 을 환영 합 니 다 ~
이전 글 의 링크 를 첨부 합 니 다: 웹 app 제3자 로그 인 - 웨 이 보 로그 인 (1)

좋은 웹페이지 즐겨찾기