메시지 전송

시작하기 전에

Admin FCM API를 사용하려면 우선 서버에 Firebase Admin SDK 추가 단계를 따릅니다. 또한 Firebase 프로젝트 ID로 Admin SDK를 초기화해야 합니다. 다음 3가지 방법 중 하나를 사용합니다.

  • projectId Firebase 앱 옵션을 명시적으로 지정합니다.
  • 서비스 계정 사용자 인증 정보로 SDK를 초기화합니다.
  • GCLOUD_PROJECT 환경 변수를 설정합니다.

    export GCLOUD_PROJECT='my-project-id'
    

이 가이드에서는 Admim FCM API에서 지원되는 Node, 자바, Python, Go와 같은 모든 언어의 코드 샘플을 제공합니다. 각 API에 관한 자세한 내용은 해당 참조를 확인하세요.

개별 기기로 전송

Admin FCM API를 사용하면 타겟 기기에 등록 토큰을 지정하여 개별 기기에 메시지를 보낼 수 있습니다. 등록 토큰은 최종 사용자 클라이언트 앱 인스턴스별로 클라이언트 FCM SDK가 생성하는 문자열입니다.

각 Firebase 클라이언트 SDK는 iOS, Android, , 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);
  });

자바

// 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)
if err != nil {
	log.Fatalf("error getting Messaging client: %v\n", err)
}

// 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() 메소드는 메시지 ID 문자열을 projects/{project_id}/messages/{message_id} 형식으로 반환합니다. 그렇지 않은 경우 오류가 표시됩니다. 설명 및 해결 단계가 포함된 전체 오류 코드 목록은 Admin FCM API 오류를 참조하세요.

주제로 전송

FCM 주제 메시징을 사용하면 게시/구독 모델을 기반으로 특정 주제를 구독하는 여러 기기에 메시지를 보낼 수 있습니다. 필요에 따라 주제 메시지를 작성하면 FCM에서 라우팅을 처리하여 올바른 기기에 정확히 전달합니다.

예를 들어, 지역 조수 예보 앱 사용자는 '조류 특보' 주제를 구독하여 해당 지역에서 최적의 바다 낚시 상태 알림을 수신할 수 있습니다. 스포츠 앱 사용자는 응원하는 팀의 경기 점수 실황을 자동 업데이트로 수신하도록 구독할 수 있습니다.

주제와 관련된 주의사항은 다음과 같습니다.

  • 주제 메시징은 날씨 등 공개적으로 제공되는 정보에 가장 적합합니다.
  • 주제 메시지는 지연 시간이 아닌 처리량을 위주로 최적화됩니다. 기기 한 대나 적은 수의 기기에 빠르고 안전하게 전달하려면 주제가 아닌 등록 토큰으로 메시지를 타겟팅하세요.
  • 사용자를 기준으로 여러 기기에 메시지를 보내야 하는 경우 기기 그룹 메시징을 사용하세요.
  • 주제 메시징에서 각 주제에 지원하는 구독에는 제한이 없습니다. 그러나 FCM은 다음 영역에 제한을 두고 있습니다.
    • 하나의 앱 인스턴스는 최대 2,000개까지의 주제를 구독할 수 있습니다.
    • 일괄 가져오기를 사용하여 앱 인스턴스를 구독하는 경우 각 요청은 1,000개의 앱 인스턴스로 제한됩니다.
    • 새 구독의 빈도는 프로젝트별로 비율이 제한됩니다. 단기간에 지나치게 많은 구독 요청을 보내는 경우 FCM 서버는 429 RESOURCE_EXHAUSTED('할당량 초과') 응답을 보냅니다. 지수 백오프로 다시 시도해 주세요.

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);
  });

자바

// 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와 함께 TopicB 또는 TopicC를 구독하는 기기로 메시지를 보냅니다.

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

FCM은 괄호 안의 조건부터 모두 판정한 후 왼쪽에서 오른쪽으로 표현식을 판정합니다. 위 표현식에서는 주제를 하나만 구독한 사용자는 메시지를 수신하지 않습니다. 또한 TopicA를 구독하지 않은 사용자도 메시지를 수신하지 않습니다. 다음과 같이 조합되어야 메시지를 수신합니다.

  • TopicATopicB
  • TopicATopicC

Admin FCM API를 사용하면 여러 주제를 조합하여 구독하는 기기를 타겟팅하기 위해 send() 메소드를 호출할 때 조건을 지정할 수 있습니다. 조건식에 최대 5개의 주제를 포함할 수 있습니다.

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);
  });

자바

// 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 서비스는 이 모드에서 보낸 메시지에 일반적인 검증을 모두 수행하지만 타겟 기기에 메시지를 실제로 전송하지는 않습니다. 따라서 이 기능을 사용하여 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);
  });

자바

// 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 모든 키와 값이 문자열인 키-값 쌍의 매핑입니다.
notification titlebody 필드가 있는 객체입니다.
android Android 메시지와 관련된 필드로 구성된 객체입니다. 자세한 내용은 Android 관련 필드를 참조하세요.
apns Apple 푸시 알림 서비스(APNS)와 관련된 필드로 구성된 객체입니다. 자세한 내용은 APNS 관련 필드를 참조하세요.
webpush 웹 푸시 프로토콜과 관련된 필드로 구성된 객체입니다. 자세한 내용은 웹 푸시 관련 필드를 참조하세요.
token 메시지의 수신자 기기를 식별하는 등록 토큰입니다.
topic 메시지를 보낼 주제 이름입니다. 주제 이름에 /topics/ 프리픽스를 포함해서는 안 됩니다.
condition 메시지를 보낼 조건입니다. 예: "foo" in topics && "bar" in topics

동일한 메시지에서 android, apns, webpush, notification 필드를 설정할 수 있습니다. FCM 서비스는 지정된 모든 매개변수를 고려하여 각 플랫폼에 메시지를 맞춤설정합니다. 단, 메시지에 token, topic, condition 필드 중 하나만 포함해야 합니다. 필드를 하나도 지정하지 않거나 여러 필드를 지정하면 오류가 발생합니다.

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'
};

자바

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으로 설정합니다(Fire and Forget(실행 후 잊기) 방식). Node.js 및 자바의 경우 이 기간을 밀리초로 설정합니다. Python에서는 `datimetime.timedelta` 값으로 지정할 수 있습니다. Go에서는 `time.Duration`으로 지정합니다.
restrictedPackageName 등록 토큰이 일치해야 메시지를 수신할 수 있는 애플리케이션의 패키지 이름입니다.
data 각 키와 값이 문자열인 키-값 쌍의 매핑입니다. 이 매개변수를 지정하면 최상위 메시지에 설정된 data 필드를 재정의합니다.
notification Android 알림과 관련된 필드로 구성된 객체입니다. 지원되는 필드 목록은 다음 표를 참조하세요.

Android notification 객체에 포함할 수 있는 필드는 다음과 같습니다.

매개변수 설명
title 알림의 제목입니다. 이 매개변수를 설정하면 최상위 메시지 알림에 설정된 title 필드를 재정의합니다.
body 알림의 본문입니다. 이 매개변수를 설정하면 최상위 메시지 알림에 설정된 body 필드를 재정의합니다.
icon 알림 아이콘입니다. 이 매개변수를 지정하지 않으면 FCM은 앱 매니페스트에 지정된 런처 아이콘을 표시합니다.
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'
};

자바

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 사전 및 다른 맞춤 키-값 쌍을 포함하는 APNS 페이로드입니다. 지원되는 필드는 APNS 페이로드 키 참조를 확인하세요. Admin SDK는 일반적인 APNS 페이로드 필드에 지정된 setter를 제공합니다.

웹 푸시 관련 필드

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'
};

자바

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 웹 푸시 프로토콜에 정의된 HTTP 요청 헤더입니다. 지원되는 헤더는 웹 푸시 사양을 참조하세요.
data 각 키와 값이 문자열인 키-값 쌍의 매핑입니다. 이 매개변수를 지정하면 최상위 메시지에 설정된 data 필드를 재정의합니다.
notification title, body, icon 필드가 있는 객체입니다. 제목과 본문은 최상위 메시지 알림의 해당 필드를 재정의합니다.

하나로 결합

메시지에는 여러 기기 플랫폼의 구성 매개변수가 포함될 수 있습니다. 따라서 동일한 메시지에서 android, apns, webpush 필드를 포함할 수 있습니다. 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'
};

자바

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",
}

같은 맥락으로 동일한 메시지에서 datanotification 필드를 모두 포함할 수 있습니다.

이전 보내기 작업

Admin Node.js SDK는 위에서 설명한 send() 메소드 외에도 추가 보내기 작업 4가지를 지원합니다.

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

이러한 API를 사용하는 방법과 시기에 대한 자세한 내용은 이전 FCM API를 참조하세요.

다음에 대한 의견 보내기...

도움이 필요하시나요? 지원 페이지를 방문하세요.