didReceiveRemoteNotification不是被一段时间后,当应用程序在后台发起导引



当应用程序在前台和后台时调用,如果它在后台由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不是一个有保证的交付。但这是一种低电池使用的方式来获取消息到你的应用程序。

最新更新