Cocos Creator iOS 互相調(diào)用看我的就夠了

話不多說直接上代碼
1
原生分享帶參數(shù)沒有返回值
js這么寫

function ThirdPartyShareImg(Path, isLine) {
    console.log("WXShareTex "+Path )
    if(cc.sys.isNative){
        if(cc.sys.OS_IOS == cc.sys.os){
            jsb.reflection.callStaticMethod("AppController","WXShareTex:IsTimeLine:",Path,isLine);
        }else{
            jsb.reflection.callStaticMethod('org/cocos2dx/javascript/AppActivity', 'WXShareTex',
                "(Ljava/lang/String;Ljava/lang/String;)V",
                Path, isLine);
        }
    }
}

iOS 這么寫

#pragma mark - ----------------- 微信分享圖片 --------------------
+(void)WXShareTex:(NSString*)content_link IsTimeLine:(NSNumber *)IsTimeLine{
    
    if (IsTimeLine.intValue == 1) {
        //1.創(chuàng)建多媒體消息結(jié)構(gòu)體
        WXMediaMessage *mediaMsg = [WXMediaMessage message];
        //2.創(chuàng)建多媒體消息中包含的圖片數(shù)據(jù)對象
        WXImageObject *imgObj = [WXImageObject object];
        //圖片真實數(shù)據(jù)
        
        NSString *imageString = content_link;
        
        if([content_link hasPrefix:@"http"])
        {//判斷字符串是否以B字符開始
            NSLog(@"開頭為字母B");
            //1.創(chuàng)建多媒體消息結(jié)構(gòu)體
            WXMediaMessage *mediaMsg = [WXMediaMessage message];
            //2.創(chuàng)建多媒體消息中包含的圖片數(shù)據(jù)對象
            WXImageObject *imgObj = [WXImageObject object];
            //圖片真實數(shù)據(jù)
            NSURL *url=[NSURL URLWithString:content_link];
            imgObj.imageData = [NSData dataWithContentsOfURL:url];
            //多媒體數(shù)據(jù)對象
            mediaMsg.mediaObject = imgObj;
            
            //3.創(chuàng)建發(fā)送消息至微信終端程序的消息結(jié)構(gòu)體
            SendMessageToWXReq *req = [[SendMessageToWXReq alloc] init];
            //多媒體消息的內(nèi)容
            req.message = mediaMsg;
            //指定為發(fā)送多媒體消息(不能同時發(fā)送文本和多媒體消息琼锋,兩者只能選其一)
            req.bText = NO;
            //指定發(fā)送到會話(聊天界面)
            req.scene = WXSceneTimeline;
            //發(fā)送請求到微信,等待微信返回onResp
            [WXApi sendReq:req];

是不是很簡單
2 沒參數(shù)有返回值
js

function ThirdPartyGetBattery() {
    var pLv = 1;
    if(cc.sys.OS_IOS == cc.sys.os){
        pLv = jsb.reflection.callStaticMethod('AppController',"GetBatteryLv");
    }else{
        pLv = jsb.reflection.callStaticMethod('org/cocos2dx/javascript/AppActivity',"GetBatteryLv","()Ljava/lang/String;");
    }
    return pLv;
}

返回值是NSNumber類型
iOS 這么寫

#pragma mark - ----------------- 電池 --------------------

+(NSNumber *)GetBatteryLv{
    
    [UIDevice currentDevice].batteryMonitoringEnabled = YES;
    double deviceLevel = [UIDevice currentDevice].batteryLevel;
    NSString *str = [NSString stringWithFormat:@"%.2f", deviceLevel];
    NSLog(@"+++++++++++++++++++++++%@", str);
    return @([str integerValue]);

}

3 沒有參數(shù)沒有返回值
JS

function ThirdPartyGetAddress() {
    console.log('ThirdPartyGetAddress 走了');
    if (cc.sys.OS_IOS == cc.sys.os) {
        jsb.reflection.callStaticMethod("AppController","getAddress");
    } else {
        jsb.reflection.callStaticMethod('org/cocos2dx/javascript/AppActivity', 'getAddress',"()V");
    }
}

iOS

#pragma mark - ----------------- 定位 --------------------
+(void)getAddress{
    
    NSLog(@"123123123");

    AMapLocationManager *locationManager = [[AMapLocationManager alloc] init];
    
    [locationManager setDelegate:self];
    
    [locationManager setDesiredAccuracy:kCLLocationAccuracyHundredMeters];
    
    [locationManager setLocationTimeout:6];
    
    [locationManager setReGeocodeTimeout:3];
}

以上都是JS 調(diào)OC 方法, 下面介紹OC 調(diào)用JS 方法
微信登錄為例

JS 寫法


    onWXCode:function (code) {
        console.log("onWXCode "+code)
        if(code == ''){
            console.log("onWXCode 1")
            this.m_WXLoginBt.interactable=true;
        }else{
            console.log("onWXCode 2" + code);
            code = encodeURI(code);
            var webUrl = WEB_HEAD + LOGIN_SERVER_IP + '/UserFunc.php?&GetMark=14&code=' + code;
            HttpUtils.getInstance().httpGets(webUrl, function (data) {  
                console.log("onWXCode 3")
                var Login = JSON.parse(data); 
                if(Login.errcode != null) return this.ShowAlert("ErrCode:" + Login.errcode);
                this.LoginAccount(Login.Accounts ,Login.LogonPass);
            }.bind(this));
            console.log("onWXCode 4")
        }
    },

OC 因為OC 的字符串跟C++不一樣需要進行一下轉(zhuǎn)碼, 而JS 要的字符串格式是json類型的字符串, 所以O(shè)C 這邊需要對字符串進行拼接(當(dāng)然還有其他方法生成json字符串).

NSLog(@"%@", mutStr);
            //            NSString *str = [NSString stringWithFormat:@"{\"openid\":\"%@\",\"nickname\":\"%@\",\"sex\":\"%@\",\"headimgurl\":\"%@\"}",resp.openid,resp.name,resp.unionGender,resp.iconurl];
            
            NSString *str = [NSString stringWithFormat:@"{\"headimgurl\":\"%@\",\"nickname\":\"%@\",\"sex\":\"%@\",\"openid\":\"%@\"}",resp.iconurl,resp.name,resp.unionGender,resp.openid];
            
            
            NSLog(@"%@", str);
            //            std::string strRet1 = "{}";
//            NSString * encodingString = [str stringByAddingPercentEscapesUsingEncoding:NSUTF8StringEncoding];
            std::string strRet1 = [str UTF8String];
            
            std::string strRet = "onWXCode";
            
            NSLog(@"QQQQQQQQQ:::::%s",strRet1.c_str());
            std::string jsCallStr = cocos2d::StringUtils::format("CallLoginFunc(\"%s\",'%s');", strRet.c_str(),strRet1.c_str());

            NSLog(@"~~~~~~~~~~~~~%s",jsCallStr.c_str());
            
            se::Value *ret = new se::Value();
            se::ScriptEngine::getInstance()->evalString(jsCallStr.c_str() , -1 , ret);

轉(zhuǎn)json字符串時候有幾個坑, 因為OC 的字符串中不能包含""的 在有""的地方需要加\轉(zhuǎn)義, 但是給JS 發(fā)過去的字符串又因為多幾個"'而獲取不到, 所以在后面C++拼接的時候選擇的是''單引號, 這樣完美的避開了OC雙引號的問題. 當(dāng)然了因為JS 那邊不是我寫的, 其實最好的辦法是JS 那邊不是接一個參數(shù), 而是多個參數(shù), 這樣就不會出現(xiàn)雙引號的問題. 這個問題坑了我一下午

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末贷揽,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌付枫,老刑警劉巖,帶你破解...
    沈念sama閱讀 216,372評論 6 498
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異,居然都是意外死亡猜年,警方通過查閱死者的電腦和手機,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,368評論 3 392
  • 文/潘曉璐 我一進店門疾忍,熙熙樓的掌柜王于貴愁眉苦臉地迎上來乔外,“玉大人,你說我怎么就攤上這事一罩⊙钣祝” “怎么了?”我有些...
    開封第一講書人閱讀 162,415評論 0 353
  • 文/不壞的土叔 我叫張陵聂渊,是天一觀的道長差购。 經(jīng)常有香客問我,道長汉嗽,這世上最難降的妖魔是什么欲逃? 我笑而不...
    開封第一講書人閱讀 58,157評論 1 292
  • 正文 為了忘掉前任,我火速辦了婚禮饼暑,結(jié)果婚禮上稳析,老公的妹妹穿的比我還像新娘。我一直安慰自己撵孤,他們只是感情好,可當(dāng)我...
    茶點故事閱讀 67,171評論 6 388
  • 文/花漫 我一把揭開白布竭望。 她就那樣靜靜地躺著邪码,像睡著了一般。 火紅的嫁衣襯著肌膚如雪咬清。 梳的紋絲不亂的頭發(fā)上闭专,一...
    開封第一講書人閱讀 51,125評論 1 297
  • 那天,我揣著相機與錄音旧烧,去河邊找鬼影钉。 笑死,一個胖子當(dāng)著我的面吹牛掘剪,可吹牛的內(nèi)容都是我干的平委。 我是一名探鬼主播,決...
    沈念sama閱讀 40,028評論 3 417
  • 文/蒼蘭香墨 我猛地睜開眼夺谁,長吁一口氣:“原來是場噩夢啊……” “哼廉赔!你這毒婦竟也來了肉微?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 38,887評論 0 274
  • 序言:老撾萬榮一對情侶失蹤蜡塌,失蹤者是張志新(化名)和其女友劉穎碉纳,沒想到半個月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體馏艾,經(jīng)...
    沈念sama閱讀 45,310評論 1 310
  • 正文 獨居荒郊野嶺守林人離奇死亡劳曹,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,533評論 2 332
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了琅摩。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片铁孵。...
    茶點故事閱讀 39,690評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖迫吐,靈堂內(nèi)的尸體忽然破棺而出库菲,到底是詐尸還是另有隱情,我是刑警寧澤志膀,帶...
    沈念sama閱讀 35,411評論 5 343
  • 正文 年R本政府宣布熙宇,位于F島的核電站,受9級特大地震影響溉浙,放射性物質(zhì)發(fā)生泄漏烫止。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 41,004評論 3 325
  • 文/蒙蒙 一戳稽、第九天 我趴在偏房一處隱蔽的房頂上張望馆蠕。 院中可真熱鬧,春花似錦惊奇、人聲如沸互躬。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,659評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽吼渡。三九已至,卻和暖如春乓序,著一層夾襖步出監(jiān)牢的瞬間寺酪,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 32,812評論 1 268
  • 我被黑心中介騙來泰國打工替劈, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留寄雀,地道東北人。 一個月前我還...
    沈念sama閱讀 47,693評論 2 368
  • 正文 我出身青樓陨献,卻偏偏與公主長得像盒犹,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 44,577評論 2 353

推薦閱讀更多精彩內(nèi)容

  • 1阿趁、通過CocoaPods安裝項目名稱項目信息 AFNetworking網(wǎng)絡(luò)請求組件 FMDB本地數(shù)據(jù)庫組件 SD...
    陽明先生_X自主閱讀 15,979評論 3 119
  • 我以為不會有的 像是夢醒了般煎熬 也像熟睡了般平靜 我也沒搞懂它 如是說 別的男人 犯病會不會犯的如此厲害 聽人說...
    RookieUncle閱讀 275評論 0 0
  • 該評教系統(tǒng)的用戶類型分為管理員脖阵、督導(dǎo)專家皂股、教師、學(xué)生命黔。 ①管理員應(yīng)該先分別設(shè)定評教和評學(xué)的時間段呜呐。 ②教師、督導(dǎo)專...
    1f3dde1ed212閱讀 239評論 0 1