1

我有一个工作的科尔多瓦应用程序并构建了一个 Watchkit 应用程序。意识到我不能将本机应用程序调用到前台或对其内部工作做任何事情,我想使用 Handoff 来简单地通过 Safari 将用户发送到一个网页,该网页基本上可以从应用程序中获取代码并处理 URL查询字符串参数。所以我写了一个例程,它基本上是这样做的:

   var URLwithQuery = "http://www.example.com?query="+QueryVar

   var urlPath: String = URLwithQuery
   var url: NSURL = NSURL(string: urlPath)!

   updateUserActivity("com.example.www.hellobrowser", 
           userInfo: ["name":"WhereAmI"], webpageURL: url)

现在,我无法测试,因为我没有手表而且模拟器不支持 Handoff。但我怀疑这是否可行:我已经在本机应用程序的根 info.plist 中手动插入了一个 NSUserActivityTypes 数组和“hellobrowser”活动,但这是严重未记录的领域,虽然一切都可以编译和运行,但我不知道如果它真的触发了切换,直到我可以在实际手表上运行它。墨菲定律说它会失败。

执行此操作的另一种方法是以某种方式将 NSURL 传递回 Cordova 并使用

window.open('http://www.example.com?Query='+QueryVar, '_system');

为此,我使用了这个 Cordova -Watchkit 插件,它允许在 Watchkit 扩展和 cordova 应用程序中的 javascript 之间传递 JSON 对象。所以在本机应用程序端,我将实现这个消息传递示例的一个版本来传递字符串化的 NSURL(除了这个示例是 iPhone -> iPhone 而不是 Watchkit -> iPhone):

applewatch.init(function (appGroupId) {
    alert(appGroupId);

    applewatch.addListener("myqueue", function(message) {
        alert("Message received: " + message);
    });

    applewatch.sendMessage("test", "myqueue");
});

但是,我在传递 JSON 对象方面是个菜鸟,并且没有示例说明 Watchkit 应用程序或扩展中的 Swift 代码可能会将 NSURL 传递回该侦听器。

我怀疑有一个更简单的方法来做到这一点!如果我可以从 Watchkit 应用程序中将 NSURL 作为字符串获取到我的本机应用程序的 javascript 中,那么我就很成功了。

4

1 回答 1

2

在您的 WatchKit ExtensionWKInterfaceController中,您需要引用MMWormhole库(已编译并包含在插件中)并执行以下操作:

var wormhole: MMWormhole!

wormhole = MMWormhole(applicationGroupIdentifier: "group.com.hellobrowser",
    optionalDirectory: nil)

wormhole.listenForMessageWithIdentifier("myqueue", listener: yourHandler)

然后通过 Apple Watch 插件从您的 Cordova 应用程序发送消息,以便 WatchKit 扩展侦听器接收该消息:

applewatch.init(function () {
    applewatch.sendMessage("test", "myqueue");
}, null, "group.com.hellobrowser");

或者,如果您想设置从 Cordova 应用程序和 WatchKit 扩展都可读/可写的值,您可能需要查看使用NSUserDefaults,自发布此问题以来仅在插件中实现。

我希望这会有所帮助,当我开始使用它并且当我知道 Apple 批准这些方法时,将提供完整的示例应用程序或详细的博客文章。

于 2015-04-22T15:52:25.360 回答