当应用程序在前台和后台时调用,如果它在后台由apns推送。但过了一段时间它就不会被调用了由apns在后台启动。
// Required for the notification event. You must call the completion handler after handling the remote notification.
- (void)application:(UIApplication *)application didReceiveRemoteNotification:(NSDictionary *)userInfo
fetchCompletionHandler:(void (^)(UIBackgroundFetchResult))completionHandler
{
[RNCPushNotificationIOS didReceiveRemoteNotification:userInfo fetchCompletionHandler:completionHandler];
completionHandler(UIBackgroundFetchResultNewData);
}
在移动推送中有很多变数。
一个主要的原因是苹果声明只有一条消息会被排队,其余的都被丢弃。
https://developer.apple.com/documentation/usernotifications/setting_up_a_remote_notification_server/sending_notification_requests_to_apns
APNs每个bundle ID只存储一个通知。当你发送为bundle ID, apn向同一设备发送多个通知只选择一个通知以不确定的方式存储。
这个页面说每小时2或3个后台通知:https://developer.apple.com/documentation/usernotifications/setting_up_a_remote_notification_server/pushing_background_updates_to_your_app
系统允许的后台通知数量取决于在目前的情况下,但不要试图发送超过两三个每小时。
"取决于当前情况"真是个神奇的短语。
当前情况似乎包括:
- 是充电器上的手机
- 如果在电池上,它是低电量
- 设备是否有wifi/3G/无数据
- 手机最近一直在使用,还是已经闲置了一段时间
- 你的应用程序最近是否被使用过,或者在后台停留了很长时间
- 用户是否与你的通知交互,如果你创建它们。
- 苹果服务器有多忙
- 你的应用程序被"强制关闭"了吗
- 有多少其他通知将发送到此设备
- 您正在发送多少其他通知
- Cupertino是一个下雨的星期二吗?
最后一个…不太确定。
但我认为要点是:APNS不是一个有保证的交付。但这是一种低电池使用的方式来获取消息到你的应用程序。