cordova外掛iOS平臺實戰開發注意點
cordova外掛是其設計理念的精髓部分,建立並使用自定義外掛也是一件比較容易的事。但在這個過程中也容易進入一些誤區或者有一些錯誤的理解,下面從筆者實際開發中遇到的問題出發,對其中的一些注意點和重要概念進行適當的闡述。
相關修改的檔案:
1. iOS原生開發的外掛類;其中需要包括引數為(CDVInvokedUrlCommand *)command的介面(供web側呼叫);還可以在其中實現一些生命週期方法,比如pluginInitialize(類公用的方法),但需要對其做相應的配置(在配置檔案中,後面會說到)。
2. 對映用的配置檔案config.xml. 示例如下:
<feature name="GestureHandler">
<param name="ios-package" value="CDVGestureHandler" />
<param name="onload" value="true" />
</feature>
可以這樣理解每一個feature都對應著一個外掛,這裡的feature name也就是外掛模組的名字;它需要和後面js呼叫native的exec方法的引數相同,否則就無法找到這個外掛了。 而其中的param name固定為”ios-package”,即指定iOS平臺;後面的value是對應的iOS原生類的名字(這個也是用來匹配到原生程式碼的,務必要正確)。後面的 param name=”onload” value=”true” 是可選的,配置此項後,外掛的 pluginInitialize 才會在每次初始化的時候被呼叫.
3.index.html檔案。這個是用來測試外掛功能的html檔案,我們可以在此處寫一些測試的js程式碼來驗證我們的外掛功能。
<script>
function test()
{
cordova.exec(null, null, "TestOnly", "justTest", ['hello111']);
//alert("OK")
}
function test2()
{
cordova.exec(null, null, "TestOnly", "justTest2", ['hello111']);
//alert("OK")
}
</script>
<input type="button" onclick="test()" value="外掛測試">
<input type="button" onclick="test2()" value="外掛測試2">
ps: 新版本的cordova預設是啟用CSR的,會禁用html中的inline-js,註釋掉(或加上特定標記 unsafe-inline)之後inline-js才能起作用。
4.index.js
你也可以把測試程式碼寫在index.js裡。
cordova.exec的呼叫格式為:
exec(<successFunction>, <failFunction>, <service>, <action>, [<args>]);
前兩個是回撥處理函式,第三個是外掛模組的名字,第四個是原生方法的方法名。後面的args可以用於向原生傳遞資料。
容易出問題的點:
- config.xml的配置一定要注意,exec的呼叫引數也要與之匹配。
- 訪問外部的url需要加入到白名單(預設是啟用白名單的)。
- inline-js 不執行的情況需要在CSR中作配置或者直接註釋掉。
當前專案中存在的問題:
- 在config.xml裡面加入了大量的feature,實際這個是不必要的。1個模組可以對應多個介面,這些介面可以只從屬於一個外掛模組。
- 有些呼叫可能存在時間較長的情況,需要將其執行在background thread(通過runInBackground方法,在block中執行)。