iOS 在应用被终止时不会收到推送通知



我在Stack Overflow上发现了类似的问题,但没有一个澄清了这一点。

我正在使用 Firebase 云消息功能在我的应用中发送推送通知。我将收到的消息存储在本地数据库中。当我的应用处于活动状态或在后台运行时,我的应用能够接收通知(正确调用委托方法(,但如果应用被强制退出或不在内存中,则设备也会接收通知并位于通知中心,但在应用启动时由图标调用的无委托方法。如果用户单击通知中心中的"消息",则会启动应用,但仅接收单击的消息,而不是所有消息(在收到多个通知的情况下(。 根据Apple的说法 -如果用户强制退出应用程序,系统不会自动启动您的应用程序。在这种情况下,用户必须重新启动你的应用或重新启动设备,然后系统才会尝试再次自动启动你的应用

但是,即使用户启动了应用程序,仍然没有收到已收到并位于通知中心的通知。

以下是该应用程序遵循的要点:

  • 我的应用程序没有 VoIP 功能。
  • 可用内容已设置为 1。
  • 已启用接收后台远程通知。
  • 已收到所有发送的通知,并显示在通知中心。

{
aps =     {
alert =         {
body = "Push Notification Test Message";
title = Push Notification;
};
badge = 1;
"content-available" = 1;
sound = default;
};
"gcm.message_id" = "0:1499340350307980%361a2e5b361a2e5b";
m = "Push Notification Test Message";
tag = m;
}
  1. 如果应用程序被强制退出或不在内存中,则您的应用程序将不会收到静默通知(即内容可用设置为 1(。 在上述情况下,仅接收推送通知。

  2. 如果用户单击通知中心中的"消息",则会启动应用,并且只有单击的消息才会在委托方法中接收。您无法访问通知托盘中的所有消息。

如果应用程序未运行,则无法获取应用程序的推送通知。这是限制.您只能获取和清除本地通知。因此,解决问题的另一种方法是在发送通知时将通知保存在后端。然后在启动应用程序后,可以从服务器获取通知列表,并将其与id匹配。您可以在通知播放加载中发送所需的任何参数。

你的应用不应依赖于推送通知的传递。 正如您所发现的,不能保证推送通知的传递。

即使您的应用未终止,您也可能不会收到所有通知; 例如,如果设备处于飞行模式并发送了多个通知,则当设备重新联机时,只会发送最后一个通知。

您的应用程序应在启动或收到通知时与服务器检查新消息,以便"赶上"。

您还可以考虑在静默通知中包含消息负载。 如果你的应用终止,这将向用户显示,以提示他们打开你的应用。

您需要处理从任何通知上点击打开应用程序时推送通知的方法。一旦你点击通知应用程序将醒来并午餐它。

在didFinishLaunchingWithOptions中,您需要输入以下条件:

if (launchOptions[UIApplicationLaunchOptionsRemoteNotificationKey]) {
NSMutableDictionary *dic = [[NSMutableDictionary alloc] initWithDictionary:[launchOptions valueForKey:UIApplicationLaunchOptionsRemoteNotificationKey]];
}

点击通知时,它还调用了以下方法:

- (void)application:(UIApplication *)application didReceiveRemoteNotification:(NSDictionary *)userInfo fetchCompletionHandler:(void (^)(UIBackgroundFetchResult result))handler
{
}

相关内容

  • 没有找到相关文章

最新更新