android客户端集成微信登录

客户端集成微信登录

1.WXEntryActivity

public class WXEntryActivity extends WeCareActivity implements IWXAPIEventHandler {
    // IWXAPI 是第三方app和微信通信的openapi接口
    private static IWXAPI api;

    public final static String WX_APP_ID = "wx55bdf002ebc4e7d7";
    public final static String WX_APP_SECRET = "ccd9bd049967d8ff017ae751f8597fb5";

    @Override
    protected void onCreate(Bundle bundle) {
        super.onCreate(bundle);
        api = WXAPIFactory.createWXAPI(this, WX_APP_ID, false);
        api.registerApp(WX_APP_ID);
        api.handleIntent(getIntent(), this);
    }

    @Override
    protected void onStart() {
        super.onStart();
        EventBus.getDefault().register(this);
    }

    @Override
    protected void onStop() {
        super.onStop();
        EventBus.getDefault().unregister(this);
    }

    @Override
    public void onReq(BaseReq req) {
        Logger.v("WXEntryActivity onReq", "is work  resp:" + new Gson().toJson(req));
        switch (req.getType()) {
            case ConstantsAPI.COMMAND_GETMESSAGE_FROM_WX:
                break;
            case ConstantsAPI.COMMAND_SHOWMESSAGE_FROM_WX:
                break;
            default:
                break;
        }
        finish();
    }

    @Override
    public void onResp(BaseResp resp) {
        Logger.v("WXEntryActivity onResp", "is work  resp:" + new Gson().toJson(resp));
        int result = 0;
        switch (resp.errCode) {
            case BaseResp.ErrCode.ERR_OK://获取成功
                result = R.string.errcode_success;
                SendAuth.Resp resp1 = (SendAuth.Resp) resp;//这里做一下转型就是
//                getUserInfo(r.code);
                EventBus.getDefault().post(resp1);
                break;
            case BaseResp.ErrCode.ERR_USER_CANCEL:
                result = R.string.errcode_cancel;
                break;
            case BaseResp.ErrCode.ERR_AUTH_DENIED:
                result = R.string.errcode_deny;
                break;
            case BaseResp.ErrCode.ERR_UNSUPPORT:
                result = R.string.errcode_unsupported;
                break;
            default:
                result = R.string.errcode_unknown;
                break;
        }
//        Toast.makeText(this, result, Toast.LENGTH_LONG).show();
        finish();
    }

    @Override
    protected void onActivityResult(int requestCode, int resultCode, Intent data) {
        super.onActivityResult(requestCode, resultCode, data);
        api.handleIntent(data, this);
    }

    @Override
    protected void onNewIntent(Intent intent) {
        super.onNewIntent(intent);
        setIntent(intent);
        api.handleIntent(intent, this);
        finish();
    }
}
  1. 请求登录

IWXAPI api = WXAPIFactory.createWXAPI(this, WXEntryActivity.WX_APP_ID,false);
if (!api.isWXAppInstalled()) {
    //提醒用户没有按照微信
    ToastUtil.show(this,"请先安装微信客户端");
    return;
}
SendAuth.Req req = new SendAuth.Req();
req.scope = "snsapi_userinfo";
req.state = "wechat_login";
api.sendReq(req);
  1. WXEntryActivity回调

 @Override
    public void onResp(BaseResp resp) {
        Logger.v("WXEntryActivity onResp", "is work  resp:" + new Gson().toJson(resp));
        int result = 0;
        switch (resp.errCode) {
            case BaseResp.ErrCode.ERR_OK://获取成功
                result = R.string.errcode_success;
                SendAuth.Resp resp1 = (SendAuth.Resp) resp;//这里做一下转型就是
//                getUserInfo(r.code);
                EventBus.getDefault().post(resp1);//抛出回调结果到登录界面去
                break;
         }
         finish();
     }

4.请求token并请求用户数据

public void getWXUserInfo(final Context context, String code) {
    getSSHClient(context).getWXToken(WXEntryActivity.WX_APP_ID, WXEntryActivity.WX_APP_SECRET, code, "authorization_code")
            .flatMap(new Func1<GetWXTokenResp, Observable<GetWxUserInfoResp>>() {
                @Override
                public Observable<GetWxUserInfoResp> call(GetWXTokenResp resp) {
                    Logger.v(TAG , "getWXUserInfo is work  resp:" + new Gson().toJson(resp));
                    return getSSHClient(context).getWxUserInfo(resp.getAccess_token(), resp.getOpenid());
                }
            })
            .subscribeOn(Schedulers.newThread())
            .observeOn(AndroidSchedulers.mainThread())
            .subscribe(new Observer<GetWxUserInfoResp>() {
                @Override
                public void onCompleted() {
                }

                @Override
                public void onError(Throwable e) {
                    Logger.v(TAG , "getWXUserInfo onError  msg:" + e.getMessage());
                }

                @Override
                public void onNext(GetWxUserInfoResp resp) {
                    Logger.v(TAG , "getWXUserInfo onNext  msg:" + new Gson().toJson(resp));
                    postEvent(resp);
                }
            });
}
  1. LoginActivity回调得到用户数据

@Override
public void onEventMainThread(Object event) {
    super.onEventMainThread(event);
    if(event instanceof SendAuth.Resp){
        SendAuth.Resp resp = (SendAuth.Resp) event;
        //根据请求WXEntryActivity回调结果请求用户数据
        HttpImpl.getInstance().getWXUserInfo(this, resp.code);
    }
    if(event instanceof GetWxUserInfoResp){
        GetWxUserInfoResp resp = (GetWxUserInfoResp) event;
        if(!TextUtils.isEmpty(resp.getOpenid())){//如果openid不为空,则表示登录成功
            ToastUtil.showShort(this,"微信登录成功!");
            platForm = AppConstants.PLATFORM_WX;
            secret_msg = resp.getUnionid();
            aliasName =  resp.getNickname();
            isBindAccount(secret_msg,platForm);
        }
    }
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值