- Java 双重比较
- java - 比较器与 Apache BeanComparator
- Objective-C 完成 block 导致额外的方法调用?
- database - RESTful URI 是否应该公开数据库主键?
我们在商店中有一个使用 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/
我安装了 fakeLoader (jquery 预加载器)但我无法在页面加载前显示它。 在 mozilla 中它几乎可以正常工作(奇怪的是......),但在 Chrome 和 Opera 中,页面首
我试图通过以下代码在触摸事件上移动 ImageView: public class ScrollableImageView extends ImageView { private Gestur
我是一名优秀的程序员,十分优秀!