iOS报亭:推送通知不会在后台启动应用程序

时间:2012-08-31 15:07:27

标签: ios push-notification newsstand-kit

我正在应用程序中实现报亭功能,虽然应用程序收到推送通知,但它不会以后台模式启动。
如果我点击通知提醒应用程序启动,我可以看到“内容可用”:字典中存在1,问题也已下载,但应用程序不会自动启动。

我已添加到plist:

<key>UIBackgroundModes</key>
<array>
    <string>newsstand-content</string>
</array>

和didFinishLaunchingWithOptions:

[[NSUserDefaults standardUserDefaults]setBool: YES forKey:@"NKDontThrottleNewsstandContentNotifications"]; // for testing purposes
    [[NSUserDefaults standardUserDefaults] synchronize];

[[UIApplication sharedApplication] registerForRemoteNotificationTypes:(UIRemoteNotificationTypeBadge | UIRemoteNotificationTypeSound | UIRemoteNotificationTypeAlert | UIRemoteNotificationTypeNewsstandContentAvailability )];

我也看到我的应用未显示在设置 - &gt;下商店 - &gt;自动下载(以及其他杂志出现在那里)。

我错过了什么吗?这应该适用于沙盒环境吗?

5 个答案:

答案 0 :(得分:2)

一些澄清

  1. 如果您没有在报亭有效载荷中发送“警报” 只有内容可用:1,其中没有任何内容可以添加 通知中心。
  2. 报亭通知启动应用程序并不意味着应用程序将进入前台(如果用户点击了应用程序图标)。这只是意味着如果应用程序不在后台,它将由iOS在后台启动 - &gt;调用appDelegate的didFinishLaunchingWithOptions,应用程序应检查它是否是报亭通知,通过在报亭队列中添加资产来安排下载。资产路径可以是NS有效负载的一部分(提供&lt;有效负载限制256字节)
  3. NSDictionary * payload = [launchOptions objectForKey:UIApplicationLaunchOptionsRemoteNotificationKey];

    if(payload&amp;&amp; [[payload objectForKey:kContentAvailablePush] caseInsensitiveCompare:@“1”] == NSOrderedSame) {   NSLog(@“由于NS通知而推出”); }

答案 1 :(得分:1)

您必须注册报摊通知才能显示在“设置”中并收到“报摊通知”。要注册,请将其添加到application:didFinishLaunchingWithOptions:

// Add registration for newsstand notifications
// In your application:didFinishLaunchingWithOptions:

[[UIApplication sharedApplication] registerForRemoteNotificationTypes:
  UIRemoteNotificationTypeNewsstandContentAvailability];

将要求用户接受后台下载。

请查看有关报摊应用的完整教程:http://www.viggiosoft.com/blog/blog/2011/10/17/ios-newsstand-tutorial/

答案 2 :(得分:0)

确保在你的plist中设置了UINewsstandApp = YES

答案 3 :(得分:0)

{"aps": {"badge": 1, "alert": "test","content-available":1}}这是一个正确的有效载荷。 {"aps": {"badge": 1, "alert": "test"},"content-available":1}这是一个错误的有效载荷。

答案 4 :(得分:-1)

当有效内容可用时,会发生这种情况:

  • 如果应用已暂停,系统会将其带入后台
  • 如果用户被杀没有任何反应且应用仍处于未运行状态

必须有一个用户操作来启动应用程序,主要是通过将警报消息添加到推送通知中。

<强>来源

http://samwize.com/2015/08/07/how-to-handle-remote-notification-with-background-mode-enabled/

然而,这并不能解决您的问题。作为解决方法,您可以使用后台提取,它会在每个特定时间间隔唤醒应用程序。