Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/objective-c/23.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Objective c 如何在WatchOS2中获取通知负载?_Objective C_Push Notification_Apple Push Notifications_Watchkit_Watchos 2 - Fatal编程技术网

Objective c 如何在WatchOS2中获取通知负载?

Objective c 如何在WatchOS2中获取通知负载?,objective-c,push-notification,apple-push-notifications,watchkit,watchos-2,Objective C,Push Notification,Apple Push Notifications,Watchkit,Watchos 2,我在当前的Watch应用程序中实现了动态和静态通知。即使是我,在动态通知中发生任何操作时,也能够在-(void)handleActionWithIdentifier:(NSString*)remoteNotification的标识符:(NSDictionary*)remoteNotification方法中接收事件 现在我关心的是,如何在点击实际打开WatchOS应用程序的通知视图时接收任何事件/回调 在启动应用程序时,如何通过点击通知以任何方式获取推送通知负载 在动态通知界面的情况下,我使用

我在当前的Watch应用程序中实现了动态和静态通知。即使是我,在动态通知中发生任何操作时,也能够在
-(void)handleActionWithIdentifier:(NSString*)remoteNotification的标识符:(NSDictionary*)remoteNotification
方法中接收事件

  • 现在我关心的是,如何在点击实际打开WatchOS应用程序的通知视图时接收任何事件/回调
  • 在启动应用程序时,如何通过点击通知以任何方式获取推送通知负载
在动态通知界面的情况下,我使用以下方法设置UI。但是,静态的情况就不是这样了

- (void)didReceiveRemoteNotification:(NSDictionary *)remoteNotification withCompletion:(void (^)(WKUserNotificationInterfaceType))completionHandler { 
    NSLog(@"%@",remoteNotification);
    completionHandler(WKUserNotificationInterfaceTypeCustom);
}
编辑

我在appdelegate中添加了以下代码以注册通知

UIUserNotificationType userNotificationTypes = (UIUserNotificationTypeAlert | UIUserNotificationTypeBadge | UIUserNotificationTypeSound);
        UIUserNotificationSettings *settings = [UIUserNotificationSettings settingsForTypes:userNotificationTypes categories:nil];
        [application registerUserNotificationSettings:settings];
        [application registerForRemoteNotifications];

关于您的Watch应用程序的extension delegate,我将研究以下委托方法,以回答您的两个问题:

- (void)handleActionWithIdentifier:(NSString *)identifier forRemoteNotification:(NSDictionary *)remoteNotification
周长:

  • 标识符:如果未点击通知按钮启动应用程序,则等于“”(空
    NSString
    ),或者如果用户点击通知按钮启动应用程序,则等于您为通知操作按钮设置的标识符
  • remoteNotification:远程通知附带的有效负载。它的格式是字典,因此您可以从该对象获取有效负载
对问题1的回答: 当用户启动应用程序时,如果已实现,将调用此方法,并允许您根据用户的选择重新配置应用程序

对问题2的回答: 有效负载具有Apple Notification有效负载字典的传统结构。
aps
键包含
警报
信息和
徽章
信息。然后,您的自定义数据将附加到整个字典。要访问它,如果使用键“testKey”配置负载字典,则可以使用
remoteNotification[@“testKey”]
访问它

更新

根据苹果公司的说法,静态通知“不得包括控件、表格、地图或其他交互元素”,因为只有在交互通知无法及时启动的情况下,静态通知才能用作备用。来源:

来源和/或额外资源:


在我的情况下,此方法在点击通知时未被调用。@Mrug您是否已按照本文档的规定,通过调用UIApplication.sharedApplication().registerUserNotificationSettings(设置)注册了用户通知设置?我已在appdelegate中添加了要注册的代码。我刚刚更新了答案。根据苹果的watchOS开发者库,静态通知UI不应该有任何交互按钮,这就是为什么它没有触发任何方法。这回答了你的问题吗?我没有只使用静态通知,动态和静态都是这样。他们都没有提供任何回电。