cordova集成說明--ios

添加CordovaLib

在cordova的安裝目錄下可以找到CordovaLib庫,如果找不到的話固逗,可以通過新建一個demo cordova工程文件并添加ios平臺然后在該demo工程中找到該CordovaLib庫区拳。
將CordovaLib拷貝到Xcode中拘领,然后

  1. 將工程中的File Inspector面板中的Relative to Group改為Location
  2. Project Navigator面板中的** TargetBuild Settings**添加
-force_load -ObjC
  1. 點擊Build Phases 中的Link Binaries with Libraries的+,添加下列frameworks
AssetsLibrary.framework
CoreLocation.framework
CoreGraphics.framework
MobileCoreServices.framework
  1. Target Dependencies面板中添加CordovaLib
  2. 再在Link Binaries with Libraries面板中添加libCordova.a
  3. 將Xcode Preferences → Locations → Derived Data → Advanced設(shè)置成Unique
  4. 最后在Target面板中找到Build Settings然后在Header Search Paths.添加下面的值
"$(TARGET_BUILD_DIR)/usr/local/lib/include"
"$(OBJROOT)/UninstalledProducts/include"
"$(OBJROOT)/UninstalledProducts/$(PLATFORM_NAME)/include"
"$(BUILT_PRODUCTS_DIR)"

到這里就ok了樱调,累死我了

添加h5資源

將網(wǎng)頁資源放置到工程文件夾中约素,所有網(wǎng)頁資源的根目錄為www文件夾

配置cofig.xml文件

在工程中放置一個config.xml文件,基本信息如下

<?xml version='1.0' encoding='utf-8'?>
<widget id="com.jahome.ezhan.merchant" version="1.1.0.4" xmlns="http://www.w3.org/ns/widgets" xmlns:cdv="http://cordova.apache.org/ns/1.0">
    <feature name="View">//feature標簽為插件信息笆凌,擴展新插件時要在這邊配置信息
        <param name="ios-package" value="CDVView" />
    </feature>
    <feature name="Pay">
        <param name="ios-package" value="CDVPay" />
    </feature>
    <feature name="Image">
        <param name="ios-package" value="CDVImage" />
    </feature>
    <name>
        家和e站·商家
    </name>
    <description>
        A sample Apache Cordova application that responds to the deviceready event.
    </description>
    <author email="wuhuarong@star-net.cn" href="">
        Wei-Ju Team
    </author>
    <content src="views/index.html" />//web入口頁
    <access origin="*" />//下面是一些配置參數(shù)圣猎,比如可跳轉(zhuǎn)的鏈接,后臺音頻播放什么的
    <allow-navigation href="*" />
    <allow-intent href="*" />
    <allow-navigation href="http://*/*" />
    <allow-intent href="http://*/*" />
    <allow-intent href="https://*/*" />
    <allow-intent href="tel://*" />
    <allow-intent href="sms:*" />
    <allow-intent href="mailto:*" />
    <allow-intent href="geo:*" />
    <allow-intent href="itms:*" />
    <allow-intent href="itms-apps:*" />
    <preference name="AllowInlineMediaPlayback" value="false" />
    <preference name="BackupWebStorage" value="local" />
    <preference name="DisallowOverscroll" value="true" />
    <preference name="EnableViewportScale" value="false" />
    <preference name="KeyboardDisplayRequiresUserAction" value="true" />
    <preference name="MediaPlaybackRequiresUserAction" value="false" />
    <preference name="SuppressesIncrementalRendering" value="false" />
    <preference name="SuppressesLongPressGesture" value="false" />
    <preference name="Suppresses3DTouchGesture" value="false" />
    <preference name="GapBetweenPages" value="0" />
    <preference name="PageLength" value="0" />
    <preference name="PaginationBreakingMode" value="page" />
    <preference name="PaginationMode" value="unpaginated" />
    <preference name="StatusBarOverlaysWebView" value="true" />
    <preference name="StatusBarStyle" value="lightcontent" />
</widget>

cordova使用

先import Cordova框架

#import <Foundation/Foundation.h>

然后可以通過下面的代碼獲取CDVViewController

+(CDVViewController *)getCDVViewController{
    if(CDV_VIEW_CONTROLLER==nil)
    CDV_VIEW_CONTROLLER = [[CDVViewController alloc]init];
    return CDV_VIEW_CONTROLLER;
}

接著就可以在相應(yīng)的視圖樹中添加

_viewController.view.frame = self.view.bounds;
[self.view addSubview:_viewController.view];

js調(diào)用插件

我們在重新看一下cofig.xml中插件的描述信息,比如支付插件

<feature name="Pay">//Pay為插件名稱乞而,在js需要傳入對應(yīng)名稱才能調(diào)用相應(yīng)插件
        <param name="ios-package" value="CDVPay" />//對應(yīng)的源文件名稱
</feature>

然后看一下我們的插件實現(xiàn)的源文件

@interface CDVPay :CDVPlugin  //需要繼承CDVPlugin
- (void)pay:(CDVInvokedUrlCommand*)command;//該插件提供給js的功能
@end

@implementation CDVPay
    
- (void)pay:(CDVInvokedUrlCommand *)command{//功能實現(xiàn)
    NSString* charge = [command.arguments objectAtIndex:0];
    [Pingpp createPayment:charge
           viewController:self.viewController
             appURLScheme:kUrlScheme
           withCompletion:^(NSString *result, PingppError *error) {
               NSLog(@"CDVPay--result: %@", result);
               NSDictionary* dic = @{@"result":result};
               NSError* jsonError;
               NSData* josnData = [NSJSONSerialization dataWithJSONObject:dic options:nil error:&jsonError];
               [CDVUtils excJSAction:ACTION_ON_PAY_RESULT args:[[NSString alloc] initWithData:josnData encoding:NSUTF8StringEncoding]];
           }];
}
    @end

再然后送悔,我們在js中,通過cordova.js中的cordova對象的exec方法來調(diào)用原生插件的方法

//Pay插件名稱,pay為action名稱爪模, [chargeInfo]為參數(shù)數(shù)組
cordova.exec(null, null, "Pay", "pay", [chargeInfo])

在插件源文件中欠啤,我們通過command.arguments來獲取js傳遞過來的參數(shù)

NSString* charge = [command.arguments objectAtIndex:0];

如果我們需要返回一些結(jié)果給js的話,可以通過commandDelegate對象

CDVPluginResult* pluginResult = nil;
if (echo != nil && [echo length] > 0) {
        pluginResult = [CDVPluginResult resultWithStatus:CDVCommandStatus_OK messageAsString:@"message"];
    } else {
        pluginResult = [CDVPluginResult resultWithStatus:CDVCommandStatus_ERROR];
    }
    [self.commandDelegate sendPluginResult:pluginResult callbackId:command.callbackId];

在剛才的js代碼中注冊回調(diào)即可收到原生返回來的消息了

function success(re){//成功回調(diào)
}
function fail(re){//失敗回調(diào)
}
cordova.exec(success, fail, "Pay", "pay", [chargeInfo])

原生調(diào)用js方法

有時候需要原生主動調(diào)用js的方法屋灌,可以通過CommandDelegate的evalJs方法

NSString* js = [NSString stringWithFormat:@"excJSAction('%@','%@')",action,args];
if(CDV_VIEW_CONTROLLER!=nil)
    [CDV_VIEW_CONTROLLER.commandDelegate evalJs:js];

然后我們在web頁面中洁段,必須申明有要調(diào)用的方法

var excJSAction = function(action, args) {
}
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市共郭,隨后出現(xiàn)的幾起案子祠丝,更是在濱河造成了極大的恐慌,老刑警劉巖落塑,帶你破解...
    沈念sama閱讀 222,378評論 6 516
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件纽疟,死亡現(xiàn)場離奇詭異,居然都是意外死亡憾赁,警方通過查閱死者的電腦和手機污朽,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 94,970評論 3 399
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來龙考,“玉大人蟆肆,你說我怎么就攤上這事矾睦。” “怎么了炎功?”我有些...
    開封第一講書人閱讀 168,983評論 0 362
  • 文/不壞的土叔 我叫張陵枚冗,是天一觀的道長。 經(jīng)常有香客問我蛇损,道長赁温,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 59,938評論 1 299
  • 正文 為了忘掉前任淤齐,我火速辦了婚禮股囊,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘更啄。我一直安慰自己稚疹,他們只是感情好,可當我...
    茶點故事閱讀 68,955評論 6 398
  • 文/花漫 我一把揭開白布祭务。 她就那樣靜靜地躺著内狗,像睡著了一般。 火紅的嫁衣襯著肌膚如雪义锥。 梳的紋絲不亂的頭發(fā)上柳沙,一...
    開封第一講書人閱讀 52,549評論 1 312
  • 那天,我揣著相機與錄音缨该,去河邊找鬼偎行。 笑死,一個胖子當著我的面吹牛贰拿,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播熄云,決...
    沈念sama閱讀 41,063評論 3 422
  • 文/蒼蘭香墨 我猛地睜開眼膨更,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了缴允?” 一聲冷哼從身側(cè)響起荚守,我...
    開封第一講書人閱讀 39,991評論 0 277
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎练般,沒想到半個月后矗漾,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 46,522評論 1 319
  • 正文 獨居荒郊野嶺守林人離奇死亡薄料,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 38,604評論 3 342
  • 正文 我和宋清朗相戀三年敞贡,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片摄职。...
    茶點故事閱讀 40,742評論 1 353
  • 序言:一個原本活蹦亂跳的男人離奇死亡誊役,死狀恐怖获列,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情蛔垢,我是刑警寧澤击孩,帶...
    沈念sama閱讀 36,413評論 5 351
  • 正文 年R本政府宣布,位于F島的核電站鹏漆,受9級特大地震影響巩梢,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜艺玲,卻給世界環(huán)境...
    茶點故事閱讀 42,094評論 3 335
  • 文/蒙蒙 一括蝠、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧板驳,春花似錦又跛、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,572評論 0 25
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至端幼,卻和暖如春礼烈,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背婆跑。 一陣腳步聲響...
    開封第一講書人閱讀 33,671評論 1 274
  • 我被黑心中介騙來泰國打工此熬, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人滑进。 一個月前我還...
    沈念sama閱讀 49,159評論 3 378
  • 正文 我出身青樓犀忱,卻偏偏與公主長得像,于是被迫代替她去往敵國和親扶关。 傳聞我的和親對象是個殘疾皇子阴汇,可洞房花燭夜當晚...
    茶點故事閱讀 45,747評論 2 361

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