首页 文章

如何从Watchkit传递NSURL - > Native Cordova应用程序和使用Javascript打开浏览器

提问于
浏览
1

我有一个工作的cordova应用程序,并构建了一个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)

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

另一种方法是以某种方式将NSURL传递回Cordova并使用

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

为了实现这一点,我使用了this Cordova -Watchkit plugin,它允许在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,那我就是金色的 .

1 回答

  • 2

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

    var wormhole: MMWormhole!
    
    wormhole = MMWormhole(applicationGroupIdentifier: "group.com.hellobrowser",
        optionalDirectory: nil)
    
    wormhole.listenForMessageWithIdentifier("myqueue", listener: yourHandler)
    

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

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

    或者,如果您要设置可从Cordova应用程序和WatchKit扩展程序读取/写入的值,您可能需要查看使用NSUserDefaults,这些问题仅在插件中实现,因为此问题已发布 .

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

相关问题