序言

程序开发过程中,总归是会用到第三方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编程者自己去处理了(数据什么都有了,流程也封装好了,表告诉我你不会。。)。