2015-04-15 3 views
1

У меня есть рабочее приложение cordova и вы создали приложение Watchkit. Осознавая, что я не могу назвать родное приложение на переднем плане или делать что-либо с его внутренней обработкой, я решил использовать Handoff, чтобы просто отправить пользователя через Safari на веб-страницу, которая в основном блокирует код из приложения и обрабатывает URL-адрес параметр строки запроса. Поэтому я написал подпрограмму, которая в основном делает это:Как перенести NSURL из Watchkit -> Родное приложение Кордовы и открыть браузер с Javascript

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) 

Теперь я не могу проверить, что я не имею часы и тренажер не поддерживает передачу. Но я сомневаюсь, что это сработает: я вручную ввел массив NSUserActivityTypes и активность hellobrowser в корневой файл info.plist собственного приложения, но это серьезно недокументированная территория, и, хотя все компилируется и запускается, я не буду иметь никаких идей если он фактически инициирует эстафетную передачу обслуживания, пока я не смогу запустить его на фактических часах. Закон Мерфи говорит, что он потерпит неудачу.

Альтернативный способ сделать это было бы как-то передать NSURL обратно в Кордову и использовать

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

За то, что на работу я должен был использовать this Cordova -Watchkit plugin, который позволяет проходящие объектов JSON между расширением Watchkit а javascript в приложении cordova. Так что на родной стороне приложения я бы реализовать версию этого примера обмена сообщениями для передачи строковой NSURL (за исключением этого примера iPhone -> iPhone, а не Watchkit -> iPhone):

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

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

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

Однако, я noob при передаче объектов JSON, и нет примера того, как может выглядеть код Swift в приложении или расширении Watchkit, чтобы передать NSURL обратно этому слушателю.

Я подозреваю, что есть более простой способ сделать это! Если я могу просто получить этот NSURL из приложения Watchkit в виде строки и в javascript моего родного приложения, я оттуда золотой.

ответ

2

В вашем WatchKit Extension WKInterfaceController, вы хотите, чтобы ссылаться на MMWormhole LIB (скомпилирован и включен в плагин) и сделать что-то вроде:

var wormhole: MMWormhole! 

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

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

Затем, чтобы отправить сообщение из приложения Кордова через Apple, смотрите плагин так, что он подобран слушатель WatchKit Extension:

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

в качестве альтернативы, если вы хотите установить значение, считываемые/записываемые как из вашего приложения Кордовы и WatchKit расширения, вы можете посмотреть на U петь NSUserDefaults, которые были реализованы только в плагине, так как этот вопрос был опубликован.

Надеюсь, что это поможет, полное приложение-образец или подробное сообщение в блоге будут доступны, когда я приеду к нему, и когда я узнаю Apple с одобрением этих методологий.

+0

Спасибо, Ли. Надежда Apple приходит - ваш плагин - фантастически простое решение для получения приложения cordova и расширения watchkit, разговаривающего друг с другом. – brianfit

+0

Apple одобрила это вчера - (бесстыдная ссылка, если вы хотите увидеть ее работу: https://itunes.apple.com/gb/app/sprint-social/id975135816) –

+0

Я ничего не могу понять о файле моста. .. мое расширение быстро, но я не могу вызвать MMWormhole точно так же – Steeve17