2013-08-05 4 views
5

Sto lavorando a una creazione di plug-in personalizzato PhoneGap/Cordova (versione 2.9.0) per l'app iOS. I miei passi sono i seguenti:Plugin PhoneGap per ios che restituisce il plugin FAILEDJSON

  1. ho creato un file HelloPlugin.js e copiare sotto www// cartella js, il suo avere il codice:

    var HelloPlugin = 
    { 
        callNativeFunction: function (success, fail, resultType) 
        { 
        alert('a'); 
        return Cordova.exec(success, fail, "HelloPlugin", "nativeFunction", ['1']); 
        } 
    }; 
    
  2. ho creato HelloPlugin.h e HelloPlugin. file m sotto la cartella plugins, codice:

    // .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. ho aggiunto seguente codice al file config.xml:

    <feature name="HelloPlugin"> 
        <param name="ios-package" value="CDVPlugin"/> 
    </feature> 
    
  4. Finalmente ho modificato index.html in modo seguente:

    1. riferimento Script aggiunto.()
    2. codice JS aggiunto:

      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. due pulsanti aggiunti e funzione chiamata:

      "callNativePlugin ('successo');" "callNativePlugin ('error');"

Spero che questa è l'unica cose necessarie che devo fare per attivare plugin.

Problema: durante l'esecuzione dell'app, ricevo l'errore pluginJSON FALLITO sulla console.

uscita:

- [CDVCommandQueue executePending] [Linea 116] Impossibile pluginJSON = [ "HelloPlugin2650437", "HelloPlugin", "nativeFunction", [ "1", "1", "1" ] ]

Che errore ho fatto, per favore fatemelo sapere. Apprezzo davvero i tuoi sforzi. Per favore aiutami qui.

risposta

7

La prima cosa che è saltata fuori è il nome del pacchetto del plugin. Dovrebbe essere il tuo nome classe iOS che è "HelloPlugin".

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

Uno degli scopi del nuovo modo di fare riferimento plugin è per consentire la flessibilità e la compatibilità a ritroso dei nomi dei plugin in particolare su Android. Esempio:

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

Dove "HelloCDVPlugin" è il nome della classe iOS e "com.phonegap.plugins.HelloCDVPlugin" è il nome della classe Android.

+2

Ha funzionato per me ... :) –

+0

Ha funzionato anche per me .. grazie !! :) –

+0

Ha lavorato per me grazie mille. Stavo lavorando con più versioni di Cordova che mi ha dato questo problema per lo stesso plugin. – satheeshwaran

1

Usa sotto codice per 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 
} 
} 
); 

e cambiare cordova.exec a

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

Potete trovare esempio dal basso legame

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

è necessario modificare il codice secondo il vostro requisito