以前の 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 のエラーをご覧ください。

端末グループに送信する

端末グループ メッセージングを使用すると、特定のグループに属する端末で動作しているアプリの複数のインスタンスに単一のメッセージを送信できます。通常、「グループ」とは、単一のユーザーに属する一連の異なる端末のことを指します。グループ内のすべての端末は、共通の通知キーを共有します。このキーは、グループ内のすべての端末にメッセージをファンアウトするために FCM で使用されるトークンです。

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 のサポートページをご覧ください。