使用旧版 API 向设备发送消息

Firebase Admin Node.js SDK 支持用于向最终用户设备发送 Firebase 云消息传递 (FCM) 消息的其他一些方法。这些方法基于旧版 FCM 服务器 API,因此可以接受的参数与 send() 方法不同。您应该尽可能使用 send() 方法,并且在向个别设备或设备组发送消息时仅使用本页面中介绍的方法。

向个别设备发送消息

您可以将一个注册令牌传递给 sendToDevice() 方法以向该设备发送消息:

Node.js

// This registration token comes from the client FCM SDKs.
var registrationToken = 'bk3RNwTe3H0:CI2k_HHwgIpoDKCIZvvDMExUdFQ3P1...';

// See the "Defining the message payload" section below for details
// on how to define a message payload.
var payload = {
  data: {
    score: '850',
    time: '2:45'
  }
};

// Send a message to the device corresponding to the provided
// registration token.
admin.messaging().sendToDevice(registrationToken, payload)
  .then(function(response) {
    // See the MessagingDevicesResponse reference documentation for
    // the contents of response.
    console.log('Successfully sent message:', response);
  })
  .catch(function(error) {
    console.log('Error sending message:', error);
  });

sendToDevice() 方法还可以通过传递一组注册令牌(而非单个注册令牌)发送一条多播消息(即向多台设备发送的消息):

Node.js

// These registration tokens come from the client FCM SDKs.
var registrationTokens = [
  'bk3RNwTe3H0:CI2k_HHwgIpoDKCIZvvDMExUdFQ3P1...',
  // ...
  'ecupwIfBy1w:APA91bFtuMY7MktgxA3Au_Qx7cKqnf...'
];

// See the "Defining the message payload" section below for details
// on how to define a message payload.
var payload = {
  data: {
    score: '850',
    time: '2:45'
  }
};

// Send a message to the devices corresponding to the provided
// registration tokens.
admin.messaging().sendToDevice(registrationTokens, payload)
  .then(function(response) {
    // See the MessagingDevicesResponse reference documentation for
    // the contents of response.
    console.log('Successfully sent message:', response);
  })
  .catch(function(error) {
    console.log('Error sending message:', error);
  });

sendToDevice() 方法将返回一个使用包含 FCM 响应的 MessagingDevicesResponse 对象来解析的 promise。无论传递单个注册令牌还是一组注册令牌,返回类型的格式都是相同的。

有些情况(如身份验证错误或速率限制)会导致整个消息无法处理。在这些情况下,sendToDevice() 返回的 promise 会被拒绝并报错。如需错误代码的完整列表(包括说明和解决步骤),请参阅 Admin FCM API 错误

向设备组发送消息

通过设备组消息传递功能,您可将一条消息发送至在属于某个组的多台设备上运行的一个应用的多个实例。通常而言,“组”是指属于单个用户的一组不同设备。一个组中的所有设备共享一个公用通知键,即 FCM 用来将消息扇出到该组中所有设备的令牌。

一个通知键最多支持 20 个成员设备。

您可以通过应用服务器或 Android 客户端创建设备组并生成通知键。如需了解详情,请参阅管理设备组

使用 sendToDeviceGroup() 方法,您可以通过指定设备组的通知密钥来向该设备组发送消息:

Node.js

// See the "Managing device groups" link above on how to generate a
// notification key.
var notificationKey = 'some-notification-key';

// See the "Defining the message payload" section below for details
// on how to define a message payload.
var payload = {
  data: {
    score: '850',
    time: '2:45'
  }
};

// Send a message to the device group corresponding to the provided
// notification key.
admin.messaging().sendToDeviceGroup(notificationKey, payload)
  .then(function(response) {
    // See the MessagingDeviceGroupResponse reference documentation for
    // the contents of response.
    console.log('Successfully sent message:', response);
  })
  .catch(function(error) {
    console.log('Error sending message:', error);
  });

sendToDeviceGroup() 方法将返回一个使用包含 FCM 响应的 MessagingDeviceGroupResponse 对象来解析的 promise。

有些情况(如身份验证错误或速率限制)会导致整个消息无法处理。在这些情况下,sendToDeviceGroup() 返回的 promise 会被拒绝并报错。如需错误代码的完整列表(包括说明和解决步骤),请参阅 Admin FCM API 错误

定义消息有效负载

上述方法允许将消息有效负载作为其第二个参数,并支持通知消息和数据消息。您可以创建一个含有 data 和/或 notification 键的对象,以指定其中一种或两种消息类型。下方示例介绍了如何定义不同类型的消息有效负载:

通知消息

var payload = {
  notification: {
    title: '$GOOG up 1.43% on the day',
    body: '$GOOG gained 11.80 points to close at 835.67, up 1.43% on the day.'
  }
};

数据消息

var payload = {
  data: {
    score: '850',
    time: '2:45'
  }
};

组合消息

var payload = {
  notification: {
    title: '$GOOG up 1.43% on the day',
    body: '$GOOG gained 11.80 points to close at 835.67, up 1.43% on the day.'
  },
  data: {
    stock: 'GOOG',
    open: '829.62',
    close: '635.67'
  }
};

通知消息有效负载具有预定义的有效属性子集,且会因您定位的移动操作系统不同而略有不同。如需完整列表,请参阅 NotificationMessagePayload 的参考文档。

数据消息有效负载由自定义键值对组成,但有一些限制(包括所有值都必须为字符串)。如需完整的限制列表,请参阅 DataMessagePayload 的参考文档。

定义消息选项

上述方法接受第三个参数(可选),用于指定消息的一些选项。例如,以下示例会向将于 24 小时后到期的设备发送高优先级消息:

Node.js

// This registration token comes from the client FCM SDKs.
var registrationToken = 'bk3RNwTe3H0:CI2k_HHwgIpoDKCIZvvDMExUdFQ3P1...';

// See the "Defining the message payload" section above for details
// on how to define a message payload.
var payload = {
  notification: {
    title: 'Urgent action needed!',
    body: 'Urgent action is needed to prevent your account from being disabled!'
  }
};

// Set the message as high priority and have it expire after 24 hours.
var options = {
  priority: 'high',
  timeToLive: 60 * 60 * 24
};

// Send a message to the device corresponding to the provided
// registration token with the provided options.
admin.messaging().sendToDevice(registrationToken, payload, options)
  .then(function(response) {
    console.log('Successfully sent message:', response);
  })
  .catch(function(error) {
    console.log('Error sending message:', error);
  });

如需可用选项的完整列表,请参阅 MessagingOptions 的参考文档。

发送以下问题的反馈:

此网页
需要帮助?请访问我们的支持页面