尽管 content_available = true,但没有在后台调用 didReceiveRemoteNotification

Posted

技术标签:

【中文标题】尽管 content_available = true,但没有在后台调用 didReceiveRemoteNotification【英文标题】:didReceiveRemoteNotification no called in background although content_available = true 【发布时间】:2016-09-25 11:02:46 【问题描述】:

我在我的应用程序中使用推送通知,它工作正常,但如果我的应用程序在后台但没有调用方法 didReceiveRemoteNotification,我想收到通知 我生气了 1- 启用背景模组 2- 检查远程通知 3- 将 content_available = true 放入数据有效负载 而且当我从 fcm 仪表板测试它不起作用时, 谁能帮帮我,谢谢。

【问题讨论】:

【参考方案1】:

如果您在 ios 10 上进行测试,content_available 必须在 notification 键的 JSON 值中,而不是在 data 键中。虽然对于iOS <= iOS 9content_available 可以在JSONdatanotification 中。

【讨论】:

嗨,我发现疯狂通知在后台不起作用的原因是我发送了带有警报键的有效负载,而当我仅使用 content_available 和声音键发送 aps 时,它就起到了魅力 :) 的作用,但是我认为这是不对的。【参考方案2】:

您的应用需要处理所有可能的推送通知传递状态:

您的应用刚刚启动 您的应用刚刚从后台带到前台 您的应用程序已经在前台运行 您无法在交付时选择使用何种呈现方法来呈现推送通知,即在通知本身中编码(可选警报、徽章编号、声音)。但是由于您可能同时控制了应用程序和推送通知的有效负载,您可以在有效负载中指定是否已经向用户显示了警报视图和消息。只有在应用程序已经在前台运行的情况下,您才知道用户不只是通过警报或定期从主屏幕启动您的应用程序。

您可以使用以下代码在 didReceiveRemoteNotification 中判断您的应用是否刚刚进入前台:

- (void)application:(UIApplication *)application     didReceiveRemoteNotification:(NSDictionary *)userInfo


    if ( application.applicationState == UIApplicationStateActive )
    // app was already in the foreground
    else
    // app was just brought from background to foreground
    ...

供进一步参考。请检查

didReceiveRemoteNotification when in background

【讨论】:

您好,谢谢您的回答,但正如我所说的,通知工作正常,但是当应用程序在后台时没有调用 didReceiveRemoteNotification 但点击通知后它被称为为什么?? 嗨,很明显,由于您的应用程序未处于活动状态,直到用户单击通知将应用程序从后台或前台状态移动到活动状态。不会调用 didReceiveRemoteNotification。

以上是关于尽管 content_available = true,但没有在后台调用 didReceiveRemoteNotification的主要内容,如果未能解决你的问题,请参考以下文章

样式表 tr td last child 奇偶 [关闭]

通过 JNI 调用简单的 java 静态方法不起作用,尽管 c++ 编译并运行它

为啥颤振本地化不能正常工作?

Firebase 静默通知丢失 (iOS)

设备未收到 Firebase iOS 通知

使用 Cloud Functions 的 iOS 后台通知