安卓端接入微信登陆流程

        前段时间,遇到了一个需求涉及到对账号登录体系的修改。由于之前没有相关的经验,在阅读和理解代码的过程中遇到了一些困难。因为涉及到集成多个第三方API(手机号码登陆会接入运营商的API,微信登陆会接入微信相关的API),代码逻辑在不同模块间跳转,对我来说还是有点复杂的,所以现在基本上完成了之后,打算在这里梳理和记录一下,以便未来参考和回顾。这不仅是一个学习的过程,也是对复杂问题解决能力的一次提升。

点击进入官方文档-接入微信登陆准备工作 | 微信开放文档 

在Android端接入微信登录的流程大致如下:

1、注册微信开放平台账号:

在微信开放平台注册开发者账号,并创建一个移动应用,获取相应的AppID和AppSecret。确保申请微信登录功能并通过审核。

2、集成微信SDK:

在项目的build.gradle文件中添加微信SDK的依赖:

dependencies {
 
    //微信
    implementation 'com.tencent.mm.opensdk:wechat-sdk-android-without-mta:+'
}

将微信SDK的jar包复制到项目的libs目录下,并在项目的build.gradle文件中添加依赖。

3、创建微信回调的WXEntryActivity

在发送请求之后,用户是否授权的结果和授权临时code会在这个activity中接收,创建这个activity需要注意下面几点:

Activity路径一定要为:你的包名+/wxapi/WXEntryActivity,并且这个Activity需要实现IWXAPIEventHandler的接口。

exported属性一定要为true!

注册文件AndroidManifest.xml中在权限下方添加安装包查询的请求权限,否则新版本无法检查出是否安装微信,直接拉不起来。

  <activity
            android:name=".wxapi.WXEntryActivity"
            android:exported="true"
            android:label="@string/print_app_name"
            android:launchMode="singleTask"
            android:taskAffinity="com.xbxxhz.box"
            android:theme="@android:style/Theme.Translucent.NoTitleBar" />

在我们的项目中写的比较复杂,项目中的WXEntryActivity是这样的:(还有很多地方没有吃透)


class WXEntryActivity : Activity(), IWXAPIEventHandler {


    override fun onResp(baseResp: BaseResp?) {
        when (baseResp?.type) {
            ConstantsAPI.COMMAND_SENDMESSAGE_TO_WX -> {
                if (baseResp is SendMessageToWX.Resp) {
                   
                        ……

                }
            }
            ConstantsAPI.COMMAND_SENDAUTH -> {
                if (baseResp.errCode == BaseResp.ErrCode.ERR_OK && baseResp is SendAuth.Resp) {

                  ……

            }
            ConstantsAPI.COMMAND_LAUNCH_WX_MINIPROGRAM -> {
                if (baseResp is WXLaunchMiniProgram.Resp) {

                   ……

            }
        }
        finish()
    }
}

这里的baseResp?.type的type类型是API提供的,点进去可以看到有四十几种常量,对应的应该是不同的状态:

在腾讯提供的官方文档中可以看到返回的参数的含义,所以在ErrCode为0时进行处理用户授权成功后的逻辑


 

 在另一篇博主的博客中他是这样写WXEntryActivity的,通过简单的判断ErrCode的值,来处理不同的操作逻辑,也是可以的

public class WXEntryActivity extends Activity  implements IWXAPIEventHandler {
 
    
    @Override
    public void onReq(BaseReq baseReq) {
 
    }
 
    @Override
    public void onResp(BaseResp baseResp) {
        switch (baseResp.errCode){
            case BaseResp.ErrCode.ERR_OK:
                  //拉起微信成功
                break;
            case BaseResp.ErrCode.ERR_AUTH_DENIED:
               
                //("授权出错");
                break;
            case BaseResp.ErrCode.ERR_USER_CANCEL:
               //"用户取消登陆"
                break;
            default:
                break;
        }
    }
    
}

 

4、成功授权

在微信发起授权请求后,用户授权的结果会返回给上面描述的WXEntryActivity,通过判断ErrCode的值,来进行成功授权的逻辑,先看官方文档描述三方接入微信登陆的流程图:

 

 在ErrCode等于0时,我们创建一个广播,并将刚刚返回的code发送出去,这样才能进行下一步操作

    val intent = Intent()
    intent.action = WeChatConfig.WE_CHAT_ACTION_LOGIN
    intent.putExtra(WeChatConfig.WE_CHAT_CODE, baseResp.code)
    LocalBroadcastManager.getInstance(this).sendBroadcast(intent)

 

5、收到Code

在我们发送请求授权的同时会注册一个微信登陆的广播接收器WeChatReceiver(),判断是否事登陆成功的action,成功的话就调用oauthCode方法用传过来的code去调用微信绑定接口

  internal inner class WeChatReceiver : BroadcastReceiver() {
        override fun onReceive(context: Context, intent: Intent) {
            val action = intent.action          
            if (TextUtils.equals(WeChatConfig.WE_CHAT_ACTION_LOGIN, action)) {
                chatReceiver?.let {
                    LocalBroadcastManager.getInstance(this@AccountSafeAct).unregisterReceiver(it)
                }
                chatReceiver = null
                val code = intent.getStringExtra(WeChatConfig.WE_CHAT_CODE)
                if (TextUtils.isEmpty(code)) {
                    tipSad(R.string.personal_setpersonact_bind_error, false)
                    return
                }
                mViewModel.oauthCode(code)
            }
        }
    }

因为本次需求就是处理绑定微信的流程,到这基本上就没有特别的内容了,后面就是用这个code去调用相应的接口,处理网络请求的相关情况,后面流程的具体细节有需求的可以参考下面这篇文章:

Android APP开发集成微信登陆流程(手把手新手版)_android 微信登录-CSDN博客

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值