我有一个工作的科尔多瓦应用程序并构建了一个 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 中,那么我就很成功了。