ÃֽŠ°Ô½Ã±Û(JAVA)
2018.06.20 / 03:23

FCM Ǫ½Ã ¾Ë¸² ¿äû ¿ÀÇ ¼Ò½º °³¹ß ¹× °ø°³

¸®¾ó¸®
Ãßõ ¼ö 190

FCM Ǫ½Ã ¾Ë¸² ¿äû ¿ÀÇ ¼Ò½º °³¹ß ¹× °ø°³

JasonÀº React Native ¸ð¹ÙÀÏ ¾ÛÀ» °³¹ßÇÏ´Â Áß Çª½Ã ¾Ë¸² ±â´ÉÀÌ ÇÊ¿äÇß´Ù.

±×·¡¼­ óÀ½¿¡´Â ¿¹Àü¿¡ ¸¸µé¾î º¸¾Ò´ø GCM, APNS°ú Á÷Á¢ ¼ÒÅëÇϴ Ǫ½Ã Àü¼Û ½Ã½ºÅÛÀ» °³·®ÇÏ¿© µµÀÔÇÏ·Á Çß¾ú´Ù. ±×·¯ÇÑ °¡¿îµ¥ ÀÌ¹Ì Firebase¸¦ »ç¿ëÇÏ°í ÀÖ´Ù´Â Á¡À» »ó±âÇÏ¿© FirebaseÀÇ Cloud MessagingÀ» È°¿ëÇÏ´Â ¹æÇâÀ¸·Î »ý°¢À» ¹Ù²Ù°Ô µÇ¾ú´Ù.

FirebaseÀº Ãë¹Ì ´Ü°è¿¡¼­´Â ¸Å¿ì À¯¿ëÇѵ¥ ¹«¾ùº¸´Ù ¹«·á Á¤Ã¥ÀÌ ´Ù¸¥ Ŭ¶ó¿ìµå ¼­ºñ½º¿¡ ºñÇØ °ü´ëÇÑ ÆíÀ̱⠶§¹®ÀÌ´Ù.

Ǫ½Ã ¾Ë¸² ½Ã½ºÅÛÀ» Á÷Á¢ ±¸ÃàÇغ» ¿£Áö´Ï¾îµéÀº ÀÍÈ÷ ¾Ë°í ÀÖ°ÚÁö¸¸ GCM, APNS ½ºÆåÀÌ ´Ù¸£°í ´ë·® ¹ß¼ÛÀ» Áö¿øÇØ¾ß ÇÑ´Ù´Â Á¡À» Æ÷ÇÔÇϸé Á÷Á¢ °³¹ßÀ» Çϴµ¥´Â ¸¹Àº ³ë·ÂÀÌ µç´Ù.

Firebase Cloud Messaging, Ãà¾àÇÏ¿© FCMÀº iOS, Android, Chrome Ç÷§Æû¿¡ °øÅëÀûÀ¸·Î Ǫ½Ã ¾Ë¸²À» º¸³¾ ¼ö ÀÖ´Â GoogleÀÇ ¼­¹öÀÌ´Ù. GCMÀÇ »õ·Î¿î ¹öÀüÀ¸·Î Ç÷§Æû ±¸º°, ´ë·® Àü¼Û¿¡ ´ëÇÑ Æ¯º°ÇÑ ±¸Çö¾øÀÌ ÇÊ¿äÇÑ °ª¸¸ ½Ç¾î¼­ FCMÀ¸·Î Àü¼ÛÇϸé ÁöÁ¤ÇÑ ¸ð¹ÙÀÏ ¾Û¿¡¼­ Ǫ½Ã ¾Ë¸²À» ¹ÞÀ» ¼ö ÀÖ´Ù.

FCM¿¡ Ǫ½Ã ¾Ë¸² ¿äûÇÏ´Â ¹æ½ÄÀº ¿©±â¿¡ ³ª¿ÍÀÖµíÀÌ HTTP POST ¿äûÀ» ÇÏ¸é µÈ´Ù. JasonÀº ¸ðµÎ°¡ ½±°Ô ÀÌ¿ëÇÒ ¼ö ÀÖµµ·Ï ÀÌ HTTP POST ¿äûÀ» º°µµÀÇ ±¸Çö¾øÀÌ ¸Þ¼Òµå ½ÇÇà Çϳª·Î ¹ß¼ÛÇÒ ¼ö ÀÖµµ·Ï Java Client Library¸¦ ¸¸µé¾ú´Ù. ¸ðµç ±¸ÇöÀÇ ³×À̹Ö, ¼Ó¼ºµéÀº ¿©±â¿¡ ³ª¿ÍÀÖ´Â °ÍÀ» ¸ÂÃß¾ú´Ù.

GitHub: fcm-sender-java

»ç¿ë¹ýÀº ´ÙÀ½°ú °°´Ù.

DownstreamHttpNotification downstreamHttpNotificationAndroid =
DownstreamHttpNotificationAndroid.builder()
.setTitle("Hello")
.setBody("This is test notification.")
.build();

DownstreamHttpMessages downstreamHttpMessages =
new DownstreamHttpMessages(registrationIdForTest, null)
.setContentAvailable(true)
.setNotification(downstreamHttpNotificationAndroid)
.setData(this.getDownstreamHttpData())
.setDryRun(false);

FcmSender fcmSender = new FcmSender("Your Server Key");
DownstreamHttpResponse downstreamHttpResponse = fcmSender.sendNotification(downstreamHttpMessages);

FCM¿¡ Àü¼ÛÇÏ´Â JSON Payload¸¦ ¿ÀºêÁ§Æ®·Î ¸¸µç °ÍÀÌ DownstreamHttpMessages ÀÌ´Ù. DownstreamHttpMessagesÀº Àû¾îµµ ÇϳªÀÇ registrationId¸¦ ¿ä±¸Çϴµ¥(¼ÒÀ§¸»ÇØ °íÀ¯ Ǫ½Ã ¾ÆÀ̵ð) Çϳª¸¸ º¸³¾ ¶§¿¡´Â ´ÙÀ½°ú °°ÀÌ ÇÏ¸é µÇ°í.

new DownstreamHttpMessages("{Specific Registration Id}", null)

¿©·¯°³¸¦ º¸³»¾ß ÇÑ´Ù¸é

new DownstreamHttpMessages(null, List.of({Registration Id 1}, {Registration Id 2}, {Registration Id 3}))

¿Í °°ÀÌ º¸³¾ ¼ö ÀÖ´Ù. º¸´Ù½ÃÇÇ Àû¾îµµ ÇϳªÀÇ registrationId¸¦ º¸³»¾ß ÇÑ´Ù.

JSON Payload´Â Å©°Ô notification, data·Î ³ª´­ ¼ö ÀÖ´Ù.

notificationÀº Android, iOS Çʼö, ¼±Åà ¼Ó¼ºÀÌ ´Ù¸¥ ºÎºÐÀÌ ÀÖ´Ù. ±×·¡¼­ DownsteamHttpNotificationÀ̶ó´Â ÀÎÅÍÆäÀ̽º·Î ¹­°í À̸¦ ±¸ÇöÇÑ DownstreamHttpNotificationImpl¿¡ Ç÷§Æû °øÅë ¼Ó¼ºÀ» Á¤ÀÇÇÏ°í DownstreamHttpNotificationAndroid, DownstreamHttpNotificationIos¸¦ º°µµ·Î ¸¸µé¾î »ó¼ÓÀ» ¹Þ°í °¢ÀÚ ´Ù¸¥ ¼Ó¼ºÀ» Á¤ÀÇÇϵµ·Ï ÇÏ¿´´Ù.

data´Â »ç¿ëÀÚ Á¤ÀÇ °ø°£ÀÌ´Ù. µû¶ó¼­ deep-link, user infor. µî ¾Û¿¡ Àü´ÞÇÏ°íÀÚ ÇÏ´Â µ¥ÀÌÅ͸¦ ¸¸µé¾î ³ÖÀ¸¸é µÈ´Ù. ÇÏÁö¸¸ ¸Þ¼Òµå¿¡¼­´Â °øÅë ŸÀÔÀ¸·Î ¹Þ¾Æ¾ß Çϱ⠶§¹®¿¡ DownstreamHttpData´Â ÀÎÅÍÆäÀ̽º·Î Á¸ÀçÇÑ´Ù.

public class DownstreamHttpDataImpl implements DownstreamHttpData { 
private String deepLink;
private String uid;
  public DownstreamHttpDataImpl(String deepLink, String uid) {    
this.deepLink = deepLink;
this.uid = uid;
}
...

À§¿Í °°Àº ±¸Çöü¿¡ ¿øÇÏ´Â Á¤º¸¸¦ ´ã¾Æ¼­ ½Ç¾îÁÖ¸é µÈ´Ù.

FcmSender´Â ½ÇÁ¦ ¹ß¼ÛÀ» ´ã´çÇϴ Ŭ·¡½º·Î¼­ ÀνºÅϽº »ý¼º ½Ã Server Key¸¦ ¿ä±¸ÇÑ´Ù. ÇØ´ç Å°´Â ´ÙÀ½°ú °°ÀÌ FirebaseÀÇ Project Setting¿¡¼­ ãÀ» ¼ö ÀÖ´Ù.

How to get Server key.

JasonÀº ÀÌ ¶óÀ̺귯¸®¸¦ »ç¿ëÇÏ´Â ´ë»óÀÌ ½ºÇÁ¸µ ÇÁ·¹ÀÓ¿öÅ©¿´±â ¶§¹®¿¡ FcmSender¸¦ BeanÀ¸·Î µî·ÏÇÒ »ý°¢À» ÇÏ°í ½Ì±ÛÅæÀ¸·Î ±¸ÇöÇÏÁö ¾Ê¾Ò´Ù. °è¼Ó ÀνºÅϽº¸¦ »ý¼ºÇÒ ÇÊ¿ä°¡ ¾ø±â ¶§¹®¿¡ DI¸¦ ÀÌ¿ëÇÏÁö ¾Ê´Â ´Ù¸¥ »óȲ¿¡¼­´Â ÇÊ¿ä ½Ã ½Ì±ÛÅæÀ¸·Î ¸¸µé¾î »ç¿ëÇÏ¸é µÈ´Ù.

¸ðµç Á¶°ÇÀ» ¸ÂÃß¾î Àü¼ÛÀ» Çϸé DownstreamHttpResponse¿¡ ¸Â°Ô ÀÀ´äÀ» ¾òÀ» ¼ö ÀÖ´Ù. Àü¼ÛÀÌ ¼º°øÇß´ÂÁö, Registration Id°¡ °»½ÅµÇ¾î ÀÖ´ÂÁö µî Á¤º¸¸¦ ¾Ë ¼ö ÀÖ´Ù.

JfrogÀÇ Bintray¸¦ ÀÌ¿ëÇÏ¿© jCenter ÀúÀå¼Ò¿¡ ¿Ã·È±â ¶§¹®¿¡ maven, gradle·Î Ãß°¡ÇÏ¿© »ç¿ëÇÒ ¼ö ÀÖ´Ù.

<dependency>
<groupId>com.illicis</groupId>
<artifactId>fcm-sender-java</artifactId>
<version>0.0.1</version>
</dependency>
compile 'com.illicis:fcm-sender-java:0.0.1'

±×µ¿¾ÈÀº È¥ÀÚ ¸¸µé¾î È¥ÀÚ ½è´Âµ¥ °ø°³ ´Ü°è±îÁö ÁøÀÔÇÏ·Á´Ï ÇÇ°ïÇÑ ÀÏÀÌ ¸¹¾Ò´Ù. ¾Æ¹«ÂÉ·Ï ¿ÀÇ ¼Ò½º »ýÅ°迡 ÀÛÀº µµ¿òÀÌ µÇ±â¸¦ ¹Ù¶õ´Ù.

https://medium.com/@enzinier/fcm-%ED%91%B8%EC%8B%9C-%EC%95%8C%EB%A6%BC-%EC%9A%94%EC%B2%AD-%EC%98%A4%ED%94%88-%EC%86%8C%EC%8A%A4-%EA%B0%9C%EB%B0%9C-%EB%B0%8F-%EA%B3%B5%EA%B0%9C-55e6fce411d5