IOS 条通知的 FCM 抛出 invalid-argument

FCM Throwing invalid-argument for IOS notifications

我的项目之前有工作通知,但我无法追踪对我发送的有效负载的任何更改。我已经参考了文档,但看不到我的有效负载有任何问题。我得到的确切错误是

Request contains an invalid argument

let payload = {
    token : oUser.devicetoken,
    data : {
        referenceid : chatid,
        referencetype : 'chat',
        referencename : oSender.displayname,
        receiverid : userid,
        type : 'message',
        notificationid : res,
        title : title,
        body : `${oSender.displayname} : ${body}`
    },
    android : {
        priority : 'high'
    },
    apns : {
        payload : {
            aps : {
                'content-available' : 1
            }
        },
        headers : {
            'apns-push-type' : 'background',
            'apns-priority' : '5',
            'apns-topic' : 'llc.attebyte.partyme'
        }
    }
};

我当前的负载:

重新查看 Apple 通知文档后,我注意到我应该使用 content-available。我以前一直在使用 contentAvailable: true(并且它正在运行)。一个都不工作了。

关于这个问题已经有多个问题。这是我发现的最好的:

我通过从 firebase 控制台向设备发送测试通知来验证令牌是否正确。我不认为我应该达到 4kb 的大小限制,我发送的用于测试的消息类似于 'test' 或 'hello'(问题还在于 IOS specifi ).我还验证了我发送的 headers 与 Apple 文档一致。

我无法找出会导致通知在上周左右停止工作的任何差异。我知道他们当时正在工作,我已经检查了我的 Github 历史记录以验证有效负载没有改变(除了我今天在测试时对 content-available 所做的更改。)

虽然 Google 需要时间来解决这个问题,但我们可以使用旧版应用程序服务器协议成功发送静默通知:

https://firebase.google.com/docs/cloud-messaging/send-message#send-messages-using-the-legacy-app-server-protocols

我们使用的端点是 https://fcm.googleapis.com/fcm/send

这里可以找到消息结构(注意和现在的API有很大区别):

https://firebase.google.com/docs/cloud-messaging/http-server-ref

这里是如何授权请求:

https://firebase.google.com/docs/cloud-messaging/auth-server#authorize-http-requests

希望它在我们等待最终修复时有所帮助。