当前位置: 首页 > 知识库问答 >
问题:

在firebase云函数中发送推送通知时出错

白晋鹏
2023-03-14

我正在尝试使用Firebase云功能创建消息推送。以下是我的代码:

const admin = firebase
exports.sendNewTripNotification = functions.firestore
  .document('notifications/{notificationId}')
  .onWrite(async (event) => {
    console.log("event: ", event)
    const key = "cK0e5ZRAVRUAlx8hXHkNkXp7mj43"
    const ref = admin.database().ref(`users/${key}/deviceToken`);
    console.log("ref: ", ref)
    const deviceToken = admin.database().ref(`/users/${key}/deviceToken`).once('value');
    return deviceToken.then(result => {
      const token_id = result.val();
      console.log("token_id", token_id)
      const payload = {
        notification: {
          title: "Friend Request",
          body: "You just got a new friend request",
          icon: "default"
        }
      };
      console.log("payload", payload)
      return admin.messaging().sendToDevice(token_id, payload).then(Response => {
        console.log('this is the notification',Response)
      });
    });
  })

我得到以下错误:

错误:提供给sendToDevice()的注册令牌必须是非空字符串或非空数组。在FirebaseMessagingeror。FirebaseError[作为构造函数](/srv/node_modules/firebase admin/lib/utils/error.js:42:28)位于FirebaseMessagingError。PrefixedFirebaseError[作为构造函数](/srv/node_modules/firebase admin/lib/utils/error.js:88:28)

我确实参考了以下两个链接,但没有得到任何帮助。我做错什么了吗?

Firebase Cloud Functions在创建实时数据库时获取数据

Firebase Cloud Functions代币

共有2个答案

袁波
2023-03-14

问题已修复。我犯了一个愚蠢的错误。我没有在登录另一台设备时覆盖设备令牌。

董胡媚
2023-03-14

您将async/await与then()混合使用,这是不推荐的。以下内容应该可以做到(未经测试):

exports.sendNewTripNotification = functions.firestore
    .document('notifications/{notificationId}')
    .onWrite(async (event) => {
        console.log("event: ", event)

        const key = "cK0e5ZRAVRUAlx8hXHkNkXp7mj43"
        const ref = admin.database().ref(`users/${key}/deviceToken`);
        console.log("ref: ", ref)

        const deviceToken = await ref.once('value');
        const token_id = deviceToken.val();

        console.log("token_id", token_id)

        const payload = {
            notification: {
                title: "Friend Request",
                body: "You just got a new friend request",
                icon: "default"
            }
        };

        const messagingDevicesResponse = await admin.messaging().sendToDevice(token_id, payload);

        console.log('this is the notification', messagingDevicesResponse)

        return null;

    })
 类似资料:
  • 这是舱单 这是我的注册令牌类 这是我的Firebase服务类

  • 我正在写一个iOS的应用程序,使用laravel的API和谷歌Firebase的推送通知。当我使用Firebase云消息传递发送消息推送时,它会进入我的设备。当我使用laravel发送推送通知时,它不会影响。这里是我的脚本发送推送通知laravel: 它返回一个成功的结果,但通知未发送到iOS设备。 PS:它可以在Android设备上成功运行。

  • 我正在制作一个android应用程序,其中我使用firebase身份验证来验证用户,使用firestore来存储一些用户数据。我想让用户有一个设置,他们可以订阅推送通知。如果他们订阅,我希望我的应用程序定期向他们发送通知,比如每6小时一次。目前,我已经使用firebase控制台测试了推送通知,它看起来工作正常。以下是我到目前为止的< code > myfirebasemesagingservice

  • 我正在尝试开发一个应用程序,其中服务器必须每5秒向运行该应用程序的所有android设备发送通知。我决定使用(谷歌)Firebse云消息发送通知,所以我首先尝试了指南的示例项目 https://firebase.google.com/docs/notifications/android/console-audience 但我不能让它工作。我遵守了所有的指示。我已经发布了我使用的代码。我也做了档案-

  • 我试图制作一个云函数,向给定用户发送消息推送。 用户进行一些更改,并在firebase数据库中的节点下添加/更新数据(该节点表示用户id)。这里我想触发一个函数,它向用户发送推送通知。 对于DB中的用户,我有以下结构。 到目前为止,我有这个功能: 当我得到回调时,snapshot.val()返回null。知道怎么解决这个问题吗?也许之后如何发送消息推送?

  • 如何通过Azure从我的UWP-App向不同设备上的应用程序的其他实例发送推送通知? 以下是注册设备以接收推送的说明。(这是可行的)第二部分是关于如何在控制台应用程序上发送推送(这也是可行的)https://azure.microsoft.com/en-us/documentation/articles/notification-hubs-windows-store-dotnet-get-star