Amazon SNS - FCM λͺ¨λ°μΌ νΈμ
PWA μ±μμ νΈμ μλ¦Όμ μν΄ FCM(Firebse Cloud Messaging)μ λμ νλ€λ©΄ Amazon SNSμ λͺ¨λ°μΌ νΈμ μλ¦ΌμΌλ‘ ν΅ν©ν μ μλ€. Firebase Admin SDK λ‘λ μ½κ² νΈμ μλ¦Όμ μν λ©μμ§λ₯Ό μ μ‘ν μ μμ§λ§ Amazon SNSμ λ±λ‘λ νλ«νΌ μ ν리μΌμ΄μ μ ν΅ν΄ μ¬μ©μ λλ°μ΄μ€λ₯Ό μ ν리μΌμ΄μ μ€λν¬μΈνΈλ‘ κ΄λ¦¬νκ³ μ°λ¦¬λ Amazon SNSμ λ±λ‘λ νλ«νΌ μλν¬μΈνΈλ₯Ό ν΅ν΄ λλ°μ΄μ€λ‘ νΈμ μλ¦Όμ μ λ¬ν΄λ³΄λλ‘ νμ.
νλ«νΌ μ ν리μΌμ΄μ μμ± μ FCM μ격 μ¦λͺ λ±λ‘
FCM νΈμ μλ¦Ό νλ«νμ μ¬μ©νλ μ ν리μΌμ΄μ μμ± μ FCM μ½μμ μλΉμ€ κ³μ μμ λ°κΈλ°μ Firebase μλΉμ€ κ³μ μ λΉκ³΅κ° ν€ μ 보λ₯Ό λ±λ‘ν΄μΌ νλ€. Firebase Admin SDK μμ μ¬μ©μ€μ΄μλ μλΉμ€ κ³μ μ JSON νμΌμ κ·Έλλ‘ μ€μ νλ€.
μ ν리μΌμ΄μ μ€λν¬μΈνΈ μμ± μ FCM λλ°μ΄μ€ ν ν° λ±λ‘
νλ«νΌ μ ν리μΌμ΄μ μμ λ©μμ§λ₯Ό μ λ¬ν μλν¬μΈνΈλ νλμ μλ³ν μ μλ λλ°μ΄μ€λΌκ³ μκ°νλ©΄ λλ€. λλ°μ΄μ€ ν ν°μ FCM ν΄λΌμ΄μΈνΈ SDKλ‘λΆν° λλ°μ΄μ€ λ΄μμ λ°κΈλ°μ ν ν°μ μ λ ₯νλ©΄ λλ€. μ ν리μΌμ΄μ μλν¬μΈνΈ μμ± ν λ©μμ§ κ²μλ₯Ό ν΅ν΄ μν λ©μμ§λ₯Ό μ λ¬ν΄λ³Ό μ μλ€.
{
"GCM": "{ \"data\": { \"title\": \"Hi!\", \"body\": \"Mambo?!\" } }"
}
Amazon SNSμ λͺ¨λ°μΌ νΈμ μλ¦Όμμ FCMμ μν λ©μμ§λ GCM μ΄λΌλ ν€λ‘ μ¬μ©ν©λλ€.
Amazon SNS SDK for Java V2λ‘ λ©μμ§ κ²μ
μΉ μ½μμ ν΅ν΄ FCM λ©μμ§κ° λλ°μ΄μ€λ‘ νΈμ μλ¦Όμ΄ λμμμ νμΈνλ€λ©΄ Amazon SDK for Java v2λ₯Ό μ¬μ©ν΄μ νλ‘κ·Έλλ° λ°©μμΌλ‘ λ©μμ§λ₯Ό μ μ‘ν΄λ³΄λλ‘ νμ. λ¨Όμ , μλμ κ°μ΄ λͺ¨λ°μΌ νΈμ APIλ₯Ό μ¬μ©νκΈ° μν Amazon SDK for Java v2 μμ‘΄μ±μ μΆκ°νλλ‘ νμ.
dependencies {
implementation platform('software.amazon.awssdk:bom:2.26.16')
implementation 'software.amazon.awssdk:sns'
}
μμ‘΄μ±μ μΆκ°νλ€λ©΄ λͺ¨λ°μΌ νΈμ API μ€ CreatePlatformEndpointμ Publishλ₯Ό μ¬μ©ν΄μ λ©μμ§λ₯Ό κ²μνλ μν μ½λλ₯Ό λ§λ€μ΄λ³Ό μ μλ€.
@Test
void send() {
try (SnsClient snsClient = SnsClient.builder()
.credentialsProvider(ProfileCredentialsProvider.create())
.region(Region.AP_NORTHEAST_2)
.build()) {
Assertions.assertDoesNotThrow(() -> {
String platformApplicationArn = "";
String fcmDeviceToken = "";
String endpointArn = snsClient.createPlatformEndpoint(CreatePlatformEndpointRequest.builder()
.platformApplicationArn(platformApplicationArn)
.token(fcmDeviceToken)
.build()).endpointArn();
Gson gson = new GsonBuilder().create();
String fcmMessage = gson.toJson(Map.of("data", Map.of("title", "Hi!", "body", "Mambo?!")));
String messageId = snsClient.publish(PublishRequest.builder()
.messageStructure("json")
.message(gson.toJson(Map.of("GCM", fcmMessage)))
.targetArn(endpointArn)
.build()).messageId();
log.info("messageId: {}", messageId);
Assertions.assertNotNull(messageId);
});
}
}
μ μμ μ½λμμ λ©μμ§μ GCM μ΄ μ΄μ€μΌμ΄νλ JSON λ¬Έμμ΄λ‘ ꡬμ±λμ΄μΌν¨μ μ£Όμν΄μΌν©λλ€.