1. 程式人生 > >常用微信整合(第三方sdk整合套路)-- 微信登入

常用微信整合(第三方sdk整合套路)-- 微信登入

序言

程式開發過程中,總歸是會用到第三方sdk的,這裡就常用的登入、分享、支付做一個整合方法上的綜述,以備引申至通用的sdk使用方法。
一般的,sdk在登入、分享、支付上,都會按照如下的流程進行:

包裝請求(req)--> 傳送請求 --> 處理請求 

這麼說雖然非常籠統,但是大致流程便是如此,只是各自的sdk在這一過程中實現的方式可能有所差別。所以,整合第三方sdk,並不是特別的難。

登入

(1). 登入開始

第三方登入,通常是先登入第三方的客戶端,並通過此步獲取使用者登入資料,再用所獲取的登入資訊封裝成本App的登入資料,傳送至本客戶端的登入介面Api來實現登入的。
具體如下:

    /** 1.微信登陸開始 */
    public void loginStart(Context context) {
       MessageManager.showProgressDialog((Activity) context, "微信登入中...");
        SendAuth.Req req = new SendAuth.Req();
        req.scope = "snsapi_userinfo";
        req.state = "wechat_sdk_demo_test";

        IWXAPI iwxapi = WXAPIFactory.createWXAPI(context, Constants.WX.APP_ID, true
); iwxapi.registerApp(FirstPageConstants.WX.APP_ID); iwxapi.sendReq(req); }

這個方法在開啟微信登入的Activity中呼叫,標誌著微信登入開始。微信登陸,在資料返回處理上,本質是通過WXEntryActivity的OnActivityResult來處理的,只不過sdk將此流程做了封裝。

(2). 登入返回結果處理

想要獲取微信的結果,我們就需要在App程式碼根目錄下,建立wxapi包,並在其中建立WXEntryActivity,實現IWXAPIEventHandler介面。該介面提供onResp和onReq兩個方法做結果處理。我們需要做的,就是在結果返回時,通知微信去呼叫這onResp方法。
剛才也說過了,微信對登入請求的處理是通過OnActivityResult。所以這裡我們有:

    /** 2.微信登入返回結果處理 */
    @Override
    protected void onNewIntent(Intent intent) {   
        super.onNewIntent(intent);
        setIntent(intent);
        mWechatApi.handleIntent(intent, this);
    }

    @Override
    public void onReq(BaseReq req) {
    }

    @Override
    public void onResp(BaseResp resp) {          
        handleLoginResponse(resp);
    }

經過如上操作後,我們在WXEntryActivity的onResp中便得到了需要的微信登陸返回結果。這裡,我在自定義的handleLoginResponse方法中進行了處理。

 /** 處理微信登陸響應結果 */
    private void handleLoginResponse(BaseResp resp) {
        switch (resp.errCode) {
            case BaseResp.ErrCode.ERR_OK:
                loginByWX(((SendAuth.Resp) resp).code);
                break;
            case BaseResp.ErrCode.ERR_USER_CANCEL:
                MessageManager.closeProgressDialog();
                break;
            case BaseResp.ErrCode.ERR_AUTH_DENIED: {
                MessageManager.showDialog((Activity) context, 0, "登陸提示", "登陸失敗,請求微信失敗!", null, false);
            }
            break;
        }
    }

(3). 呼叫App的登入流程

在資料齊全,並檢測後,我們就可以安全的呼叫App的登入流程啦:

  /** 3.響應處理:登陸成功,蒐集資訊跳轉登入App */
    private void loginByWX(final String code) {
        new AsyncTask<Integer, Void, WXUsersInfo>() {

            @Override
            protected WXUsersInfo doInBackground(Integer... params) {
                MessageManager.showProgressDialog((Activity) context, "登入中...");
                WXTokenInfo token = mLoginRepository.getWechatToken(code);
                WXUsersInfo muser = mLoginRepository.getWeChatUserInfo(token);
                return muser;
            }

            @Override
            protected void onPostExecute(WXUsersInfo result) {
                super.onPostExecute(result);
                dealLoginResult(result);
            }

        }.execute();
    }

這裡的話,我的App內登入邏輯是在dealLoginResult方法裡實現的,因為每個App的登入流程不太一樣,這裡就不寫了。不過微信的登入流程,到這裡其實已經結束了,剩餘的部分其實本質上就是Android程式設計者自己去處理了(資料什麼都有了,流程也封裝好了,表告訴我你不會。。)。