CocosCreator系列——接入原生微信登陆功能

CocosCreator系列——接入原生微信登陆功能

先看一下微信官方的接入文档吧,不得不说,我真的怀疑微信的文档肯定不是技术写的,简直乱得一批,看的人头昏脑胀,主要看一下这个链接的接入流程就行了,不要看接入的技术文档,跳到坑里怕是就爬不上来了(小吐槽一波微信),好了,吐槽就到这里,接下来该真枪真刀的实干一番了。
前期准备工作:准备好在微信开放平台上申请的AppIDAppSecret
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();
    }
}

好了,其实只要到这一步,拿到回调以后,跟服务器调一下就可以了,剩下的工作就是水到渠成的事了,很简单的一个东西,不知道微信的文档都写的什么东西,(手动头大)。
这里登陆的时候还有一个坑,可能会提示签名不一致,看我的另一篇文档吧

确定不粉我一下么 ( ̄▽ ̄)"

猜你喜欢

转载自blog.csdn.net/liupengxunzhuanshu/article/details/105997969