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 是更可取的。

提前致谢

4

1 回答 1

2

我们使用以下假设设法解决了这个问题:

中引入的 iOS 7-application:didReceiveRemoteNotification:fetchCompletionHandler:UIApplicationDelegate,我们假设未收到通知的原因可能是 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 添加远程通知。

在任何 iOS 7 设备上使用 Xcode 4 构建代码成功地解决了问题并允许我们提交到商店。

我希望这个答案可以帮助其他处于相同位置的人

于 2013-11-05T14:50:04.363 回答