使用空aps字典的iOS推送通知

时间:2011-11-30 22:07:20

标签: ios push-notification apple-push-notifications

进行研究以尝试选择通知类型的方向。我希望能够通知我的应用程序有新的数据需要刷新,但不会打扰用户弹出/通知消息。我们的想法是,如果应用程序处于打开或关闭状态,并且当此“特殊”消息到达并且应用程序处于打开状态时它会知道要获取数据,则会发出相同的通知。

我的想法是在apple document的底部发送一个空的aps字典,例如示例5。

我的问题是收到此类邮件后会发生什么?它说它会清除徽章,但会向用户显示某种默认消息吗?或者这会完全沉默吗?

跟进问题,除了检查应用程序是否正在运行并告诉我的服务器开始发送“特殊”有效负载(我想通过推送处理所有内容)之外,还有更好的方法吗?

1 个答案:

答案 0 :(得分:9)

如果字典中没有标记,没有警报,也没有指定声音(对于“aps”键),则不会显示默认消息,它将完全静音。

再次查看您引用的文档中的示例5。 aps可以为空,您可以使用“acme2”键指定您想要的任何自定义数据。 “acme2”数据是服务器的“特殊”有效负载可以驻留在JSON有效负载中的示例。

您无需告知服务器您的应用正在运行。无论您的应用程序是否正在运行,服务器都可以通过APNS发送特殊有效负载,并且您将以两种方式之一接收该特殊有效负载(当然假设推送到达设备......这是无法保证的):

  1. 如果您的应用程序位于前台,则iOS不会拦截通知。您将在app delegate的应用程序中收到通知:didReceiveRemoteNotification:method(假设您的app委托确实覆盖了该方法)。
  2. 如果iOS确实拦截了您的推送,那么当您选择启动应用程序以响应通知时,您将需要在应用程序委托的应用程序中检索“推送字典”:didFinishLaunchingWithOptions:方法,如下例所示: / LI>
    - (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {
        [self application:application didReceiveRemoteNotification:[launchOptions objectForKey:UIApplicationLaunchOptionsRemoteNotificationKey]];
    }