Windows Phone Plugins
Ta razdelek ponuja podrobnosti za kako izvajati native plugin kodo na Windows Phone platformi. Pred obravnavo tega, glejte Uporaba Plugins za pregled plugin strukturo in njene skupne JavaScript vmesnik. Ta oddelek še dokazati vzorec echo plugin, ki komunicira s spletni pogled Cordova native platformo in nazaj.
Pisanje plugin za Cordova na Windows Phone zahteva osnovno razumevanje arhitekture Cordova's. Cordova WP7 sestajati od a WebBrowser
ki gosti aplikacije JavaScript kodo in upravlja native API klici. Vi moči razširiti C# BaseCommand
razreda ( WP7CordovaClassLib.Cordova.Commands.BaseCommand
), ki prihaja z večino funkcionalnosti, ki jih potrebujete:
Izberite vaš projekt, in z desno tipko miške, da izberete Dodajanje → novega elementa... Če želite, ga lahko dodate v
Plugins
zgibalnik.Izberite razred in ime
Echo.cs
. Ta razred ime mora točno ujemati, kar imenujete določite kot storitev v jecordova.exec()
klic na strani JavaScript.Vključujejo izvajanje osnovnih razredov:
using WPCordovaClassLib.Cordova; using WPCordovaClassLib.Cordova.Commands; using WPCordovaClassLib.Cordova.JSON;
Razširiti vaš razred iz
BaseCommand
:public class Echo : BaseCommand { // ... }
Dodaj je
echo
metoda, ki je vpisano od JavaScript:public class Echo : BaseCommand { public void echo(string options) { // all JS callable plugin methods MUST have this signature! // public, returning void, 1 argument that is a string } }
Glej BaseCommand.cs razred za metode, ki so na voljo za plugin za preglasitev. Na primer, plugin lahko zajemanje "pavza" in "spet" dogodkov.
Imenski prostori
Privzeti imenski prostor za nekvalificirana ukazov je:
namespace Cordova.Extension.Commands
{
// ...
}
Če želite določiti svoj imenski prostor, boste morali poklicati popolnoma cordova.exec
. Na primer, če želite določiti vaš razred C# takole:
namespace com.mydomain.cordovaExtensions
{
public class Echo : BaseCommand
{
// ...
}
}
JavaScript bi morali poklicati exec
takole:
cordova.exec(win, fail, "com.mydomain.cordovaExtensions.Echo", ...);
Tolmačenje argumentov v C
V primeru razpravljali v uporabo Plugins podatke prejme vaš plugin je niz, vendar kaj, če želite prenesti nizov? Recimo JavaScript cordova.exec
klic je določena takole:
cordova.exec(win, fail, "Echo", "echo", ["input string"]);
Vrednost options
niz prenese na Echo.echo
metoda je JSON:
"[\"input string\"]"
Vse JavaScript exec
argumenti JSON kodira pred prevalili v C#, in tako morali odkodirate:
string optVal = JsonHelper.Deserialize<string[]>(options)[0];
// optVal now has the value of "input string"
Kratki rezultati iz C# JavaScript
V BaseCommand
razred zagotavlja metode JavaScript povratni klic oskrbniki prenesti podatke. Če želite preprosto signal uspeh brez spremnega rezultata, lahko preprosto pokličete:
DispatchCommandResult();
// calls back with an empty plugin result, considered a success callback
Prenesti podatke nazaj, morate poklicati DispatchCommandResult
drugače:
DispatchCommandResult(new PluginResult(PluginResult.Status.OK, "Everything went as planned, this is a result that is passed to the success handler."));
Uporabite kodirano JSON string prenesti strukturiran objekt podatke nazaj v JavaScript:
DispatchCommandResult(new PluginResult(PluginResult.Status.OK, "{result:\"super awesome!\"}"));
Signal napake, oklic DispatchCommandResult
s a PluginResult
predmet, katerih stanje je ERROR
:
DispatchCommandResult(new PluginResult(PluginResult.Status.ERROR, "Echo signaled an error"));
Ravnanje serializacija napake
Pri razlagi vaše trditve, try
/ catch
bloki pomoč zaslon iz slabo vložek. Ta vzorec se pojavi skozi Cordova C# kodo:
string optVal = null;
try
{
optVal = JsonHelper.Deserialize<string[]>(options)[0];
}
catch(Exception)
{
// simply catch the exception, we handle null values and exceptions together
}
if (optVal == null)
{
DispatchCommandResult(new PluginResult(PluginResult.Status.JSON_EXCEPTION));
}
else
{
// ... continue on to do our work
}
Plugin XML
Naslednje prikazuje uporabo v plugin.xml
datoteko želite določiti a plugin izvornih datotek na Windows Phone platformi. Glejte Uporaba Plugins za pregled in specifikacije Plugin za podrobnosti o razpoložljivih možnosti.
Je
<source-file>
element, ki opredeljuje vse plugin virov, kot so .cs, .xaml, . xaml.cs, in .dll pila ter podoba sredstev.Je
<config-file>
element opredeljuje elemente oddaja v konfiguracijski datoteki. Ta primer doda plugin na platformoconfig.xml
datoteke:<config-file target="config.xml" parent="/*"> <feature name="PluginName"> <param name="wp-package" value="PluginName"/> </feature> </config-file>
Ta primer doda sposobnost stike z
WMAppManifest.xml
datoteke:<config-file target="Properties/WMAppManifest.xml" parent="/Deployment/App/Capabilities"> <Capability Name="ID_CAP_CONTACTS" /> </config-file>
Debugging Plugins
Uporabite iskalnik napak za Visual Studio debug a plugin C# komponento. Break točke lahko nastavite na katero koli od metod, ki jih vaš razred.
JavaScript je težje debug na Windows Phone. Vi potreba rabiti console.log
izhod plugin država ali pozanimate napak.
Skupnih pastem
Pazite, da ne prenesti argumente iz JavaScript strani native, ki so težko deserializirati kot JSON. Večina platforme naprav pričakujejo argument, predan
cordova.exec()
treba matriko, kot sledi:cordova.exec(win, fail, "ServiceName", "MethodName", ["this is a string", 54, {literal:'trouble'}]);
To lahko povzroči preveč kompleksna niz vrednosti za C# k dekodirajo:
"[\"this is a string\", 54, { literal:'trouble' }]"
Namesto tega, da preusmeri vse parametre na strune, preden pokličete
exec()
, in vsakega posebej dekodiranje:cordova.exec(win, fail, "ServiceName", "MethodName", ["this is a string", "54", "{literal:'trouble'}"]); string[] optValues = JsonHelper.Deserialize<string[]>(options);
Ponavadi je bolje preveriti parametre v JavaScript, preden pokličete
exec()
. Tako omogoča ponovno uporabo več kode in potegnite nepotrebnih smotrnost od plugin native različnih izvedb.