FCM iOS:推送通知会抛出无效参数

时间:2018-05-21 13:19:30

标签: node.js firebase firebase-cloud-messaging

我正在尝试使用Cloud Functions和FCM for iOS实现pushNotifications,但我一直抛出这个错误:

  

2018-05-21T13:04:00.087Z我sendPushNotifications:发送错误   message:{错误:请求包含无效参数。       在FirebaseMessagingError.Error(本机)       在FirebaseMessagingError.FirebaseError [作为构造函数](/user_code/node_modules/firebase-admin/lib/utils/error.js:39:28)       在FirebaseMessagingError.PrefixedFirebaseError [作为构造函数](/user_code/node_modules/firebase-admin/lib/utils/error.js:85:28)       在新的FirebaseMessagingError(/user_code/node_modules/firebase-admin/lib/utils/error.js:241:16)       在Function.FirebaseMessagingError.fromServerError(/user_code/node_modules/firebase-admin/lib/utils/error.js:271:16)       at /user_code/node_modules/firebase-admin/lib/messaging/messaging-api-request.js:149:50       at process._tickDomainCallback(internal / process / next_tick.js:135:7)errorInfo:{code:   '消息/无效参数的&#39 ;,        消息:'请求包含无效参数。' },codePrefix:' messaging' }

我在云功能中的实现如下:

exports.sendPushNotifications = functions.database.ref('/conversations/{userUid}/').onWrite((snap, context) => {
    const userUid = context.params.userUid

    console.log("Triggered user ", userUid)

    return admin.database().ref('/fcmToken/' + userUid).once('value', snapshot => {
        const values = snapshot.val()
        const fcmToken = values.fcmToken

        var message = {
            "token": fcmToken,

            "notification": {
                "body": "New message"
            },
            "apns": {
                "headers": {
                    "apns-priority": "5"
                },
                "payload": {
                    "aps": {
                        "alert": {
                            "body": "New message"
                        },
                        "badge": "1",
                        "sound": "default"
                    }
                }
            }
        };

        return admin.messaging().send(message)
          .then((response) => {
            return console.log('Successfully sent message:', response);
          })
          .catch((error) => {
            return console.log('Error sending message:', error);
          });
    })
})

令人沮丧的是,当我删除整个"apns"节点时,代码实际上正常工作,即我可以接收推送通知。我想这意味着我的设置都完成了。一旦我加入"apns",就会开始抛出上述错误。我还引用了这三篇帖子,thisthisthis,并确保我仔细遵循了代码和说明。由于某些原因,我无法让它发挥作用。

我还试图删除"notification"节点,因为文档确实提到在目标所有平台时只使用公共密钥。由于我现在只针对iOS,我想我应该删除"notification"密钥。但同样它也会引发同样的错误。

1 个答案:

答案 0 :(得分:2)

好的,所以这是一个新手的错误。如果我仅针对iOS,则不应使用常用密钥是正确的。除此之外,徽章应为Int而不是String

此代码有效:

var message = {
    "token": fcmToken,

    "apns": {
        "headers": {
            "apns-priority": "5"
        },
        "payload": {
            "aps": {
                "alert": {
                    "body": "New message"
                },
                "badge": 1,
                "sound": "default"
            }
        }
    }
}

希望它可以帮助那些面临同样问题的人。