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