CocosCreator系列——接入原生微信登陆功能
先看一下微信官方的接入文档吧,不得不说,我真的怀疑微信的文档肯定不是技术写的,简直乱得一批,看的人头昏脑胀,主要看一下这个链接的接入流程就行了,不要看接入的技术文档,跳到坑里怕是就爬不上来了(小吐槽一波微信),好了,吐槽就到这里,接下来该真枪真刀的实干一番了。
前期准备工作:准备好在微信开放平台上申请的AppID和AppSecret
1.直接上快车下载微信sdk吧,官网上的打开一个下载链接简直是蜗牛拖着乌龟爬的速度。
2.新建一个hello world工程,来一个微信登陆的按钮,然后绑定拉起微信登陆的代码
onWeiXinLoginClick() {
if (cc.sys.os == cc.sys.OS_ANDROID) {
jsb.reflection.callStaticMethod("org/cocos2dx/javascript/AppActivity", "login", "()V");
}
},
3.打开构建好的工程,在NewProject01\build\jsb-link\frameworks\runtime-src\proj.android-studio\app此目录下新建一个lib文件夹,把下载的微信sdk拖入
4.用Android studio工具 import工程文件,AppActivity中初始化个参数
private static final String APP_ID = "你申请的appid";
private static IWXAPI api;
public static AppActivity app = null;
5.在onCreate()方法里面注册
app = this;
// 通过WXAPIFactory工厂,获取IWXAPI的实例
api = WXAPIFactory.createWXAPI(this, APP_ID, true);
// 将应用的appId注册到微信
api.registerApp(APP_ID);
Log.e("注册成功:::","111111111111111111111");
6.js客户端点击微信登陆调用的方法
public static void login(){
SendAuth.Req req = new SendAuth.Req();
req.scope = "snsapi_userinfo";
req.state = "wechat_sdk_aifuns";
api.sendReq(req);
Log.e("登陆成功:::","111111111111111111111");
}
7.下面的两个方法等下要在微信回调类里面用要用
public static AppActivity getInstance(){
return app;
}
public static IWXAPI GetAPI() {
return api;
}
8.NewProject01\build\jsb-link\frameworks\runtime-src\proj.android-studio\app\src目录下新建com.xxx.xxx.wxapi路径,注意:这里有个坑,com.xxx.xxx对应的是Android studio工程build.gradle中对应的applicationId,不然会出现登陆微信成功以后收不到回调的问题,然后再com.xxx.xxx.wxapi目录下新建WXEntryActivity.java,然后编辑代码,下面奉上这个类的全部代码
package com.XXX.XXX.wxapi;
import android.app.Activity;
import android.content.Intent;
import android.os.Bundle;
import android.util.Log;
import com.tencent.mm.opensdk.constants.ConstantsAPI;
import com.tencent.mm.opensdk.modelbase.BaseReq;
import com.tencent.mm.opensdk.modelbase.BaseResp;
import com.tencent.mm.opensdk.modelmsg.SendAuth;
import com.tencent.mm.opensdk.openapi.IWXAPIEventHandler;
import org.cocos2dx.javascript.AppActivity;
public class WXEntryActivity extends Activity implements IWXAPIEventHandler {
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
AppActivity.getInstance().GetAPI().handleIntent(getIntent(), this);
}
@Override
protected void onNewIntent(Intent intent) {
super.onNewIntent(intent);
setIntent(intent);
AppActivity.getInstance().GetAPI().handleIntent(getIntent(), this);
finish();
}
@Override
public void onReq(BaseReq req) {
// TODO Auto-generated method stub
Log.e("WeiChatLogin", "onReq++++++++++++");
finish();
}
@Override
//微信登陆成功后,会回调此方法
public void onResp(BaseResp resp) {
switch (resp.getType()) {
case ConstantsAPI.COMMAND_SENDAUTH:
final SendAuth.Resp authResp = (SendAuth.Resp) resp;
//在这里处理的逻辑就可以了
Log.e("code",authResp.code);
Log.e("state",authResp.state);
Log.isLoggable("errCode",authResp.errCode);
break;
case ConstantsAPI.COMMAND_SENDMESSAGE_TO_WX: // 分享给好友、朋友圈
case ConstantsAPI.COMMAND_PAY_BY_WX:
break;
}
finish();
}
}
好了,其实只要到这一步,拿到回调以后,跟服务器调一下就可以了,剩下的工作就是水到渠成的事了,很简单的一个东西,不知道微信的文档都写的什么东西,(手动头大)。
这里登陆的时候还有一个坑,可能会提示签名不一致,看我的另一篇文档吧。
确定不粉我一下么 ( ̄▽ ̄)"