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

时间:2016-04-26 10:04:58

标签: objective-c push-notification apple-push-notifications watchkit watch-os-2

我在当前的Watch App中实现了动态和静态通知。如果动态通知中有任何操作,我甚至可以使用- (void)handleActionWithIdentifier:(NSString *)identifier forRemoteNotification:(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];

1 个答案:

答案 0 :(得分:1)

我会针对您的Watch App的扩展代表调查以下委托方法,以回答您的两个问题:

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

周长:

  • 标识符:等于“”(空NSString)如果应用程序启动时没有点击其中一个通知按钮,或等于您设置为通知操作按钮的标识符,如果用户通过点击一个启动应用程序通知的动作按钮。
  • remoteNotification:远程通知附带的有效负载。它采用Dictionary的格式,因此您可以从此对象获取有效负载。

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

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

<强>更新

根据Apple的说法,静态通知“不得包含控件,表格,地图或其他交互元素”,因为如果无法及时启动交互式通知,则只能将其用作后备。来源:Apple watchOS Developer Library

来源和/或其他资源:

Apple Developer: WK InterfaceController Class Reference

Apple Developer: The Remote Notification Payload

Apple Developer: Notification Essentials for watchOS