以前の API を使用してデバイスに送信する

Firebase Admin Node.js SDK は、Firebase Cloud Messaging(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 のエラーをご覧ください。

デバイス グループに送信する

デバイス グループ メッセージングを使用すると、1 つのグループに複数のデバイスを追加できます。これはトピック メッセージングに似ていますが、サーバーのみがグループ メンバーシップを管理するための認証が含まれています。たとえば、さまざまなスマートフォン モデルに応じて異なるメッセージを送信する場合、サーバーは適切なグループに対して登録を追加または削除し、適切なメッセージを各グループに送信できます。デバイス グループ メッセージングはトピック メッセージングとは異なり、サーバーからデバイス グループを管理します(アプリケーション内で直接管理するのではありません)。

1 つの通知キーで送信できるメンバーの最大数は 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 のエラーをご覧ください。

メッセージ ペイロードの定義

上記のメソッドは、2 番目の引数としてメッセージ ペイロードを受け入れ、通知メッセージとデータ メッセージの両方をサポートします。datanotification の一方または両方のキーを含むオブジェクトを作成することで、一方または両方のメッセージ タイプを指定できます。たとえば、それぞれの種類のメッセージ ペイロードを定義する方法は次のとおりです。

通知メッセージ

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 のリファレンス ドキュメントをご覧ください。

データ メッセージのペイロードはカスタムの Key-Value ペアで構成されており、すべての値が文字列でなければならないなど、いくつかの制限があります。制限の全一覧については、DataMessagePayload のリファレンス ドキュメントをご覧ください。

メッセージ オプションの定義

上記のメソッドには、メッセージのオプションを指定する 3 番目の引数を任意に指定できます。たとえば次の例は、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 のリファレンス ドキュメントをご覧ください。

フィードバックを送信...

ご不明な点がありましたら、Google のサポートページをご覧ください。