用于 ios 的 PhoneGap 插件返回 FAILED pluginJSON

Posted

技术标签:

【中文标题】用于 ios 的 PhoneGap 插件返回 FAILED pluginJSON【英文标题】:PhoneGap plugin for ios returning FAILED pluginJSON 【发布时间】:2013-08-05 13:31:07 【问题描述】:

我正在为 ios 应用创建 Phonegap/Cordova(版本 2.9.0)自定义插件。我的步骤如下:

    我创建了一个 HelloPlugin.js 文件并将其复制到 www/js/ 文件夹下,其中包含代码:

    var HelloPlugin =
    
      callNativeFunction: function (success, fail, resultType)
      
        alert('a');
        return Cordova.exec( success, fail, "HelloPlugin", "nativeFunction", ['1']);
      
    ; 
    

    我在plugins文件夹下创建了HelloPlugin.h和HelloPlugin.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
    

    我在 config.xml 文件中添加了以下代码:

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

    最后我用以下方式修改了 index.html

      添加了脚本参考。 ()

      已添加 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 );
         
      

      添加了两个按钮并调用了函数:

      "callNativePlugin('成功');" "callNativePlugin('error');"

我希望这是激活插件所需要做的唯一事情。

问题:在运行应用程序时,我在控制台上收到 FAILED pluginJSON 错误。

输出:

-[CDVCommandQueue executePending] [第 116 行] FAILED pluginJSON = [ "HelloPlugin2650437", "你好插件", “本机功能”, [ "1", "1", “1” ] ]

我犯了什么错误,请告诉我。我真的很感谢你的努力。请在这里帮助我。

【问题讨论】:

【参考方案1】:

首先跳出来的是你的插件包名。它应该是您的 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 类名。

【讨论】:

为我工作非常感谢。我正在使用多个版本的 Cordova,这给了我同一个插件的这个问题。 @LalitPaliwal 你好,来自诺伊达的 lalit Sundeep sharma 我和 Vijay yadav 一起加入 Hiteshi,希望你记得。我面临同样的问题。【参考方案2】:

使用下面的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

您必须根据您的要求修改代码。

【讨论】:

以上是关于用于 ios 的 PhoneGap 插件返回 FAILED pluginJSON的主要内容,如果未能解决你的问题,请参考以下文章

用于压缩的 iOS Phonegap 插件

inAppBrowser 插件不适用于 Phonegap 3.3.0 和 iOS

用于phonegap pauseSpeakingAtBoundary的ios AVSpeechSynthesizer插件不起作用

Phonegap 插件推送在 iOS 13 及更高版本上返回奇怪格式的 iOS 设备令牌

PhoneGap 3.x / iOs6 iOs7 / AngularJs - 插件对象不适用于自定义 www/index.html 位置

Phonegap IOS插件