【问题标题】:iOS Push Notifications with empty aps dictionary带有空aps字典的iOS推送通知
【发布时间】:2011-11-30 22:07:20
【问题描述】:
进行研究以尝试选择通知类型的方向。我希望能够通知我的应用程序有新数据要刷新,但不会通过弹出/通知消息打扰用户。这个想法是,如果应用程序打开或关闭,相同的通知就会发出,当这个“特殊”消息到达并且应用程序打开时,它知道要获取数据。
我的想法是在apple document 的底部发送一个空的 aps 字典,如示例 5。
我的问题是收到此类消息时会发生什么?它说它会清除徽章,但会向用户显示某种默认消息吗?还是会完全沉默?
跟进问题,除了检查应用程序是否正在运行并告诉我的服务器开始发送“特殊”有效负载(我想通过推送处理所有事情)之外,还有其他更好的方法吗?
【问题讨论】:
标签:
ios
push-notification
apple-push-notifications
【解决方案1】:
如果字典中没有指定标记、警报和声音(对于“aps”键),则不会出现默认消息,并且会完全静音。
再次查看您引用的文档中的示例 5。 aps 可以为空,您可以像使用“acme2”键一样指定您想要的任何自定义数据。 “acme2”数据是服务器的“特殊”有效负载可以驻留在 JSON 有效负载中的一个示例。
您无需告诉服务器您的应用正在运行。无论您的应用程序是否正在运行,服务器都可以通过 APNS 发送特殊有效负载,并且您将通过以下两种方式之一接收该特殊有效负载(当然,假设推送确实到达了设备......这不能保证):
- 如果您的应用程序在前台,那么 iOS 将不会拦截通知。您将在您的应用代理的 application:didReceiveRemoteNotification: 方法中收到通知(前提是您的应用代理确实覆盖了该方法)。
- 如果 iOS 确实拦截了您的推送,那么当您选择启动应用程序以响应通知时,您将需要在应用程序委托的 application:didFinishLaunchingWithOptions: 方法中检索“推送字典”,如下例所示:
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {
[self application:application didReceiveRemoteNotification:[launchOptions objectForKey:UIApplicationLaunchOptionsRemoteNotificationKey]];
}