gpt4 book ai didi

ios - 应用程序不响应 iOS 7 中的报亭通知(适用于 iOS 6 及更早版本)

转载 作者:搜寻专家 更新时间:2023-10-30 20:18:39 31 4
gpt4 key购买 nike

我们在商店中有一个使用 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 至少在我们重新设计应用程序之前至少目前是更可取的。

提前致谢

最佳答案

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

iOS 7 在 UIApplicationDelegate 中引入了 -application:didReceiveRemoteNotification:fetchCompletionHandler:,我们假设未收到通知的原因可能是 iOS 正在测试查看应用程序委托(delegate)是否响应较新的选择器。

当然,Xcode 4 没有 UIBackgroundFetchResult,因此可以使用 NSUInteger 简单地实现该方法。所以我们在我们的应用程序委托(delegate)中添加了这个方法:

- (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 构建代码成功解决了这个问题并允许我们提交到商店。

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

关于ios - 应用程序不响应 iOS 7 中的报亭通知(适用于 iOS 6 及更早版本),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19563331/

31 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com