마스터Q&A 안드로이드는 안드로이드 개발자들의 질문과 답변을 위한 지식 커뮤니티 사이트입니다. 안드로이드펍에서 운영하고 있습니다. [사용법, 운영진]

fcm 개별 발송? 그리고 서버

0 추천
제가 본 fcm 예제들은 그 파이어베이스에서 직접 입력해서 푸시하면 전체사용자에게 알람이간다 인데..

예제로 한번 해보고, 실제로 실무나 포폴같은곳에 적용해본적은 없어서 그냥 아는수준이 딱 저정도입니다만

이번에 백엔드 외주업체랑 미팅했는데 fcm 할때 서버에서 푸시하고 기록을 한다?는거로 들었는데

fcm쓰는데 서버에서 왜 푸시하는건지.. 파베에서 푸시하는거로 아는데 뭔지 알수있을까요?

그리고 사용자가 갖고 있는 상품 상태에 따라 푸시 알람을 구현해야하는데 음 예를 들면 막 물건사면 네이버페이나, 택배앱같은거보면 막 상품이 발송됩니다, 상품도착예정입니다 등으로 각 사용자마다 그 상태값을 푸시해주잖아요 이런건 어떤방식으로 하는건지 뭐라고 검색해야할지.. 예제블로그같은거 하나 아시는거 있으면 알려주세요 검색 키워드라도
수원통학러 (3,570 포인트) 님이 2020년 12월 5일 질문

1개의 답변

0 추천

외주업체에서 말한 접근 방법이 백엔드가 존재한다면 일반적인 솔루션이 될 겁니다. 왜냐하면 어차피 어떤 이벤트에 푸쉬 메세지를 보내야할 지는 백엔드의 몫이 거든요. 파이어베이스는 다만 푸쉬기능을 디바이스에 전해주는 역할을 하는 플랫폼일 뿐이므로, 거기에 종속되지 않도록 하려면, 백엔드에서 파이어베이스를 연결하는 인터페이스를 만들고 카프카같은 메세지큐에 넣어서 동작하도록 하는 것이 훨씬 유연한 솔루션입니다. 만약 백엔드가 바로 파이어베이스에 물려 사용한다면, 추후에 회사에서 더 적합한 푸쉬시스템이 있어서 바꾸기로 한다면, 마이그레이션하는데 상당한 수고가 따를 것입니다. 푸쉬시스템이 실제적으로 어떤 벤더를 사용하는지 상관하지 않고 메세지큐와 인터페이스 형태로 만든다면, 변경사항을 최소화될 수 있겠죠. 그렇기 때문에 어떤 라이브러이던, 의존된 플랫폼이던 간에, 그것이  third party  라면 wrapping해서 사용하는 것이 좋습니다. 이건 안드로이드도 마찬가지죠. 예를 들면 이미지 로딩 라이브러리를 피카소를 사용하고 있었다면, 이걸 wrapping하지 않고 사용했다면, 나중에 Glide로 변경한다고 하면, 소스 여기저기를 손대야 할 겁니다. 하지만 

interface ImageLoader {
    fun loadImageTo(View: ImageView, url: String)
}

class PicassoImageLoader : ImageLoader {

}

class GlideImageLoader: ImageLoader {

}


object DependencyInjector {

    fun getImageLoader(): ImageLoader [
          return PicassoImageLoader();

         //만약 Glide로 교체한다면, 
         // return new GlideImageLoader();
    }
}


class MyActivity ... {

   private val ImageLoader = DependencyInjector.getImageLoader();

  ImageLoader.loadImageTo( imageView, "http://blablabla")
}

 

이런식으로 인터페이스를 만들고 실제 구현은 라이브러리에 따라 하게 되면, 앱에서는 ImageLoader  인터페이스만 사용하기 때문에, 변경에 따른 임팩트는 최소화할 수 있게 됩니다.

그리고, 다른 중요한 이유 중의 하나는 FCM은 일반적인 유즈케이스를 고려한 시스템이므로, 비즈니스의 요구사항을 수용하기 쉽도록 하려면, 중간에 이것을 수용할 시스템이 필요합니다. FCM이 님의 회사 비지니스 룰을 반영해주지는 않으니까요. 따라서 별도의 백엔드가 FCM을 중계하는 것을 올바른 선택이라고 보여집니다.

spark (226,420 포인트) 님이 2020년 12월 5일 답변
잘 이해가 안되서 그런데.. 답변주신대로 백엔드에서 이벤트에 따라 어떤 푸쉬메시지를 보낸다고 쳤을때.. 이걸 retroift으로 받아서 처리해야하는건가요..? 파이어베이스는 그럼 누가 처리하는건지 백엔드인지 저인지..
그건 백엔드 구현에 따라 달라지겠죠. 백엔드에서 파이어베이스에 푸쉬를 전송하고 그 결과값은 받아 처리한다면  님은 백엔드 쪽하고만 통신을 하면 될거구요, 그렇지 않다면 파이어베이스의 이벤트를 기다리면 됩니다. 이 부분은 님이 백엔드 쪽으로부터 명확하게 들으셔야 하는 부분입니다. 저같은 경우는 파이어베이스를 내부적으로 이용하는 푸쉬서비스를 사용했는데, 거기서 제공하는 sdk를 사용했었습니다. 백엔드 쪽에 궁금한 점은 다 확인하셔야 합니다.
...