前言:
1.egret版本5.25
2.微端版本0.1.18
3.接入时间2019/12/30
4.默认你的app已经审核通过,有了自己的appId
本文主要讲解接入egret安卓微端接入微信登录的一些坑吧,主要思路以微信开放平台官方文档为主,根据官方文档,难理解的地方进行讲解。
内容:
1.熟读官方文档,熟读官方文档,每个人都是踩着坑过来的,即使没有这篇文章,你也可以自己弄出来
2.官方登录流程https://developers.weixin.qq.com/doc/oplatform/Mobile_App/WeChat_Login/Development_Guide.htm
(1)通俗的讲,就是客户端要做的事就是为了拿到一个code值,拿到code值之后交给你的服务端。这就是客户端要做的事。
关于之后通过code得到access_token,这是服务端做的。
(2)所以现在我们知道了我们客户端需要做的事了,就是拿到一个code
3.怎么拿到code?
(1)官方安卓接入流程https://developers.weixin.qq.com/doc/oplatform/Mobile_App/Access_Guide/Android.html
(2)总的来说,你要在安卓层写两个函数,官方都给你写好了,一个是调起微信登录的函数,一个是接收微信给你code的函数,当你调起微信,点击同意后,微信会自动回调你的接收code的函数
(3)要写微信的代码,就要微信的第三方包,怎么导入到安卓项目呢,官方文档也说了
但是这里作为一个小白来就是个坑了,你发现一直报错,如果这段代码你复制过去后报错,那你就换种写法,把api换成
complite
dependencies {
compile 'com.tencent.mm.opensdk:wechat-sdk-android-without-mta:+'
}
(4)其他要做的步骤自己看文档,我就不说了
(5)然后就写那两个函数嘛,一个调起微信登录,一个接受微信的回调,两个函数都是文档里复制过来的
(6)调起微信的函数
你把这个函数写到MainActivity这个类中去
//调起微信登录
private void loginToWx() {
//login(SHARE_MEDIA.WEIXIN);
SendAuth.Req req = new SendAuth.Req();
//授权读取用户信息
req.scope = "snsapi_userinfo";
//自定义信息
req.state = "wechat_sdk_demo_test";
//向微信发送请求
api.sendReq(req);
}
它就是new了一个对象嘛,然后通过api发送了过去,但是这个api哪里来的呢,文档也说了,要调用微信的相关接口的时候必须先初始化嘛,那我们就在MainActivity的onCreate的函数中去写如下代码
// 通过WXAPIFactory工厂,获取IWXAPI的实例
api = WXAPIFactory.createWXAPI(this, Constants.APP_ID, true);
// 将应用的appId注册到微信
api.registerApp(Constants.APP_ID);
别忘了在MainActivity类中定义一个变量
// IWXAPI 是第三方app和微信通信的openApi接口
private IWXAPI api;
有的同学会问Constants.APP_ID这个是什么,这个是个静态变量,就是你app的appid,你可以直接写字符串也行,或者你在你的MainActivity下写一个Constants类嘛,类里定义一个静态变量
这样调起微信的就写好了嘛
(7)写一个接收微信回调的函数
据官方文档,我们要在MainActivity文件夹下面新建一个wxapi的文件夹,在这个文件夹中新建一个文档规定的那个类,然后这个类里写上函数就好了,
@Override
public void onResp(BaseResp resp) {
int errorCode = resp.errCode;
String code = "";
switch (errorCode) {
case BaseResp.ErrCode.ERR_OK:
//用户同意
code = ((SendAuth.Resp) resp).code;
break;
case BaseResp.ErrCode.ERR_AUTH_DENIED:
//用户拒绝
break;
case BaseResp.ErrCode.ERR_USER_CANCEL:
//用户取消
break;
default:
break;
}
finish();
}
(8)假如一切正常,你也收到了回调函数,得到了code,那么你怎么将这个code传回到js层呢?
我们只能通过MainActivity中的 launcher 这个对象就发送安卓层的字符串到js层,那你就讲code传到MainActivity中来,再通过
launcher 传到js层就好了
(9)这样就万事大吉了,奥来给