如何在 WatchOS2 中获取通知负载?
How to get Notification payload in WatchOS2?
我在当前的手表应用中实现了动态和静态通知。如果动态通知中有任何操作,即使我能够在 - (void)handleActionWithIdentifier:(NSString *)identifier forRemoteNotification:(NSDictionary *)remoteNotification
方法中接收事件。
- 现在我担心的是,如何在点击实际打开 WatchOS 应用程序的通知视图时收到任何 event/callback?
- 如何在通过点击通知启动应用程序时以任何方式获取推送通知负载?
在动态通知界面的情况下,我使用以下方法设置 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
我在当前的手表应用中实现了动态和静态通知。如果动态通知中有任何操作,即使我能够在 - (void)handleActionWithIdentifier:(NSString *)identifier forRemoteNotification:(NSDictionary *)remoteNotification
方法中接收事件。
- 现在我担心的是,如何在点击实际打开 WatchOS 应用程序的通知视图时收到任何 event/callback?
- 如何在通过点击通知启动应用程序时以任何方式获取推送通知负载?
在动态通知界面的情况下,我使用以下方法设置 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