Cocos Creator通过Android Studio接入微信SDK登录和分享

第一步:在App下的build.gradle中的dependencies中添加一句:

implementation 'com.tencent.mm.opensdk:wechat-sdk-android-with-mta:+'

记得添加混淆,不然我在分享的时候可以拉起分享弹窗但是选择好友后就是分享不出去,后来发现是因为混淆的原因,在proguard-rules文件中加入:

-keep class com.tencent.mm.opensdk.** {
    *;
}

-keep class com.tencent.wxop.** {
    *;
}

-keep class com.tencent.mm.sdk.** {
    *;
}

因为我的项目在creator中编译过程中会有:某些输入文件使用或覆盖了已过时的 API...的报红,所以在这里写一下解决方法:内层gradle最外面添加:

allprojects { gradle.projectsEvaluated { tasks.withType(JavaCompile) { options.compilerArgs << "-Xlint:unchecked" << "-Xlint:deprecation" } }}

然后在AppActivity脚本中写一个注册方法:

private void registerToWX(){
    mWXapi= WXAPIFactory.createWXAPI(this,WX_APP_ID,false);
    mWXapi.registerApp(WX_APP_ID);
}

在onCreate方法中调用一下;因为要在creator中按授权按钮授权,所以要写一个接收creator事件然后执行登录的方法:

public static  void StartAuthReq(){
    Log.v("******","收到cocos授权请求");
    final SendAuth.Req req=new SendAuth.Req();
    req.scope="snsapi_userinfo";
    req.state="wx_login";
    mWXapi.sendReq(req);
}

没有参数,cocos中调用的方式: 

jsb.reflection.callStaticMethod("org/cocos2dx/javascript/AppActivity","StartAuthReq","()V");

AndroidManifest中配置一下权限:

<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
<uses-permission android:name="android.permission.ACCESS_WIFI_STATE" />
<uses-permission android:name="android.permission.READ_PHONE_STATE" />
<uses-permission android:name="android.permission.INTERNET" />

<!-- 推荐的权限 -->
<!-- 添加如下权限,以便使用更多的第三方SDK和更精准的统计数据 -->
<uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" />
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />
<uses-permission android:name="android.permission.CHANGE_WIFI_STATE" />
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE"/>

这时已经可以拉起授权界面了,接下来要可以接收授权的信息,首先要先确定在creator中构建时候的包名:xx.xx.xx

然后在项目src处右击:new>package,在弹出的窗口直接填上包名:xx.xx.xx,然后在这个新的package上右击,新建一个package叫:wxapi(固定的),然后在wxapi下new>javaClass,新建一个脚本名字叫:WXEntryActivity(固定的),然后把这个新类的class改成:

public class WXEntryActivity extends Activity implements IWXAPIEventHandler {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        AppActivity.mWXapi.handleIntent(getIntent(),this);
    }

    @Override
    public void onReq(BaseReq baseReq) {

    }

    @Override
    public void onResp(BaseResp baseResp) {
        Log.v("******", "onResp AS 微信回复应用: " + baseResp.errStr);
        Log.v("******", "onResp: 错误码" + baseResp.errCode);
        //ERR_OK = 0(用户同意) ERR_AUTH_DENIED = -4(用户拒绝授权) ERR_USER_CANCEL = -2(用户取消)
        switch (baseResp.errCode) {
            case BaseResp.ErrCode.ERR_AUTH_DENIED:

                finish();
                break;
            case BaseResp.ErrCode.ERR_USER_CANCEL:

                finish();
                break;
            case BaseResp.ErrCode.ERR_OK:
                //用户同意授权。
                final String code = ((SendAuth.Resp) baseResp).code;
                Log.v("******成功拿到了CODE:", "code: " + code);

                new Thread(new Runnable() {
                    @Override
                    public void run() {
                        runOnGLThread(new Runnable() {
                            @Override
                            public void run() {
                                final String jvCallCode =String.format("cc.AndroidResp(\"%s\");", code);
                                Cocos2dxJavascriptJavaBridge.evalString(jvCallCode);
                            }
                        });

                    }
                }).start();
                break;
        }
        finish();
    }
}

这里首先是要在onCreate中加入一句:

AppActivity.mWXapi.handleIntent(getIntent(),this);

还要实现IWXAPIEventHandler的两个接口,实际上这个时候已经可以通过打印的地方获取到code了,然后我又因为需要把code传回creator上传给服务器,所以要写java给js的通讯:

new Thread(new Runnable() {
    @Override
    public void run() {
        runOnGLThread(new Runnable() {
            @Override
            public void run() {
                final String jvCallCode =String.format("cc.AndroidResp(\"%s\");", code);
                Cocos2dxJavascriptJavaBridge.evalString(jvCallCode);
            }
        });
    }
}).start();

要写runOnGLThread,不然直接写代码的话调用完会闪退,然后creator那边接收的代码是:

cc.AndroidResp=function(asrespDt=null){

    if(asrespDt){

        console.log("******,这里是安卓回调中心,参数是:",asrespDt);      

    }else {

        console.log("******,这里是安卓回调中心,没有参数");  

    }}

 

再在androidManifest中配置一下后面新建的Activity:

<activity
    android:name=".wxapi.WXEntryActivity"
    android:label="@string/app_name"
    android:theme="@android:style/Theme.Translucent.NoTitleBar"
    android:exported="true"
    android:taskAffinity="net.sourceforge.simcpux"
    android:launchMode="singleTask">

    ></activity>

至此,微信授权登录应该是OK的了,如果签名不对的话就百度搜一下获取签名的方式和微信开发者网站配置一下这个app的签名。点击授权但是一直没反应,studio又可以收到消息的情况下,检查Appid是否正确,

 

 

接下来是分享,我这里暂时需求是分享小程序,因为要从creator带参数过来,所以studio函数有点不同:

public  static   void  ShareMgr(int type,int sharePos,String shareingId){
    if(type==1){
        WXMiniProgramObject miniProgramObj = new WXMiniProgramObject();
        miniProgramObj.webpageUrl = "xxxxx"; // 兼容低版本的网页链接
        miniProgramObj.miniprogramType = WXMiniProgramObject.MINIPTOGRAM_TYPE_RELEASE;// 正式版:0,测试版:1,体验版:2
        miniProgramObj.userName = "xxxx";     // 小程序原始id
        miniProgramObj.path = "pages/index/index?"+"shareId="+shareingId+"&sharePos="+sharePos;            //小程序页面路径;对于小游戏,可以只传入 query 部分,来实现传参效果,如:传入 "?foo=bar"
        WXMediaMessage msg = new WXMediaMessage(miniProgramObj);
        msg.title = "xxx";                    // 小程序消息title
        msg.description = "xxx";               // 小程序消息desc

        Bitmap bmp = BitmapFactory.decodeResource(getContext().getResources(), R.drawable.icon);
        Bitmap thumbBmp=Bitmap.createScaledBitmap(bmp,100,100,true);
        msg.thumbData= Util.bmpToByteArray(thumbBmp,true);  // 小程序消息封面图片,小于128k

        SendMessageToWX.Req req = new SendMessageToWX.Req();
        req.transaction = buildTransaction("miniProgram");
        req.message = msg;
        req.scene = SendMessageToWX.Req.WXSceneSession;  // 目前只支持会话
        mWXapi.sendReq(req);
    }else if(type==2){
        WXWebpageObject webpageObject = new WXWebpageObject();
        webpageObject.webpageUrl = "https://orchard.shuyouai.com";
        WXMediaMessage msg = new WXMediaMessage(webpageObject);
        msg.title = "你好,sss";
        msg.description = "这是测试的运用应用";
        Bitmap thumb = BitmapFactory.decodeResource(getContext().getResources(), R.mipmap.ic_launcher);
        msg.thumbData = bmpToByteArray(thumb, true);
        SendMessageToWX.Req req = new SendMessageToWX.Req();
        req.transaction = buildTransaction("Req");
        req.message = msg;
        switch (type) {
            case 1:
                req.scene = SendMessageToWX.Req.WXSceneSession;
                break;
            case 2:
                req.scene = SendMessageToWX.Req.WXSceneSession;
                break;
        }
        mWXapi.sendReq(req);
    }

}
这里还需要两个方法:
private static String buildTransaction(final String type) {
    return (type == null) ? String.valueOf(System.currentTimeMillis()) : type + System.currentTimeMillis();
}

新建一个class叫Util,里面放入:

public static byte[] bmpToByteArray(final Bitmap bmp, final boolean needRecycle) {
    ByteArrayOutputStream output = new ByteArrayOutputStream();
    bmp.compress(Bitmap.CompressFormat.PNG, 100, output);
    if (needRecycle) {
        bmp.recycle();
    }
    byte[] result = output.toByteArray();
    try {
        output.close();
    } catch (Exception e) {
        e.printStackTrace();
    }
    return result;
},

这里分享的图片是在res文件夹下新建一个drawable(图片是固定的这个),然后在里面放上图片,读取就R.drawable.xxx

注意还有creator调用Android带参数的写法:

 jsb.reflection.callStaticMethod("org/cocos2dx/javascript/AppActivity","StartAuthReq","(IILjava/lang/String;)V",type,sharePos,shareingId);

暂时就这么多,不够的再补充

 

  • 2
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
Cocos Creator是一款流行的游戏开发引擎,它提供了方便的工具和功能,可以帮助开发者在多个平台上创建游戏,包括微信小游戏平台。 接入微信小游戏的步骤如下: 1. 准备工作: - 确保你已经安装并配置好了Cocos Creator开发环境。 - 在微信公众平台上注册一个小程序账号,并获取到小程序的AppID。 2. 创建项目: - 打开Cocos Creator,选择新建项目,并选择微信小游戏项目模板。 - 配置项目信息,包括项目名称、路径等。 3. 项目设置: - 在项目设置中,选择微信小游戏平台,并填写小程序的AppID。 - 根据需要配置其他相关设置,如屏幕适配、引擎版本等。 4. 开发游戏: - 使用Cocos Creator提供的编辑器和工具进行游戏开发。 - 可以使用JavaScript或TypeScript编写代码,创建场景、精灵、动画等。 5. 调试与预览: - 在Cocos Creator中,可以选择微信小游戏平台进行调试和预览。 - 在微信开发者工具中,导入Cocos Creator生成的小游戏项目,并进行调试、预览和测试。 6. 发布与上线: - 在Cocos Creator中,选择发布小游戏,并按照提示进行配置和打包。 - 将生成的小游戏包上传至微信开放平台,并进行审核和发布。 以上是接入微信小游戏的基本步骤,具体的细节和操作步骤可以参考Cocos Creator的官方文档和微信小游戏的开发文档,以获得更详细的指导。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值