如何将 Iphone 的远程通知传递给 Watch OS?
Posted
技术标签:
【中文标题】如何将 Iphone 的远程通知传递给 Watch OS?【英文标题】:How to pass the remote notifications I have for Iphone to Watch OS? 【发布时间】:2017-10-23 16:49:36 【问题描述】:我正在开发一个非常庞大的应用程序,它已经具有远程推送通知。此通知还包括 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,但我不知道在该设备上的何处声明此远程通知。
【问题讨论】:
您是否实际测试过通知是否正在显示?看看notification essentials,这应该是自动发生的。 通知显示在 Iphone 和 Ipad 上,问题不在于通知,问题是我不知道如何在 Apple Watch 设备上显示它们。 好的,但您确定它们没有显示在手表中吗?请记住,推送通知仅适用于物理设备,不适用于模拟器。 您不能专门将通知路由到 Apple Watch,如果用户允许该应用程序这样做,ios 会在手表上显示通知,并且 iOS 认为用户没有积极使用手机(例如锁定)。在您的手表扩展程序中,您可以添加代码来处理发送到手表时的通知格式 好的,就是这个问题,我尝试在手表模拟器上查看通知,所以现在我要在物理设备上尝试,非常感谢!!! 【参考方案1】:根据Apple Watch Notification Essentials:
Apple Watch 在适当的时间显示通知。当其中之一 您的应用程序的本地或远程通知到达用户的 iPhone, iOS 决定是在 iPhone 上还是在 iPhone 上显示该通知 苹果手表。
因此,您无需添加额外代码即可在 Apple Watch 上显示您的通知(如果您想实现一些自定义通知操作,那就是另一个 story)。请记住,默认情况下只能在物理设备上测试推送通知,正如您所评论的,这就是您无法在模拟器中收到通知的原因。
这是library to test remote notifications on iOS Simulator(我找不到有人用 Apple Watch 模拟器测试过这个,你必须试一试)。
【讨论】:
以上是关于如何将 Iphone 的远程通知传递给 Watch OS?的主要内容,如果未能解决你的问题,请参考以下文章
如何将一些消息或字符串从 iPhone 设备传递到配对的 Apple Watch
Apple 推送通知如何在 iPhone 应用程序中传递给用户?
如何在没有 Apple Watch 应用的情况下使用 cordova 在 Apple Watch 上获取 iPhone 应用的推送通知?