当 iOS 应用程序在后台或不在 运行 时如何响应 iOS APNS 事件

How to respond to iOS APNS events when iOS App is in the background or when not running

我正在通过 APNS 从 FCM 向我的 iOS 应用程序发送通知和数据消息(非通知),并且在前台一切正常。

我希望能够在应用程序处于后台时触发代码。

我已经在 info.plist

中设置了 "Enable Background Modes" "Remote Notifications"

但是,直到我将应用程序调到前台后,才会触发以下消息

    message = new Message()
    {
        Apns = new ApnsConfig()
        {
                Headers = new Dictionary<string, string>()
            {
                { "content_available", "true" },
             },
        },
        Data = new Dictionary<string, string>()
        {
             {"temperature",     "warm"},
        },
        Topic = "thetopic",
     };

1) 谁能告诉我为什么这不能立即 运行。我尝试添加

{ 
    "apns-priority", "10" 
},

但这没有区别,而且确实如此 Local and Remote Notification Programming Guide

表示

It is an error to use this priority for a push notification that contains only the content-available key.

我在这里错过了什么?

  1. 在 iOS 中是否有任何方法可以使非 运行ning 应用程序 运行 启动以响应 APNS通知或消息,而不涉及用户?

  2. 是否可以在 iOS 下让 App 永久 运行ning(即自动启动),以便它始终可以响应通知或消息?

您应该考虑为此创建一个 UNNotificationServiceExtension。

参见:https://developer.apple.com/documentation/usernotifications/unnotificationserviceextension

这实际上是一个每次收到通知时都会启动的小应用程序,您可以在其中放置代码。

您正在发送“数据消息”- 这不适用于非 运行 的应用。这是非常糟糕的记录,但你必须发送“通知消息”来唤醒你的应用程序。只需添加

"notification":{
       "title" : "title",
       "body" : "body"
 },

到您的消息以使其正常工作