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

How to get Notification payload in WatchOS2?

我在当前的手表应用中实现了动态和静态通知。如果动态通知中有任何操作,即使我能够在 - (void)handleActionWithIdentifier:(NSString *)identifier forRemoteNotification:(NSDictionary *)remoteNotification 方法中接收事件。

在动态通知界面的情况下,我使用以下方法设置 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 App 的扩展委托,我会研究以下委托方法来回答您的两个问题:

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

周长:

  • 标识符:如果应用程序是在没有点击通知按钮之一的情况下启动的,则等于“”(空NSString),或者如果用户通过以下方式启动应用程序,则等于您为通知操作按钮设置的标识符点击通知的操作按钮之一。
  • remoteNotification:远程通知自带的payload。它是一个字典的格式,所以你可以从这个对象中获取负载。

问题 1 的答案: 当用户启动应用程序时,如果实现,将调用此方法并允许您根据用户的选择重新配置应用程序。

问题 2 的答案: 有效负载具有 Apple Notification Payload 字典的传统结构。 aps 键包含 alert 信息和 badge 信息。然后您的自定义数据将附加到整个词典。要访问它,如果您使用键 "testKey" 配置有效负载字典,则可以使用 remoteNotification[@"testKey"].

访问它

更新

根据 Apple 的说法,静态通知 "must not include controls, tables, maps, or other interactive elements," 因为如果无法及时启动交互式通知,它仅用作后备。资料来源:Apple watchOS Developer Library.

来源and/or 其他资源:

Apple Developer: WK InterfaceController Class Reference

Apple Developer: The Remote Notification Payload

Apple Developer: Notification Essentials for watchOS