未调用 Cordova 插件回调 (iOS)
Posted
技术标签:
【中文标题】未调用 Cordova 插件回调 (iOS)【英文标题】:Cordova plugin callback not being called (iOS) 【发布时间】:2017-01-25 20:16:46 【问题描述】:我正在为 ios 开发一个 Cordova 插件。我的“plugin.js”中有一个方法,我只从我的应用程序(javascript)调用一次,开始监听来自本机部分的回调。调用此方法时,我将 callbackId 存储在 Objective-C 类中,并希望稍后发送回调(可能有多个回调),因此我使用存储的 callbackId 发送 CDVPluginResult,并将 'keepCallback' 设置为 true .但是回调永远不会到达'plugin.js',因此不会到达应用程序。
Objective-C 方法一(即监听部分):
- (void)listenForNews:(CDVInvokedUrlCommand *)command
self.storedCallbackId = command.callbackId;
...
Objective-C Method 2(即异步调用多次的方法)
- (void)onNewsReceived
CDVPluginResult* pluginResult = [CDVPluginResult resultWithStatus:CDVCommandStatus_OK];
[pluginResult setKeepCallbackAsBool:YES];
[self.commandDelegate sendPluginResult:pluginResult callbackId:self.storedCallbackId];
我已验证“storedCallbackId”已正确存储和读取。
有什么想法吗?
【问题讨论】:
【参考方案1】:我做了类似以下in my plugin 的操作,它可以工作,所以试一试:
- (void)listenForNews:(CDVInvokedUrlCommand *)command
self.storedCallbackId = command.callbackId;
...
CDVPluginResult* pluginResult = [CDVPluginResult resultWithStatus:CDVCommandStatus_NO_RESULT];
[pluginResult setKeepCallback:[NSNumber numberWithBool:YES]];
[self.commandDelegate sendPluginResult:pluginResult callbackId:command.callbackId];
- (void)onNewsReceived
CDVPluginResult* pluginResult = [CDVPluginResult resultWithStatus:CDVCommandStatus_OK];
[pluginResult setKeepCallback:[NSNumber numberWithBool:YES]];
[self.commandDelegate sendPluginResult:pluginResult callbackId:self.storedCallbackId];
【讨论】:
感谢@DaveAlden。我们可以解决这个问题。最后是插件类的多个实例的问题,这导致 Cordova 失去了回调(当然)。 谢谢!我能够在我一直在研究的 Swift 插件中实现这一点。这是我让它工作所需的最后一小部分!我很感激你。 我实现了相同的,但回调仅第一次到达 .js 文件。对于下一个委托方法调用,它不再调用。请帮忙。以上是关于未调用 Cordova 插件回调 (iOS)的主要内容,如果未能解决你的问题,请参考以下文章
Cordova:如何编写可以重复调用 Javascript 回调的本机插件?