在iOS 7中,应用无法响应Newsstand通知(在iOS 6及更早版本中可以正常工作)

3
我们在应用商店上构建了一个新闻应用,使用的是Xcode 4。我们发现,当应用处于后台运行时,对于运行iOS 7的设备,远程通知不再转发到我们的应用程序。如果设备在前台运行,则会收到通知并处理它。
此外,在运行iOS 6及更早版本的设备上,这些通知会被正确地处理和处理。
通过在设备上启用持续日志记录,我们可以看到iOS 7设备收到通知,但从未调用“- [UIApplication application: didReceiveRemoteNotification:]”。
评估运行iOS 5/6/7的设备日志,我们看到远程通知进入:
Oct 24 11:24:22 iPad-Retina apsd[82] <Warning>: 2013-10-24 11:24:22 +0200 apsd[82]: <APSCourier: 0x14d8c7b0>: Received message for enabled topic 'com.companyname.ourapp' with payload '{
        aps =     {
        "content-available" = 1;
        importantInformation = @"23";
        sound = "";
    };
    }' onInterface: NonCellular  for device token: NO  with priority (null)

在iOS 7上,该通知不会被转发到应用程序中,但在早期版本的iOS上,我们可以看到对以下方法的调用:
Oct 24 11:24:20 Pad2-3G Magic[1328] <Warning>: -[ApplicationDelegate application:didReceiveRemoteNotification:]

我们的新闻推送通知已经成功处理。

有没有办法在使用iOS 6 SDK的情况下确保iOS 7设备的新闻下载操作成功?

至少目前来说,不涉及使用Xcode 5和iOS 7 SDK的答案更可取,直到我们进行应用程序重新设计。

提前致谢。

1个回答

2
我们成功解决了以下问题,假设如下:
iOS 7在UIApplicationDelegate中引入了`-application:didReceiveRemoteNotification:fetchCompletionHandler:`。我们猜测通知未被接收的原因可能是iOS试图检查应用程序委托是否响应更新的选择器。
自然地,Xcode 4没有`UIBackgroundFetchResult`,所以该方法可以使用`NSUInteger`简单实现。因此,我们在应用程序委托中添加了该方法:
- (void)application:(UIApplication *)application 
  didReceiveRemoteNotification:(NSDictionary *)userInfo
  fetchCompletionHandler:(void (^)(NSUInteger result))handler 
{
    [self application:application didReceiveRemoteNotification:userInfo];
    handler(0);
}

此外,我们需要在应用程序的plist中将远程通知添加到UIBackgroundModes中。使用Xcode 4构建代码并安装到任何iOS 7设备上成功解决了问题,并允许我们提交到商店。希望这个答案能帮助其他处于同样境地的人。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接