2013-08-05 32 views
5

我正在爲iOS應用程序的Phonegap/Cordova(版本2.9.0)自定義插件創建。我的步驟如下:PhoneGap插件爲ios返回失敗插件JSON

  1. 我創建了一個HelloPlugin.js文件,並在WWW複製/ JS /文件夾,它具有代碼:

    var HelloPlugin = 
    { 
        callNativeFunction: function (success, fail, resultType) 
        { 
        alert('a'); 
        return Cordova.exec(success, fail, "HelloPlugin", "nativeFunction", ['1']); 
        } 
    }; 
    
  2. 我創建HelloPlugin.h和與HelloPlugin。 plugins文件夾下的M檔,代碼:

    // .h 
    #import <Cordova/CDVPlugin.h> 
    
    @interface HelloPlugin : CDVPlugin 
    
    - (void)nativeFunction:(CDVInvokedUrlCommand*)command; 
    
    @end 
    
    // .m 
    
    #import "HelloPlugin.h" 
    
    @implementation HelloPlugin 
    
    - (void)nativeFunction:(CDVInvokedUrlCommand*)command 
    { 
        NSLog(@"Hello, this is a native function called from PhoneGap/Cordova!"); 
    } 
    
    @end 
    
  3. 我添加以下代碼config.xml文件:

    <feature name="HelloPlugin"> 
        <param name="ios-package" value="CDVPlugin"/> 
    </feature> 
    
  4. 最後我修改的index.html以下列方式:

    1. 腳本參考添加。 ()
    2. JS代碼加入:

      function callNativePlugin(returnSuccess) 
          { 
          HelloPlugin.callNativeFunction(nativePluginResultHandler, nativePluginErrorHandler, returnSuccess); 
          } 
      
          function nativePluginResultHandler (result) { 
           alert("SUCCESS: \r\n"+result); 
          } 
      
          function nativePluginErrorHandler (error) { 
           alert("ERROR: \r\n"+error); 
          } 
      
    3. 兩個按鈕並將調用的函數:

      「callNativePlugin( '成功');」 「callNativePlugin('error');」

我希望這是唯一必需的事情,我需要激活插件做。

問題:在運行應用程序時,控制檯上出現FAILED pluginJSON錯誤。

輸出:

- [CDVCommandQueue executePending] [116線] FAILED pluginJSON = [ 「HelloPlugin2650437」, 「與HelloPlugin」, 「nativeFunction」, [ 「1」, 「1」, 「1」 ] ]

我做了什麼錯誤,請讓我知道。我真的很欣賞你的努力。請在這裏幫助我。

回答

7

跳出的第一件事就是您的插件包名稱。它應該是你的iOS類名稱,它是「HelloPlugin」。

<param name="ios-package" value="HelloPlugin"/> 

引用插件新方法的目的之一是允許插件名稱的靈活性和向後兼容性,特別是在Android上。例如:

<feature name="HelloPlugin"> 
    <param name="ios-package" value="HelloCDVPlugin"/> 
    <param name="android-package" value="com.phonegap.plugins.HelloCDVPlugin"/> 
</feature> 

其中 「HelloCDVPlugin」 是您的iOS類名和 「com.phonegap.plugins.HelloCDVPlugin」 是你的Android類名。

+2

它爲我工作... :) –

+0

它也爲我工作.. thanx! :) –

+0

爲我感謝了很多。我正在與科爾多瓦的多個版本,這給了我同樣的插件這個問題。 – satheeshwaran

1

使用下面的代碼JS

cordova.define("cordova/plugin/hello", 
function (require, exports, module) { 

var exec = require('cordova/exec'); 

function greet(name, win, fail) { 
    exec(win, fail, "Hello", 
     "greet", [name]); 
} 

module.exports = { 
    greet: greet 
} 
} 
); 

,改變cordova.exec到

exec(this.callbacks.onSuccess, this.callbacks.onError, "Hello", "greet", [defaults]); 

您可以從以下鏈接找到例子

https://github.com/cristobal/phonegap-ios-datepicker-plugin

您必須修改代碼根據您的要求。