iOS推送通知 - 如何在单击应用程序图标而不是通知时获取通知数据

How*_*ard 35 iphone xcode push-notification apple-push-notifications ios

与此问题类似:如何在applicationDidBecomeActive上访问远程推送通知数据?

但不同的是,当您进入时applicationDidBecomeActive,如果您单击了应用程序图标而不是推送通知,您如何访问通知数据.

流程是:如果你点击push notification,然后didReceiveRemoteNotification将被触发,但如果你点击原来的应用程序图标,只applicationDidBecomeActive将被触发,didReceiveRemoteNotification将不会被调用.

我正在寻找后一种情况,以便如何访问推送通知数据.

(两种情况都假设应用程序处于后台并且尚未被杀死.)

fan*_*ard 36

通过从主屏幕启动应用程序,您无法获得远程推送有效负载.

如果推送数据对于应用程序使用很重要,请在启动应用程序后从服务器加载它.

  • 要继续这个轨迹,您可以在应用程序启动时向您的服务器发送一个小的有效负载,然后让您的服务器监听该有效负载并立即推送数据.这将是我能想到的最接近的解决方法,以实现您的目标. (2认同)

msk*_*msk 6

@fannheyward的回答绝对正确.通过点击应用程序图标启动应用程序时无法获得有效负载.

我有一个想法,如果你通过点击应用程序图标启动应用程序时会知道某些通知处于待处理状态.有了这些知识,您的应用程序可以从服务器获取有效负载.

你可以在每个这样的通知中设置"Badge",在applicationDidBecomeActive上你可以检查[application applicationIconBadgeNumber]> 0来知道某些通知是活动的.从服务器获取有效负载后,您可以将其设置为0,如下所示

[UIApplication sharedApplication] setApplicationIconBadgeNumber:1];
[[UIApplication sharedApplication] setApplicationIconBadgeNumber:0];
Run Code Online (Sandbox Code Playgroud)

请注意:这意味着您的应用会在收到通知时显示徽章.我不确定用户从设置中禁用徽章时的行为.