前言
由于很多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
也欢迎您关注微信公众号:creator小玉米
公众号会不定期发布各种编程经验。
也可以点击下方原文获取代码源码。