cocoscreator源码_cocos creator快速集成原生微信登录分享功能源码分享

前言

由于很多nativeApi用户都在咨询sdk相关的问题,所以我把项目里的微信登录分享功能剥离封装了一个wechat-quick,分享给大家使用。欢迎交流拍砖。

wechat-quick简介

wechat-quick是基于cocos creator对原生微信登录和分享功能的一个封装。项目包含2部分,creator模块和原生模块。creator部分是js语言实现,js部分主要功能封装在一个WechatModule.js文件中,主要包含三部分功能:

1.调用oc和java的原生微信登录分享接口;

2.登录和分享的全局回调函数;

3.保存登录token方便下次快捷登录;

原生模块是通过反射和js模块互调。具体登录和分享功能都是实现在原生模块WechatModule.java和WechatModule.mm文件中。

原生模块的全部代码都放在了build-templates。用户可以直接构建编译,自动把大部分代码集成在项目中。

wechat-quick项目目录结构:

wechat-quick有两个目录:

1.assets目录,是js代码,里面有封装了一个WechatModule.js 以及需要定义全局回调的Global.js。全部的接口,登录分享以及原生回调等功能都在WechatModule.js文件内。

2.build-templates文件夹,原生的代码sdk都在这里。构建的时候可以自动拷贝到项目下。也可以选择自行拷贝。

WechatModule.js参考

//初始化接口 需要传入appId和secret

initWx: function (appId, appSecret) {        this.appId = appId;        this.appSecret = appSecret;        if (gg.isAndroid === true) {            return jsb.reflection.callStaticMethod(                wxClassPath,                 "initWx",                 "(Ljava/lang/String;Ljava/lang/String;)V", appId, appSecret);        } else if (gg.isIOS === true) {            return jsb.reflection.callStaticMethod("WeChatModule", "initWx:andSecret:", appId, appSecret);        }        return true;},

//判断是否安装微信

isInstallWx: function() {    if (gg.isAndroid === true) {        return jsb.reflection.callStaticMethod(            wxClassPath,             "isInstallWx",             "()Z");    } else if (gg.isIOS === true) {        return jsb.reflection.callStaticMethod("WeChatModule", "isInstallWx");    }    return true;},

//类内部微信登录调用接口,直接调用sdk

loginWx: function () {    if (gg.isAndroid === true) {        jsb.reflection.callStaticMethod(            wxClassPath,             "loginWx",             "()V");    } else if (gg.isIOS === true) {        jsb.reflection.callStaticMethod("WeChatModule", "loginWx");}},

//分享图片到微信 type = 0 微信好友 1朋友圈

shareImageWx: function (imgPath, type) {    if (gg.isAndroid === true) {        jsb.reflection.callStaticMethod(            wxClassPath,             "shareImageWx",             "(Ljava/lang/String;I)V", imgPath, type);    } else if (gg.isIOS === true) {        jsb.reflection.callStaticMethod("WeChatModule", "shareImageWx:andType:", imgPath, type);}},

//分享文字到微信 type = 0 微信好友 1朋友圈

shareTextWx: function (text, type) {    if (gg.isAndroid === true) {        jsb.reflection.callStaticMethod(            wxClassPath,             "shareTextWx",             "(Ljava/lang/String;I)V", text, type);    } else if (gg.isIOS === true) {        jsb.reflection.callStaticMethod("WeChatModule", "shareTextWx:andType:", text, type);}},

//分享链接到微信 type = 0 微信好友 1朋友圈

shareUrlWx: function (url, title, desc, type) {    if (gg.isAndroid === true) {        jsb.reflection.callStaticMethod(            wxClassPath,             "shareUrlWx",             "(Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;I)V", url, title, desc, type);    } else if (gg.isIOS === true) {        jsb.reflection.callStaticMethod("WeChatModule", "shareUrlWx:andTitle:andDesc:andType:", url, title, desc, type);}},

外部调用登录接口,会先检查本地缓存,如果有缓存就直接调用刷新token接口进行登录。

//微信登录

login: function () {    let strToken = cc.sys.localStorage.getItem(KeyRefreshToken);    var self = this;    if (strToken){        ...        http.get({url:kUrl,timeout:10000},function(err,result) {            ...        }.bind(self));        return true;}    //检查是否安装微信    if (this.isInstallWx() === false) {        gg.fun.showAlert('微信登录失败,请检查是否安装微信');        return false;}    return this.loginWx();},

//微信分享回调接口,oc和java会在原生层回调此函数

onWxShareResultCallback: function (result, msg) { },

//清除记录的缓存

resetWx: function () {    cc.sys.localStorage.removeItem(KeyRefreshToken); },

调用流程:

先调用initWx用来初始化微信的appid和secret。(app运行周期只调用一次)

然后就可以调用login和share等接口。

集成过程中注意:

安卓需要修改一下包名以及代码中包名对应的引用。安卓需要修改下build.gradle 以便能成功下载到微信的sdk,同时还需要修改androidmanifest.xml,配置相关activity以及权限等,具体参考微信开放平台接入指南。

接入指南:

https://developers.weixin.qq.com/doc/oplatform/Mobile_App/Access_Guide/Android.html

ios需要修改AppController.mm以及info.plist。配置相关内容。具体参考微信开放平台接入指南。

接入指南:https://developers.weixin.qq.com/doc/oplatform/Mobile_App/Access_Guide/iOS.html

ios代码中提供的有一份AppController.mm的参考。

同时接入的时候还需要自己实现一个oc和java调用js的函数runJSCode来回调js函数。

java参考:

public static void runJsCode(final String code) {    // 一定要在 GL 线程中执行    app.runOnGLThread(new Runnable() {        @Override        public void run() {            Cocos2dxJavascriptJavaBridge.evalString(code);        }});}

oc参考:

+(void)runJsCode: (NSString *) code{    const char *msg = [code UTF8String];    const char* strMsg = msg;    cocos2d::Application::getInstance()->getScheduler()-        >performFunctionInCocosThread([=](){        se::ScriptEngine::getInstance()->evalString(strMsg);    });}

最后

代码已经全部上传至:https://gitee.com/creator-li-yumi/wechat-quick

也可以加入下方qq群或者关注公众号获取代码,代码在群文件中。

如果您在使用过程中有什么疑问可以加qq:1101502561咨询。或者加入群:1093612606

3955dc63c2bfd83c9e2e73658f4d0b6c.png

也欢迎您关注微信公众号:creator小玉米

4632d46e3da752689509a1f92ea79bc9.png

公众号会不定期发布各种编程经验。

也可以点击下方原文获取代码源码。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值