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
-
下载微信登陆sdk
在微信开放平台找到需要下载的sdk版本,下载好后放在proj.android-studio/app/libs目录下 -
打开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' }
-
修改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函数必须是静态的,这样才可以去外部调用
- 去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里面
}
});
}
-
在js中写好接收code的全局函数并使用
调用服务器那边规定好的登陆接口,成功后最好再回调一下到AppActivity.java里面,清空code
到这里就完成了,谢谢浏览!