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) {
}
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
配置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'
}
1
2
3
4
5
修改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;
1
2
3
4
5
6
7
8
在onCreate中添加以下代码
```
//初始化api
api = WXAPIFactory.createWXAPI(this,appId);
//将应用的appid注册到微信
api.registerApp(appId);
app = this;
```
1
2
3
4
5
6
7
接下来便可以写函数调用了
```
//微信登录接口
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);
}
```
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
需要注意的是,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里面
}
});
}
1
2
3
4
5
6
7
8
9
10
11
在js中写好接收code的全局函数并使用
调用服务器那边规定好的登陆接口,成功后最好再回调一下到AppActivity.java里面,清空code
到这里就完成了,谢谢浏览!
网友评论