美文网首页
CocosCreator安卓微信SDK&JS与JAVA交互

CocosCreator安卓微信SDK&JS与JAVA交互

作者: 程序猿TODO | 来源:发表于2020-12-28 19:09 被阅读0次

    Cocos creator & Java 微信登录/微信分享
    (仅能用于cocos creator;cocos2d-js与此有细微差别)
    前期准备
    开发者资质
    release签名 签名打包才能测试

    第一步导入微信SDK build.gradle compile ‘com.tencent.mm.opensdk:wechat-sdk-android-with-mta:+’

    第二步配置AndroidManifest.xml

    第三步创建WXEntryActivity 接收回调,一定要创建在包名下且添加wxapi路径,如下:


    WXEntryActivity 要继承自Activity,且扩展接口IWXAPIEventHandler 如下:


    实现如下方法:

    private static final String TAG = “WXEntryActivity”;
    private static final int TIMELINE_SUPPORTED_VERSION = 0x21020001;
    
    // IWXAPI 是第三方app和微信通信的openapi接口
    private IWXAPI api;
    private static final String APP_ID = "wxc8f32ff40f44a007";
    
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
    
        // 通过WXAPIFactory工厂,获取IWXAPI的实例
        api = WXAPIFactory.createWXAPI(this, WXEntryActivity.APP_ID, false);
        api.handleIntent(getIntent(), this);
    }
    
    @Override
    protected void onNewIntent(Intent intent) {
        super.onNewIntent(intent);
    
        setIntent(intent);
        api.handleIntent(intent, this);
    }
    
    @Override
    public void onReq(BaseReq baseReq) {
    
    }
    
    @Override
    public void onResp(BaseResp baseResp) {
        Log.e( "onResp","" + baseResp.errCode);
    
        // 登录授权
        if (baseResp instanceof SendAuth.Resp) {
    
            SendAuth.Resp sendAuthResp = (SendAuth.Resp) baseResp;
    
            if(sendAuthResp.errCode == BaseResp.ErrCode.ERR_OK)
            {
                String code = ((SendAuth.Resp) baseResp).code;
                Log.i("wxentry","code = " + code);
                PlatformSystem.onWXLoginCode(code);
    
            }
        }
        // 分享 / 发消息
        else if (baseResp instanceof SendMessageToWX.Resp) {
    
            SendMessageToWX.Resp sendMessageResp = (SendMessageToWX.Resp) baseResp;
    
            PlatformSystem.onWXShareCallback(sendMessageResp.errCode, sendMessageResp.openId);
        }
    
        finish();
    }
    

    这里的APP_ID可以随便填写,但是最好填写和项目一致的APP_ID

    第四步创建管理类PlatformSystem 用于JS与JAVA交互,交互教程详见官网,实现代码如下:

    public class PlatformSystem extends AppActivity{
    // 微信登录
    public static void wechatLoginWithAppID(String appid){
    
        if (appid == null || appid.length() == 0) return;
    
        IWXAPI api = WXAPIFactory.createWXAPI(PlatformSystem.getContext(), appid);
        api.registerApp(appid);
    
        SendAuth.Req req = new SendAuth.Req();
        req.scope = "snsapi_userinfo";//获取个人用户信息的权限
        req.state = "1234353645645";//防止攻击 这里最好是一组随机数
        api.sendReq(req);//向微信发送请求
    
    }
    // 微信分享 当前功能分享网页
    public static void wechatShareWithContent(String appid,String url, String title, String content,String scene){
    
        final IWXAPI api = WXAPIFactory.createWXAPI(PlatformSystem.getContext(), appid);
        api.registerApp(appid);
    
        WXWebpageObject webpage = new WXWebpageObject();
        webpage.webpageUrl = url;
    
        WXMediaMessage msg = new WXMediaMessage(webpage);
        msg.title = title;
        msg.description = content;
    
        // 图标
        Bitmap  bitmap = BitmapFactory.decodeResource(PlatformSystem.getContext().getResources(), R.mipmap.ic_launcher);
        Bitmap thumbBmp = Bitmap.createScaledBitmap(bitmap, 80, 80, true);
        bitmap.recycle();
    
        // 位图转数组
        ByteArrayOutputStream stream = new ByteArrayOutputStream();
        thumbBmp.compress(Bitmap.CompressFormat.PNG, 100, stream);
        byte[] byteArray = stream.toByteArray();
    
        msg.thumbData = byteArray;
    
        SendMessageToWX.Req req = new SendMessageToWX.Req();
        req.transaction = buildTransaction("webpage");
        req.message = msg;
        req.scene = Integer.parseInt(scene);
    
        // 调用api接口发送数据到微信
        api.sendReq(req);
    
    }
    
    public static String buildTransaction(String type) {
        return (type == null) ? String.valueOf(System.currentTimeMillis()) : type + System.currentTimeMillis();
    }
    
    // 登录回调
    public static void onWXLoginCode(final String code) {
    // 一定要在GL线程中执行
    // ((Cocos2dxActivity)Cocos2dxActivity.getContext()).runOnGLThread(new Runnable() {
    
    ((Cocos2dxActivity)Cocos2dxActivity.getContext()).runOnGLThread(new Runnable() {
            @Override
            public void run() {
                Cocos2dxJavascriptJavaBridge.evalString("cc.native.wechatLoginCallBack && cc.native.wechatLoginCallBack('" + code + "')  ");
    
                Log.e( "onWXLoginCode","我来了,大宝贝");
    
    // Cocos2dxJavascriptJavaBridge.evalString(“cc.eventManager.dispatchCustomEvent(‘change_color’);”);
    
              }
        });
    }
    
    // 分享回调
    public static void onWXShareCallback(final int errCode, final String openId) {
        // 一定要在GL线程中执行
        ((Cocos2dxActivity)Cocos2dxActivity.getContext()).runOnGLThread(new Runnable() {
            @Override
            public void run() {
                Cocos2dxJavascriptJavaBridge.evalString("cc.native.wechatShareCallBack && cc.native.wechatShareCallBack(" + errCode + ",'" + openId + "')  ");
            }
        });
    }
    

    第五步实现真机/模拟器调试,只需要将debug签名文件配置改成release签名文件配置即可,如下:


    第六步js端创建Native.js,代码如下:


    在需要调用的地方直接cc.native. + 方法名称。

    最后cocos构建,as真机运行,成功。

    其他第三方类库也可以参照此流程接入。

    我们还可以做成as-module更方便。开发的其他应用直接就可以调用类库。

    相关文章

      网友评论

          本文标题:CocosCreator安卓微信SDK&JS与JAVA交互

          本文链接:https://www.haomeiwen.com/subject/japtoktx.html