メッセージを送信する

準備

Admin FCM API を使用するには、まずサーバーに Firebase Admin SDK を追加するの手順に従う必要があります。次の 3 つの方法のいずれかで、Firebase プロジェクト ID を指定して Admin SDK を初期化することも必要です。

  • Firebase アプリの projectId オプションを明示的に指定する。
  • サービス アカウントの認証情報で SDK を初期化する
  • GCLOUD_PROJECT 環境変数を設定する。

    export GCLOUD_PROJECT='my-project-id'
    

このガイドには、Admim FCM API でサポートされているすべての言語(Node、Java、Python、Go)のコードサンプルが用意されています。各 API の詳細については、対応するリファレンスをご覧ください。

個々の端末に送信する

個々の端末にメッセージを送信するには、Admin FCM API を使用し、ターゲット端末の登録トークンを指定します。登録トークンは、エンドユーザー クライアント アプリのインスタンスごとにクライアント FCM SDK によって生成される文字列です。

各 Firebase クライアント SDK は、iOSAndroidウェブC++Unity のそれぞれに対応した登録トークンを生成できます。

メッセージ ペイロードに登録トークンを含めて、Admin SDK の send() メソッドに渡すことができます。

Node.js

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

// See documentation on defining a message payload.
var message = {
  data: {
    score: '850',
    time: '2:45'
  },
  token: registrationToken
};

// Send a message to the device corresponding to the provided
// registration token.
admin.messaging().send(message)
  .then((response) => {
    // Response is a message ID string.
    console.log('Successfully sent message:', response);
  })
  .catch((error) => {
    console.log('Error sending message:', error);
  });

Java

// This registration token comes from the client FCM SDKs.
String registrationToken = "YOUR_REGISTRATION_TOKEN";

// See documentation on defining a message payload.
Message message = Message.builder()
    .putData("score", "850")
    .putData("time", "2:45")
    .setToken(registrationToken)
    .build();

// Send a message to the device corresponding to the provided
// registration token.
String response = FirebaseMessaging.getInstance().send(message);
// Response is a message ID string.
System.out.println("Successfully sent message: " + response);

Python

# This registration token comes from the client FCM SDKs.
registration_token = 'YOUR_REGISTRATION_TOKEN'

# See documentation on defining a message payload.
message = messaging.Message(
    data={
        'score': '850',
        'time': '2:45',
    },
    token=registration_token,
)

# Send a message to the device corresponding to the provided
# registration token.
response = messaging.send(message)
# Response is a message ID string.
print('Successfully sent message:', response)

Go

// Obtain a messaging.Client from the App.
ctx := context.Background()
client, err := app.Messaging(ctx)

// This registration token comes from the client FCM SDKs.
registrationToken := "YOUR_REGISTRATION_TOKEN"

// See documentation on defining a message payload.
message := &messaging.Message{
	Data: map[string]string{
		"score": "850",
		"time":  "2:45",
	},
	Token: registrationToken,
}

// Send a message to the device corresponding to the provided
// registration token.
response, err := client.Send(ctx, message)
if err != nil {
	log.Fatalln(err)
}
// Response is a message ID string.
fmt.Println("Successfully sent message:", response)

正常に完了すると、send() メソッドは projects/{project_id}/messages/{message_id} という形式でメッセージ ID の文字列を返します。それ以外の場合は、エラーが生成されます。すべてのエラーコードとその説明、および解決手順を記載した一覧については、Admin FCM API のエラーをご覧ください。

トピックに送信する

パブリッシュ / サブスクライブ モデルに基づく FCM トピック メッセージングでは、特定のトピックにオプトインした複数の端末にメッセージを送信できます。必要に応じて作成したトピック メッセージを FCM がルーティング処理し、確実に正しい端末にメッセージを配信します。

たとえば、地域の潮汐予報アプリのユーザーは、「潮流警報」のトピックにオプトインし、海釣りに最適な状況の通知を受信できます。スポーツアプリのユーザーは、お気に入りのチームの実況ゲームスコアの自動更新に登録できます。

トピックに関する留意点を以下に示します。

  • トピック メッセージングにおいて、アプリごとにサポートされるトピックとサブスクリプション数はいずれも無制限です。
  • トピック メッセージングは、ニュース、天気、その他の広く入手可能な情報コンテンツに最適です。
  • トピック メッセージは、レイテンシではなくスループットに対して最適化されます。単一の端末または端末の小グループに高速で安全に配信する場合は、トピックではなく登録トークンをメッセージのターゲットとしてください
  • 各ユーザーの複数の端末にメッセージを送信する必要がある場合は、そのようなユースケース向けの端末グループ メッセージングを検討してください。

send() メソッドでトピック名を指定すると、トピックにメッセージを送信できます。

Node.js

// The topic name can be optionally prefixed with "/topics/".
var topic = 'highScores';

// See documentation on defining a message payload.
var message = {
  data: {
    score: '850',
    time: '2:45'
  },
  topic: topic
};

// Send a message to devices subscribed to the provided topic.
admin.messaging().send(message)
  .then((response) => {
    // Response is a message ID string.
    console.log('Successfully sent message:', response);
  })
  .catch((error) => {
    console.log('Error sending message:', error);
  });

Java

// The topic name can be optionally prefixed with "/topics/".
String topic = "highScores";

// See documentation on defining a message payload.
Message message = Message.builder()
    .putData("score", "850")
    .putData("time", "2:45")
    .setTopic(topic)
    .build();

// Send a message to the devices subscribed to the provided topic.
String response = FirebaseMessaging.getInstance().send(message);
// Response is a message ID string.
System.out.println("Successfully sent message: " + response);

Python

# The topic name can be optionally prefixed with "/topics/".
topic = 'highScores'

# See documentation on defining a message payload.
message = messaging.Message(
    data={
        'score': '850',
        'time': '2:45',
    },
    topic=topic,
)

# Send a message to the devices subscribed to the provided topic.
response = messaging.send(message)
# Response is a message ID string.
print('Successfully sent message:', response)

Go

// The topic name can be optionally prefixed with "/topics/".
topic := "highScores"

// See documentation on defining a message payload.
message := &messaging.Message{
	Data: map[string]string{
		"score": "850",
		"time":  "2:45",
	},
	Topic: topic,
}

// Send a message to the devices subscribed to the provided topic.
response, err := client.Send(ctx, message)
if err != nil {
	log.Fatalln(err)
}
// Response is a message ID string.
fmt.Println("Successfully sent message:", response)

条件に送信する

場合によっては、複数のトピックの組み合わせにメッセージを送信したいことがあります。そのためには、対象のトピックを指定するブール式の条件を指定します。たとえば次の条件は、TopicA に加えて TopicBTopicC のどちらか一方にも登録されている端末にメッセージを送信します。

"'TopicA' in topics && ('TopicB' in topics || 'TopicC' in topics)"

条件式はまずかっこ内から評価され、次に左から右に評価されます。上記の式では、いずれか 1 つのトピックだけに登録したユーザーにはメッセージは送られません。同様に、TopicA に登録していないユーザーにもメッセージは送られません。メッセージが送られるのは、次の組み合わせに登録している場合のみです。

  • TopicATopicB
  • TopicATopicC

send() メソッドの呼び出し時に条件を指定することで、特定のトピックの組み合わせに登録されている端末をメッセージのターゲットにできます。

Node.js

// Define a condition which will send to devices which are subscribed
// to either the Google stock or the tech industry topics.
var condition = "'stock-GOOG' in topics || 'industry-tech' in topics";

// See documentation on defining a message payload.
var message = {
  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.'
  },
  condition: condition
};

// Send a message to devices subscribed to the combination of topics
// specified by the provided condition.
admin.messaging().send(message)
  .then((response) => {
    // Response is a message ID string.
    console.log('Successfully sent message:', response);
  })
  .catch((error) => {
    console.log('Error sending message:', error);
  });

Java

// Define a condition which will send to devices which are subscribed
// to either the Google stock or the tech industry topics.
String condition = "'stock-GOOG' in topics || 'industry-tech' in topics";

// See documentation on defining a message payload.
Message message = Message.builder()
    .setNotification(new Notification(
        "$GOOG up 1.43% on the day",
        "$GOOG gained 11.80 points to close at 835.67, up 1.43% on the day."))
    .setCondition(condition)
    .build();

// Send a message to devices subscribed to the combination of topics
// specified by the provided condition.
String response = FirebaseMessaging.getInstance().send(message);
// Response is a message ID string.
System.out.println("Successfully sent message: " + response);

Python

# Define a condition which will send to devices which are subscribed
# to either the Google stock or the tech industry topics.
condition = "'stock-GOOG' in topics || 'industry-tech' in topics"

# See documentation on defining a message payload.
message = messaging.Message(
    notification=messaging.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.',
    ),
    condition=condition,
)

# Send a message to devices subscribed to the combination of topics
# specified by the provided condition.
response = messaging.send(message)
# Response is a message ID string.
print('Successfully sent message:', response)

Go

// Define a condition which will send to devices which are subscribed
// to either the Google stock or the tech industry topics.
condition := "'stock-GOOG' in topics || 'industry-tech' in topics"

// See documentation on defining a message payload.
message := &messaging.Message{
	Data: map[string]string{
		"score": "850",
		"time":  "2:45",
	},
	Condition: condition,
}

// Send a message to devices subscribed to the combination of topics
// specified by the provided condition.
response, err := client.Send(ctx, message)
if err != nil {
	log.Fatalln(err)
}
// Response is a message ID string.
fmt.Println("Successfully sent message:", response)

ドライラン モードでの送信

Firebase Admin SDK では、ドライラン モードでの FCM メッセージの送信がサポートされています。このモードで送信されたメッセージの場合、通常のすべての検証が行われますが、ターゲット端末への実際の配信は行われません。そのため、この機能を使用すると、特定のメッセージが SDK と FCM サービスに受け入れられて送信されるかどうかを確認できます。

Node.js

// Send a message in the dry run mode.
var dryRun = true;
admin.messaging().send(message, dryRun)
  .then((response) => {
    // Response is a message ID string.
    console.log('Dry run successful:', response);
  })
  .catch((error) => {
    console.log('Error during dry run:', error);
  });

Java

// Send a message in the dry run mode.
boolean dryRun = true;
String response = FirebaseMessaging.getInstance().send(message, dryRun);
// Response is a message ID string.
System.out.println("Dry run successful: " + response);

Python

# Send a message in the dry run mode.
response = messaging.send(message, dry_run=True)
# Response is a message ID string.
print('Dry run successful:', response)

Go

// Send a message in the dry run mode.
response, err := client.SendDryRun(ctx, message)
if err != nil {
	log.Fatalln(err)
}
// Response is a message ID string.
fmt.Println("Dry run successful:", response)

メッセージの定義

Admin SDK の send() メソッドは Message オブジェクトを受け入れます。次の表は、Message に含めることができるすべてのフィールドの概要を示しています。特に明記されていない限り、すべてのフィールドはオプションです。

最上位レベルのメッセージ パラメータ

パラメータ 説明
data すべてのキーと値が文字列である、Key-Value ペアのマップ。
notification title フィールドと body フィールドを含むオブジェクト。
android Android メッセージに固有のフィールドで構成されるオブジェクト。詳細については、Android 固有のフィールドをご覧ください。
apns Apple プッシュ通知サービス(APNS)に固有のフィールドで構成されるオブジェクト。詳細については、APNS 固有のフィールドをご覧ください。
webpush WebPush プロトコルに固有のフィールドで構成されるオブジェクト。詳細については、WebPush 固有のフィールドをご覧ください。
token メッセージの受信者端末を識別する登録トークン。
topic メッセージの送信先のトピック名。トピック名に /topics/ 接頭辞を含めることはできません。
condition メッセージを送信する条件。たとえば "foo" in topics && "bar" in topics などとします。

同じメッセージに androidapnswebpushnotification の各フィールドを設定することができます。指定されたすべてのパラメータが考慮されて、各プラットフォーム向けにメッセージがカスタマイズされます。ただし、メッセージには、tokentopiccondition の各フィールドのうちの 1 つだけが含まれるようにする必要があります。フィールドを 1 つも指定しなかった場合や、複数のフィールドを指定した場合、エラーになります。

Admin SDK は、メッセージを FCM サービスに渡す前に、ローカルでさまざまな検証を行います。検証エラーがあった場合、問題の正確な性質を説明する例外が直ちに生成されます。

Android 固有のフィールド

Node.js

var message = {
  android: {
    ttl: 3600 * 1000, // 1 hour in milliseconds
    priority: 'normal',
    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.',
      icon: 'stock_ticker_update',
      color: '#f45342'
    }
  },
  topic: 'industry-tech'
};

Java

Message message = Message.builder()
    .setAndroidConfig(AndroidConfig.builder()
        .setTtl(3600 * 1000) // 1 hour in milliseconds
        .setPriority(AndroidConfig.Priority.NORMAL)
        .setNotification(AndroidNotification.builder()
            .setTitle("$GOOG up 1.43% on the day")
            .setBody("$GOOG gained 11.80 points to close at 835.67, up 1.43% on the day.")
            .setIcon("stock_ticker_update")
            .setColor("#f45342")
            .build())
        .build())
    .setTopic("industry-tech")
    .build();

Python

message = messaging.Message(
    android=messaging.AndroidConfig(
        ttl=datetime.timedelta(seconds=3600),
        priority='normal',
        notification=messaging.AndroidNotification(
            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.',
            icon='stock_ticker_update',
            color='#f45342'
        ),
    ),
    topic='industry-tech',
)

Go

oneHour := time.Duration(1) * time.Hour
message := &messaging.Message{
	Android: &messaging.AndroidConfig{
		TTL:      &oneHour,
		Priority: "normal",
		Notification: &messaging.AndroidNotification{
			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.",
			Icon:  "stock_ticker_update",
			Color: "#f45342",
		},
	},
	Topic: "industry-tech",
}

メッセージの android セクションでは、次のフィールドを使用できます。

パラメータ 説明
collapseKey 折りたたみ可能なメッセージのグループの識別子。配信が再開されるときに最後のメッセージのみが送信されるようになっています。一度に最大 4 つの異なる折りたたみキーを使用できます。
priority メッセージの優先度。normal または high を指定します。
ttl メッセージの存続期間。これは、ターゲット端末がオフラインの場合にメッセージを FCM のストレージに保持する期間です。最大許容値は 4 週間で、これはデフォルト値にもなっています。メッセージをすぐに送信(ファイア アンド フォーゲット)する場合は、0 に設定します。Node.js と Java の場合、この期間はミリ秒単位で設定されます。Python では、「datimetime.timedelta」の値として指定できます。Go では、「time.Duration」として指定されます。
restrictedPackageName アプリケーションのパッケージ名。メッセージを受信するには登録トークンがこの値と一致している必要があります。
data 各キーと値が文字列である、Key-Value ペアのマップ。指定すると、最上位レベルのメッセージに設定されている data フィールドがオーバーライドされます。
notification Android 通知に固有のフィールドで構成されるオブジェクト。サポートされているフィールドのリストについては、次の表をご覧ください。

Android の notification オブジェクトには、次のフィールドを含めることができます。

パラメータ 説明
title 通知のタイトル。設定すると、最上位レベルのメッセージ通知に設定されている title フィールドがオーバーライドされます。
body 通知の本文。設定すると、最上位レベルのメッセージ通知に設定されている body フィールドがオーバーライドされます。
icon 通知のアイコン。指定しない場合、アプリのマニフェストで指定されたランチャー アイコンが表示されます。
color 通知のアイコンの色。#rrggbb という形式で表します。
sound 端末が通知を受信したときに再生される通知音。default、またはアプリにバンドルされた通知音リソースのファイル名を指定できます。通知音ファイルは /res/raw/. に置く必要があります。
tag 通知ドロワーにある既存の通知を置き換えるために使用される識別子。指定されていない場合、リクエストごとに新しい通知が作成されます。このタグが指定されていて、同じタグを持つ通知がすでに表示されている場合は、新しい通知によって通知ドロワー内の既存の通知が置き換えられます。
clickAction ユーザーが通知をクリックしたときに実行されるアクション。これが指定されている場合、ユーザーが通知をクリックすると、一致するインテント フィルタを持つアクティビティが起動します。
bodyLocKey ユーザーの現在のローカリゼーションに合わせて本文テキストをローカライズするために使用する、アプリの文字列リソース内の本文文字列のキー。
bodyLocArgs ユーザーの現在のローカリゼーションに合わせて本文テキストをローカライズするために使用する、bodyLocKey で指定された書式指定子の代わりに使用される文字列値のリスト。
titleLocKey ユーザーの現在のローカリゼーションに合わせてタイトル テキストをローカライズするために使用する、アプリの文字列リソース内のタイトル文字列のキー。
titleLocArgs ユーザーの現在のローカリゼーションに合わせてタイトル テキストをローカライズするために使用する、titleLocKey で指定された書式指定子の代わりに使用される文字列値のリスト。

APNS 固有のフィールド

Node.js

var message = {
  apns: {
    headers: {
      'apns-priority': '10'
    },
    payload: {
      aps: {
        alert: {
          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.',
        },
        badge: 42,
      }
    }
  },
  topic: 'industry-tech'
};

Java

Message message = Message.builder()
    .setApnsConfig(ApnsConfig.builder()
        .putHeader("apns-priority", "10")
        .setAps(Aps.builder()
            .setAlert(ApsAlert.builder()
                .setTitle("$GOOG up 1.43% on the day")
                .setBody("$GOOG gained 11.80 points to close at 835.67, up 1.43% on the day.")
                .build())
            .setBadge(42)
            .build())
        .build())
    .setTopic("industry-tech")
    .build();

Python

message = messaging.Message(
    apns=messaging.APNSConfig(
        headers={'apns-priority': '10'},
        payload=messaging.APNSPayload(
            aps=messaging.Aps(
                alert=messaging.ApsAlert(
                    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.',
                ),
                badge=42,
            ),
        ),
    ),
    topic='industry-tech',
)

Go

badge := 42
message := &messaging.Message{
	APNS: &messaging.APNSConfig{
		Headers: map[string]string{
			"apns-priority": "10",
		},
		Payload: &messaging.APNSPayload{
			Aps: &messaging.Aps{
				Alert: &messaging.ApsAlert{
					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.",
				},
				Badge: &badge,
			},
		},
	},
	Topic: "industry-tech",
}

次のフィールドは、メッセージの apns セクションで使用できます。

パラメータ 説明
headers Apple プッシュ通知サービスで定義された HTTP リクエスト ヘッダー。使用できるヘッダーについては、APNS リクエスト ヘッダーをご覧ください。
payload aps 辞書とその他のカスタムの Key-Value ペアを含む APNS ペイロード。使用できるフィールドについては、APNS ペイロードキー リファレンスをご覧ください。Admin SDK には、一般的な APNS ペイロード フィールドのための型付き setter が用意されています。

WebPush 固有のフィールド

Node.js

var message = {
  webpush: {
    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.',
      icon: 'https://my-server/icon.png'
    }
  },
  topic: 'industry-tech'
};

Java

Message message = Message.builder()
    .setWebpushConfig(WebpushConfig.builder()
        .setNotification(new WebpushNotification(
            "$GOOG up 1.43% on the day",
            "$GOOG gained 11.80 points to close at 835.67, up 1.43% on the day.",
            "https://my-server/icon.png"))
        .build())
    .setTopic("industry-tech")
    .build();

Python

message = messaging.Message(
    webpush=messaging.WebpushConfig(
        notification=messaging.WebpushNotification(
            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.',
            icon='https://my-server/icon.png',
        ),
    ),
    topic='industry-tech',
)

Go

message := &messaging.Message{
	Webpush: &messaging.WebpushConfig{
		Notification: &messaging.WebpushNotification{
			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.",
			Icon:  "https://my-server/icon.png",
		},
	},
	Topic: "industry-tech",
}

次のフィールドは、メッセージの webpush セクションで使用できます。

パラメータ 説明
headers WebPush プロトコルで定義された HTTP リクエスト ヘッダー。使用できるヘッダーについては、WebPush の仕様をご覧ください。
data 各キーと値が文字列である、Key-Value ペアのマップ。指定すると、最上位レベルのメッセージに設定されている data フィールドがオーバーライドされます。
notification titlebodyicon の各フィールドを含むオブジェクト。タイトルと本文は、最上位レベルのメッセージ通知の対応するフィールドをオーバーライドします。

すべてを組み合わせる

メッセージには、複数の端末プラットフォーム用の構成パラメータが含まれていることがあります。つまり、同じメッセージに androidapnswebpush の各フィールドを含めることができます。FCM サービスによって、配信時に各ターゲット プラットフォーム向けにメッセージがカスタマイズされます。次の例に、Android と iOS の各プラットフォーム向けに通知がどのようにカスタマイズされたかを示します。

Node.js

var message = {
  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.',
  },
  android: {
    ttl: 3600 * 1000,
    notification: {
      icon: 'stock_ticker_update',
      color: '#f45342',
    },
  },
  apns: {
    payload: {
      aps: {
        badge: 42,
      },
    },
  },
  topic: 'industry-tech'
};

Java

Message message = Message.builder()
    .setNotification(new Notification(
        "$GOOG up 1.43% on the day",
        "$GOOG gained 11.80 points to close at 835.67, up 1.43% on the day."))
    .setAndroidConfig(AndroidConfig.builder()
        .setTtl(3600 * 1000)
        .setNotification(AndroidNotification.builder()
            .setIcon("stock_ticker_update")
            .setColor("#f45342")
            .build())
        .build())
    .setApnsConfig(ApnsConfig.builder()
        .setAps(Aps.builder()
            .setBadge(42)
            .build())
        .build())
    .setTopic("industry-tech")
    .build();

Python

message = messaging.Message(
    notification=messaging.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.',
    ),
    android=messaging.AndroidConfig(
        ttl=datetime.timedelta(seconds=3600),
        priority='normal',
        notification=messaging.AndroidNotification(
            icon='stock_ticker_update',
            color='#f45342'
        ),
    ),
    apns=messaging.APNSConfig(
        payload=messaging.APNSPayload(
            aps=messaging.Aps(badge=42),
        ),
    ),
    topic='industry-tech',
)

Go

oneHour := time.Duration(1) * time.Hour
badge := 42
message := &messaging.Message{
	Notification: &messaging.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.",
	},
	Android: &messaging.AndroidConfig{
		TTL: &oneHour,
		Notification: &messaging.AndroidNotification{
			Icon:  "stock_ticker_update",
			Color: "#f45342",
		},
	},
	APNS: &messaging.APNSConfig{
		Payload: &messaging.APNSPayload{
			Aps: &messaging.Aps{
				Badge: &badge,
			},
		},
	},
	Topic: "industry-tech",
}

同じように、同じメッセージに data フィールドと notification フィールドの両方を含めることができます。

以前の送信オペレーション

Admin Node.js SDK では、上記で説明した send() メソッドに加えて、4 つの追加の送信オペレーションを使用できます。

  • sendToDevice()
  • sendToDeviceGroup()
  • sendToTopic()
  • sendToCondition()

上記の API を、いつ、どのように使用するかについては、レガシー FCM API をご覧ください。

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

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