簡體   English   中英

將自定義cordova插件添加到IBM Worklight 6.1

[英]Add custom cordova plugin to IBM Worklight 6.1

我正在嘗試為iOS平台添加一個自定義Cordova插件,當我將其與在cordova上添加插件的過程進行比較時,我遇到了一些問題。

我試圖在這里使用的插件是https://github.com/phonegap-build/StatusBarPlugin

使用cordova我以前只使用命令行c ordova plugin add com.phonegap.plugin.statusbar

首先,我嘗試在原生文件夾中進行修改,但是我注意到如果我這樣做,它可以工作但下次我再次部署iOS平台時會被刪除。 其次,我嘗試在apps / myapp / iphone或apps / myapp / common下添加文件(插件js文件和cordova_plugins.js文件。),但這會導致一個問題: cordova_plugins.js文件格式似乎cordova_plugins.js

而不是具有這種工作格式:

cordova.define('cordova/plugin_list', function(require, exports, module) {
module.exports = [
    {
        "file": "plugins/org.apache.cordova.battery-status/www/battery.js",
        "id": "org.apache.cordova.battery-status.battery",
        "clobbers": [
            "navigator.battery"
        ]
    },
,
    {
        "file": "plugins/com.phonegap.plugin.statusbar/www/statusbar.js",
        "id": "com.phonegap.plugin.statusbar.statusbar",
        "clobbers": [
            "window.StatusBar"
        ]
    }
]
});

它具有無法正常工作的格式:

/* JavaScript content from worklight/cordova_plugins.js in JS Resources */
/*
* Licensed Materials - Property of IBM
* 5725-I43 (C) Copyright IBM Corp. 2006, 2013. All Rights Reserved.
* US Government Users Restricted Rights - Use, duplication or
* disclosure restricted by GSA ADP Schedule Contract with IBM Corp.
*/
cordova.define('cordova/plugin_list', function(require, exports, module) {
module.exports = [
    {
        "file": "plugins/org.apache.cordova.battery-status/www/battery.js",
        "id": "org.apache.cordova.battery-status.battery",
        "clobbers": [
            "navigator.battery"
        ]
    }
]
});
/* JavaScript content from worklight/cordova_plugins.js in folder common */

/* JavaScript content from worklight/cordova_plugins.js in JS Resources */
/*
* Licensed Materials - Property of IBM
* 5725-I43 (C) Copyright IBM Corp. 2006, 2013. All Rights Reserved.
* US Government Users Restricted Rights - Use, duplication or
* disclosure restricted by GSA ADP Schedule Contract with IBM Corp.
*/
cordova.define('cordova/plugin_list', function(require, exports, module) {
module.exports = [
    {
        "file": "plugins/org.apache.cordova.battery-status/www/battery.js",
        "id": "org.apache.cordova.battery-status.battery",
        "clobbers": [
            "navigator.battery"
        ]
    },
    {
        "file": "plugins/com.phonegap.plugin.statusbar/www/statusbar.js",
        "id": "com.phonegap.plugin.statusbar.statusbar",
        "clobbers": [
            "window.StatusBar"
        ]
    }
]
});

我應該怎么做? 我應該把這些文件放在哪里? 添加此自定義插件的正確方法是什么,特別是如果我只想為iOS而不是Android添加它?

更新:從MobileFirst 7.1開始,SDK 現在可作為Cordova插件使用。

對於那些有興趣在他們的MobileFirst(Worklight)項目中添加第三方插件的人,我已經描述了我自己在下面安裝它們的方法,等待IBM的功能發布。

這個概念基本上是:

  1. 創建一個Cordova項目,
  2. 添加所需的插件,
  3. 創建一個MobileFirst項目,
  4. 將插件文件從兩個項目復制到臨時區域(這樣我們就可以輕松識別它們),
  5. 合並config.xml和cordova_plugin.js文件(即使用Cordova項目中的插件信息補充MobileFirst文件)和
  6. 將暫存和修改的文件復制到MobileFirst。

免責聲明:根據公認的答案,IBM不支持/建議修改cordova_plugin.js文件。

首先,我們需要創建Cordova項目(加上插件)和MobileFirst項目(步驟1-4)。 我使用了Ionic Keyboard插件作為示例,不用說這種方法(創建Cordova項目和合並文件)適用於任何受支持的插件和目標。

## Create a directory to contain your MobileFirst project e.g. mkdir example; cd example; ##
## Create Cordova project ##
mkdir .tmp
cd .tmp/
cordova create plugins com.plugins plugins;
cd plugins/
cordova platform add ios;
cordova plugin add com.ionic.keyboard;
cd ../..
## Create mobile first project ##
mfp create hybrid
cd hybrid/
mfp add hybrid hybrid
mfp add environment iphone
## Generate native files ##
mfp build
cd ..
## Create staging ##
mkdir -p plugins/native/www/default/worklight
mkdir -p plugins/resources/mobilefirst/
mkdir -p plugins/resources/cordova/
mkdir -p plugins/hm/
## Copy config.xml ##
cp hybrid/apps/hybrid/iphone/native/config.xml plugins/resources/mobilefirst/
cp .tmp/plugins/platforms/ios/plugins/config.xml plugins/resources/cordova/
## Copy Cordova files ##
cp -R hybrid/apps/hybrid/iphone/native/www/default/worklight/ plugins/resources/mobilefirst/
## Copy plugins JS ##
cp -R .tmp/plugins/platforms/ios/www/plugins plugins/native/www/default/worklight/
cp -R .tmp/plugins/platforms/ios/www/ plugins/resources/cordova/
## Copy classes ##
cp -R .tmp/plugins/platforms/ios/Plugins/Plugins/com.ionic.keyboard/ plugins/hm/
## Delete the Cordova project as we have copied all of the artefacts we need ##
rm -R .tmp
## Create the config and cordova_plugin.js which is going to override the mfp build version ##
cp plugins/resources/mobilefirst/config.xml plugins/native/
cp plugins/resources/mobilefirst/cordova_plugins.js plugins/native/www/default/worklight/

現在已准備好分階段的config.xml和cordova_plugins.js文件(步驟5)。

打開plugins / resources / cordova / config.xml文件,將該功能復制到plugins / native / config.xml文件中。

<feature name="Keyboard">
  <param name="ios-package" onload="true" value="IonicKeyboard" />
</feature>

打開plugins / resources / cordova / cordova_plugins.js文件,將插件對象復制到plugins / native / www / default / worklight / cordova_plugins.js文件中。

{
  "file": "plugins/com.ionic.keyboard/www/keyboard.js",
  "id": "com.ionic.keyboard.keyboard",
  "clobbers": [
    "cordova.plugins.Keyboard"
  ]
}

現在我們准備將合並的文件復制到MobileFirst項目中(步驟6a)。

## Copy from staging to Worklight ##
cp -R plugins/hm/ hybrid/apps/hybrid/iphone/native/Classes/

第一次復制文件Xcode不會自動拾取新類,因此在Xcode中打開項目並右鍵單擊Classes和'Add files to ...'。 添加對話框中顯示的文件。

最后,我們可以將插件/本機目錄中的文件復制到MobileFirst項目中(步驟6b)。 不幸的是,我們需要在每次mfp構建之后復制此目錄,因為mfp每次都會重置cordova_plugins.js文件。

## Do this after every mfp build ##
rm -f hybrid/apps/hybrid/iphone/native/www/default/worklight/cordova_plugins.js
cp -R plugins/native/ hybrid/apps/hybrid/iphone/native/

完成后,將客戶端代碼添加到混合應用程序並進行測試(不要忘記在mfp構建后再次運行步驟6),例如

<input type="text">

window.addEventListener('native.keyboardshow', keyboardShowHandler);

function keyboardShowHandler(e){
    alert('Keyboard height is: ' + e.keyboardHeight);
}

我希望這本指南證明是有用的。 我每天都使用這個過程(盡管是Grunt的一部分),並期待IBM發布一個功能。

Worklight 6.1.0.x還不支持使用plugman或在純Cordova應用程序中執行的任何其他過程添加預制的Cordova 3.x插件,包括嘗試編輯您嘗試編輯的文件。 這是當前版本的Worklight中的已知限制。

我要做的是閱讀在Worklight 中創建Cordova插件的培訓材料 ,然后獲取要添加的插件的來源並將其復制。

可能有其他方法可以做到,但目前沒有方便。

克里斯提出上述解決方案存在問題。 如果你正確地遵循這個過程,插件肯定會起作用,但之后會有嚴重的后果。 例如,因為每次有mfp構建時都會覆蓋plugins文件夾和cordova_plugins.js文件,所以生成的wlapp文件永遠不會添加插件代碼。 因此,如果您使用直接更新,一旦您上傳此wlapp文件,您的代碼將被覆蓋,並且該插件將停止工作。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM