1. 程式人生 > 其它 >cocoscreator原始碼_cocos creator快速整合原生微信登入分享功能原始碼分享

cocoscreator原始碼_cocos creator快速整合原生微信登入分享功能原始碼分享

技術標籤:cocoscreator原始碼百度分享成功回撥

前言

由於很多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

公眾號會不定期釋出各種程式設計經驗。

也可以點選下方原文獲取程式碼原始碼。