- r - 以节省内存的方式增长 data.frame
- ruby-on-rails - ruby/ruby on rails 内存泄漏检测
- android - 无法解析导入android.support.v7.app
- UNIX 域套接字与共享内存(映射文件)
我已经实现了静默推送通知,但我注意到一些奇怪的行为。静默推送通知通过以下方式处理:
- (void)application:(UIApplication *)application didReceiveRemoteNotification:(NSDictionary *)userInfo fetchCompletionHandler:(void (^)(UIBackgroundFetchResult))completionHandler
静默推送消息似乎仅在设备正在充电(即连接电缆)和/或我的应用程序处于前台时才会收到。
如果我断开设备与充电器(或 Mac)的连接,则不再接收静默推送通知除非应用程序在前台。
在这两种情况下,我通常都会收到非静默推送通知。
如果我再次插入 USB 数据线,那么无论应用是在前台还是后台,我都会收到预期的行为和静默推送通知。
我正在使用 UILocalNotification,所以我知道收到了什么。
在连接的设备上它一切正常的事实表明我的静默推送通知配置正确并且应用程序在 plist 等中设置了正确的背景模式。
此行为在运行 IOS 8 或 8.1 的 iPhone 5s、6 和 iPad 2 上可重复。
有没有人遇到过这种情况?它应该很容易重现。为什么将设备插入充电器这一简单操作会改变接收静默推送通知的能力?
最佳答案
我们遇到过相同的行为,并且一直在努力理解为什么 iOS 决定提供一些通知而不是其他通知。
到目前为止我们已经解决的问题是:
与蜂窝数据相比,使用 wifi 时在后台更可靠地接收消息。事实上,在蜂窝网络(3g/4g)上,如果你的信号强度不够强,iOS 会收到推送消息,但不会唤醒你的应用程序。我们在苹果论坛上发布了关于它的信息:https://devforums.apple.com/message/1069814#1069814 .我们还打开了一张支持票,支持团队告诉我们将其作为错误报告提交,我们几周前就这样做了,现在仍在等待回复。
当您收到推送消息时,您需要尽快调用 fetchCompletionHandler。从技术上讲,你有 30 秒的时间来执行后台处理,但 iOS 有一个公式,你发送推送消息的频率越高,并且根据你在将应用程序返回挂起状态之前处理这些消息所花费的时间,iOS 可以减少数量您的应用在未来被唤醒的次数。
从这里查看 Apple didReceiveRemoteNotification:fetchCompletionHandler:文档:
As soon as you finish processing the notification, you must call the block in the handler parameter or your app will be terminated. Your app has up to 30 seconds of wall-clock time to process the notification and call the specified completion handler block. In practice, you should call the handler block as soon as you are done processing the notification. The system tracks the elapsed time, power usage, and data costs for your app’s background downloads. Apps that use significant amounts of power when processing push notifications may not always be woken up early to process future notifications.
在我们的测试中,我们一直在向我们的应用程序发送频繁的静默推送通知(每 10 - 30 秒)。在我们让它重新进入休眠状态之前,该应用程序会唤醒大约 3 秒钟。随着时间的推移,我们确实注意到我们的应用程序被唤醒的频率下降到 iOS 只会每 15 - 30 分钟唤醒一次应用程序。因此,似乎存在某种衰减/节流公式,但我们找不到有关其具体工作原理的任何文档。我们已向 apple 请求此公式和变量作为支持请求,但他们说“您请求的信息不公开”,并再次要求我们提交错误报告。
那么,希望这对您有所帮助?我们仍在尝试自己学习更多,这就是为什么我发现了这个问题:)
关于ios - 静默推送通知仅在设备正在充电和/或应用程序处于前台时发送,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26959472/
代码 但是因为 $txt 位于 $txt='thankyou'; 的顶部,当对话框加载时什么也不显示。无论如何,无需更改 $txt 中设置的代码余额??? 最佳答案 您必须重新排序您的代
我正在我的网站上测试 Stripe,但无法通过下面看到的“尝试”。基本上,我从来没有在“尝试”之后看到“测试”。 我是不是做错了什么? try { $charge = Stripe_Charge
我正在用 CSFML 制作一个游戏,用于学校练习 为了满足所有要求,我必须设计一个遵循有限运行规则的游戏,例如几何冲刺。除了一个主要功能之外,它可以完成所有操作:从文件中获取 map ,如下所示: X
我已尝试进行尽可能多的研究,但找不到这个相当简单的问题的答案(我想在设置 SDK 和所有内容之前弄清楚这个问题)。我在想关于开发我的第一个应用程序,我想知道 BatteryManager 中的 BAT
我知道这不太可能,但是有没有办法(以编程方式)在手机连接到充电器时停止充电? 谢谢。 最佳答案 没有。您可以在 UIDevice 上使用多种方法来监控电池状态,但不太可能有 API 来阻止充电。 关于
我正在快速制作一个应用程序,我需要知道电池是否正在充电。我知道我可以使用 UIDevice.currentDevice().batteryState,但是当它处于 100% 时,它返回 .Full 而
我在通过 Stripe 向用户收费时遇到问题。我在以下委托(delegate)方法中收到的 paymentResult 对象 func paymentContext(_ paymentContext:
我目前正在尝试实现亚马逊 ec2,我读到一年后他们会向您收费。我之前使用过谷歌应用程序引擎(使用java),并且有一个可以启用/禁用充电的功能。我只是想尝试免费的 ec2 实例,所以这是我的问题: A
我想实现一个 Stripe 支付表单,但我收到一个 fatal error Class 'Stripe\Charge.类(class)在那里(见我的文件夹树),我试过了: $charge = \St
下面有一段代码,我想知道是否可以在结帐过程的“成功标记”中进行 Stripe 收费?下面的所有代码都有效,我只是想知道我将在哪里插入创建acctuall费用的代码。 Pay
我正在尝试在充电失败时检索 Stripe 充电 ID,因此当 charge.failed Hook 被触发时,我可以通过该 id 检索我的记录。我尝试检查触发的异常,但找不到任何方法来获取它。这是我的
我知道我们可以使用 UIDeviceBatteryState 确定电池状态,但我找不到如何检测是否只将电缆插入设备(仅添加 30 针或闪电)设备)。 当我检查 UIDeviceBatteryState
我尝试使用命令 setprop persist.usb.chgdisabled 1 连接到 USB 端口型号 HTC Nexus 一台已 root 的设备(android 版本 2.3.3)时禁用充电
我正在编写一个基于位置的应用程序,并希望获得一些关于合理使用 API 的智慧。 到目前为止,我所了解的是使用 int 更有效率。我将需要存储大量它们并进行大量距离计算。 我的应用程序使用实现 Loca
我目前正在编写一个 iOS 应用程序,并且正在接收电池状态更改通知。当然,当我调试我的应用程序时,如果我可以在不拔掉手机电源的情况下切换电池状态,那就太好了。有什么方法可以通过 OS X 或 XCod
所以这是我的问题,我一直在关注应用引擎用户的 github 自述文件,以便在我的应用程序中实现 strip 化,但问题是我无法让它工作,因为 http.DefaultTransport 和 http
我是一名优秀的程序员,十分优秀!