方法类型
在开发插件时,有三种不同类型的方法签名可供使用。所有方法都是异步且基于 Promise 的。
让我们看一个包含所有三种类型的插件定义示例:
export type CallbackID = string;
export interface MyData {
data: string;
}
export type MyPluginCallback = (message: MyData | null, err?: any) => void;
export interface MyPlugin {
method1(): Promise<void>;
method2(): Promise<MyData>;
method3(callback: MyPluginCallback): Promise<CallbackID>;
}
无返回值方法
method1() 是最简单的情况,预期不会返回任何数据。您可以检查 Promise 是否有错误,但当它解析时,结果会被忽略。
对于 Android,您需要这样注解方法:
@PluginMethod(returnType = PluginMethod.RETURN_NONE)
public void method1(PluginCall call) {
}
对于 iOS,您需要在插件的 .m 文件中这样声明方法:
CAP_PLUGIN(MyPlugin, "MyPlugin",
CAP_PLUGIN_METHOD(method1, CAPPluginReturnNone);
)
有值返回方法
method2() 是最常见的情况:一个解析后返回某个值的 Promise。
对于 Android,此方法类型是默认值,指定返回类型是可选的:
@PluginMethod()
public void method2(PluginCall call) {
}
对于 iOS,您需要在插件的 .m 文件中这样声明方法:
CAP_PLUGIN(MyPlugin, "MyPlugin",
CAP_PLUGIN_METHOD(method2, CAPPluginReturnPromise);
)
回调方法
method3() 是最复杂的类型,但在实践中也是最不常见的。当您的插件需要 重复返回数据时使用,例如通过地理定位 API 监控设备位置时。
对于 Android,您需要这样注解方法:
@PluginMethod(returnType = PluginMethod.RETURN_CALLBACK)
public void method3(PluginCall call) {
}