cocos creator接入微信登陆sdk android篇

cocos creator接入微信登陆sdk

背景
项目引擎使用cocos creator,使用android studio集成开发工具,在开发之前先做好准备工作

  • 微信开放平台上创建好移动应用,拿到AppID和AppSecret

  • 在cocos creator中引入创建好的密匙库,并取消调试模式
    使用android studio生成的密匙库是jks的,貌似用不了(不知道是方式不对还是怎么的),我是在网上找的其他方法生成的keystore
    在这里插入图片描述

  • 在proj.android-studio安卓项目中与AppActivity.java平级的位置创建好wxapi文件夹,并创建WXEntryActivity.java文件(文件名一定要一样), 我的是这样写的
    目录结构:
    在这里插入图片描述在这里插入图片描述
    WXEntryActivity.java代码

package org.cocos2dx.javascript.wxapi;
import android.app.Activity;
import android.content.Intent;
import android.os.Bundle;

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.IWXAPI;
import com.tencent.mm.opensdk.openapi.IWXAPIEventHandler;
import com.tencent.mm.opensdk.openapi.WXAPIFactory;

import org.cocos2dx.javascript.AppActivity;

public class WXEntryActivity extends Activity implements IWXAPIEventHandler {
    private static final String app_id = "你的appID";
    //微信appId
    private IWXAPI api;
    //微信发送的请求将回调该方法
    private void regToWx(){
        api = WXAPIFactory.createWXAPI(this,app_id,true);
        api.registerApp(app_id);
        System.out.println("###############");
        System.out.println("In wxEntryActivity api is " + api);
    }
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        System.out.println("enter the wxEntryActivity");
        regToWx();
        //这句话很关键
        try {
            api.handleIntent(getIntent(), this);
			System.out.println("Enter the handleIntent");
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
    @Override
    protected void onNewIntent(Intent intent) {
        super.onNewIntent(intent);
        System.out.println("intent is " + intent);
        setIntent(intent);
        api.handleIntent(intent, this);
    }
    @Override
    public void onReq(BaseReq baseReq) {

    }
    //向微信发送的请求的响应信息回调该方法
 
    @Override
    public void onResp(BaseResp baseResp) {
    }
       
}

  • 配置AndroidManifest.xml,name一定不要写错了
    在这里插入图片描述
    准备工作弄好之后,下面开始接入sdk
  1. 下载微信登陆sdk
    微信开放平台找到需要下载的sdk版本,下载好后放在proj.android-studio/app/libs目录下
    在这里插入图片描述

  2. 打开build.gradle文件,注意是proj.android-studio/app目录下,在dependencies中加下面的代码

    dependencies {
        compile fileTree(dir: 'libs', include: ['*.jar'])
        compile project(':libcocos2dx')
    	compile 'com.tencent.mm.opensdk:wechat-sdk-android-with-mta:1.3.4'
    }
    
  3. 修改AppActivity.java
    首先声明好需要用到的变量

    	private static String appId = "你的appID,一定要填正确";
        //public static AppActivity app;
        public static IWXAPI api;
        //微信登录所必须的code
        public static String code;
        //是否获得code
        public static boolean isGetCode = false;
        private static AppActivity app = null;
    

    在onCreate中添加以下代码

     	```
     	 //初始化api
     	  api = WXAPIFactory.createWXAPI(this,appId);
     	  //将应用的appid注册到微信
     	  api.registerApp(appId);
     	  app = this;
     	```
    

    接下来便可以写函数调用了

     ```
      //微信登录接口
         public static void wxLogin(){
             System.out.println("Enter the wxLogin");
             requestCode();      //向微信服务器请求code
         }
         //获取微信登录第一步的code
         public static void requestCode(){
             final SendAuth.Req req = new SendAuth.Req();
             req.scope = "snsapi_userinfo";
             req.state = "wechat_sdk_demo_test";
             System.out.println("req is " + req);
             //利用微信api发送请求
             api.sendReq(req);
             System.out.println("发送请求完毕");
             System.out.println("In AppActivity api is " + api);
     
         }
     ```
    

需要注意的是,wxLogin函数必须是静态的,这样才可以去外部调用

  1. 去cocos登陆页面调用微信登陆

在这里插入图片描述
5. 调用成功后返回值
微信调用成功后,会自动回调到WXEntryActivity.java里面,我们在onResp里面取到返回值,我这个项目里需要的只是code,拿到code之后传值给服务器那边验证登陆(这种做法比较安全一点),所以我把返回到AppActivity的callJsFunction方法里面
在这里插入图片描述
在AppActivity.java里面写好接收参数,并调用到js中

public static void callJsFunction(final String value) {
        System.out.println("Enter the callJsFunction" + value);
        final String jsCallStr = String.format("cc.NativeJsFuc(\"%s\");", value);
        app.runOnGLThread(new Runnable() {
            @Override
            public void run() {
            	code=value;
                Cocos2dxJavascriptJavaBridge.evalString(jsCallStr);//直接调用到js里面
            }
        });
    }
  1. 在js中写好接收code的全局函数并使用
    在这里插入图片描述
    在这里插入图片描述
    调用服务器那边规定好的登陆接口,成功后最好再回调一下到AppActivity.java里面,清空code
    在这里插入图片描述
    在这里插入图片描述
    到这里就完成了,谢谢浏览!
  • 8
    点赞
  • 25
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值