Как передать удаленные уведомления, которые я имею для Iphone, чтобы Смотреть OS?
Я разрабатываю очень большое приложение, которое уже имеет удаленные push-уведомления. Эти уведомления также включают уведомления Facebook, и они очень хорошо отображаются на iPhone и iPad. Дело в том, что теперь мне нужно показывать те же уведомления на Apple Watch, и я понятия не имею, как я могу это сделать.
Это мой AppDelegate, где я объявляю удаленные уведомления:
func handleNotification(_ application: UIApplication,userInfo: [AnyHashable: Any]) {
if let notification = userInfo["notification"] as? NSDictionary {
let notiicationInfo = notification
let notiicationAPS = userInfo["aps"] as! NSDictionary
let type = notiicationInfo["type"] as! String!
let name = notiicationInfo["name"] as! String!
let value = notiicationInfo["value"] as! String!
let message = notiicationAPS["alert"] as! String!
NSLog("notiicationInfo \(notiicationInfo)")
var promotions : [[String:Any]]? = []
promotions!.append(["id": name as AnyObject, "name":message as AnyObject, "creative":"" as AnyObject, "position":"1" as AnyObject])
if let customBar = self.window!.rootViewController as? CustomBarViewController {
if (application.applicationState == UIApplicationState.background || application.applicationState == UIApplicationState.inactive)
{
let dataLayer: TAGDataLayer = TAGManager.instance().dataLayer
dataLayer.push(["ecommerce": ""])
dataLayer.push(["ecommerce": NSNull()])
dataLayer.push(["event": "promotionClick", "ecommerce": [ "promoClick" : ["promotions": promotions!] ] ] )
let delay = 2.0 * Double(NSEC_PER_SEC)
let time = DispatchTime.now() + Double(Int64(delay)) / Double(NSEC_PER_SEC)
DispatchQueue.main.asyncAfter(deadline: time, execute: {
customBar.handleNotification(type!,name:name!,value:value!)
})
}
else {
let dataLayer: TAGDataLayer = TAGManager.instance().dataLayer
dataLayer.push(["ecommerce": ""])
dataLayer.push(["ecommerce": NSNull()])
dataLayer.push(["ecommerce": ["promoView":["promotions": promotions!] ],"event":"ecommerce" ])
_ = AlertController.presentViewController(message!,
icon:UIImage(named:"alerta_hello.png"),
titleButton: NSLocalizedString("general.continue",comment:""),
action: {() in
let dataLayer: TAGDataLayer = TAGManager.instance().dataLayer
dataLayer.push(["ecommerce": ""])
dataLayer.push(["ecommerce": NSNull()])
dataLayer.push(["event": "promotionClick", "ecommerce": [ "promoClick" : ["promotions": promotions!] ] ] )
if let controller = UIApplication.shared.keyWindow?.rootViewController {
if controller.presentedViewController != nil {
if let tutController = controller.presentedViewController as? ImageDisplayCollectionViewController {
tutController.closeModal()
}
}
}
customBar.handleNotification(type!,name:name!,value:value!)
}
)
}
}
UIApplication.shared.applicationIconBadgeNumber = 0
UIApplication.shared.cancelAllLocalNotifications()
}
}
Кто-нибудь знает, что я должен добавить в свой код для отображения этих уведомлений на Apple Watch? Я уже добавил Watch Os Target, но я не знаю, где объявить это удаленное уведомление на этом устройстве.
1 ответ
В соответствии с Apple Watch Notification Essentials:
Apple Watch отображает уведомления в соответствующее время. Когда одно из локальных или удаленных уведомлений вашего приложения поступает на iPhone пользователя, iOS решает, отображать ли это уведомление на iPhone или на Apple Watch.
Таким образом, вам не нужно добавлять дополнительный код для того, чтобы ваши уведомления отображались на Apple Watch (если вы хотите выполнить какое-то пользовательское действие по уведомлению, это другая история). Помните, что push-уведомления можно тестировать только на физических устройствах по умолчанию, как вы прокомментировали, поэтому вы не могли получать уведомления в симуляторе.
Вот библиотека для тестирования удаленных уведомлений на iOS Simulator (я не смог найти, если кто-то проверял это с Apple Watch Simulator, вам придется попробовать).