在单个 FCM 请求中具有 Android 的数据消息和 IOS 的正常通知

Sas*_*ssa 5 apple-push-notifications firebase-cloud-messaging

目前,我有不同的方式来处理通知,具体取决于系统是 Android 还是 IOS,对于 Android,我发送纯数据通知并从中创建本地通知。

对于 IOS,由于纯数据通知不能保证在应用程序关闭时能够检索到它们,因此我发送普通通知。

我想要做的是使用相同的 FCM API 调用来获取两个通知,这是我当前的 json:

{
    "data": {
        "click_action": "FLUTTER_NOTIFICATION_CLICK",
        "d": "my_data",
    },
    "apns": {
        "headers": {
            "apns-priority": "10"
        },
        "payload": {
            "aps": {
                "alert": {
                    "title": "my title",
                    "body": "my body"
                }
            }
        }
    },
    "priority": "high",
    "registration_ids": [...],
    "time_to_live":86400
}
Run Code Online (Sandbox Code Playgroud)

所以,我从这个请求中期望的是,对于 android 来说,它将使用以下命令创建一个仅数据通知:

{
    "data": {
        "click_action": "FLUTTER_NOTIFICATION_CLICK",
        "d": "my_data",
    }
}
Run Code Online (Sandbox Code Playgroud)

对于 IOS,它将使用以下命令创建普通通知:

{
    "notification": {
        "title": "my title",
        "body": "my body",
    }
}
Run Code Online (Sandbox Code Playgroud)

这适用于 Android,但我在 IOS 上没有收到此通知作为正常通知。apns在这种情况下,有效负载不应该用于 IOS 吗?

小智 1

我也遇到了同样的问题,但我已经在 Postman 中解决了这个问题。请参阅下面的 JSON。

{
    "message": {
        "token": "####FCMTOKEN#####",
        "android": {
            "priority": "high",
            "data": {
                "title": "title for android data",
                "body": "body for android data"
            }
        },
        "apns": {
            "headers": {
                "apns-push-type": "alert",
                "apns-priority": "10",
                "apns-topic": "####TOPIC####"
            },
            "payload": {
                "aps": {
                    "alert": {
                        "title": "Game Request",
                        "subtitle": "Five Card Draw",
                        "body": "Bob wants to play poker"
                    }
                }
            }
        }
    }
}
Run Code Online (Sandbox Code Playgroud)