app server 를 통해 FCM을 이용하는 경우 단 한번에 모든 사용장에게 notification을 보낼 방법은 없다. 각각의 기기들에게 (token을 이용)보내거나 topic 별로 보낼수 있다. ref) https://stackoverflow.com/q/38237559

New Firebase token is generated (onTokenRefresh() is called) when:

  • The app deletes Instance ID
  • The app is restored on a new device
  • The user uninstalls/reinstall the app
  • The user clears app data.

ref) https://stackoverflow.com/a/38727643

notification을 통해 전달된 data를 다른 activity로 전달해서 처리하는 경우

(notification을 클릭했을때 다른 activity에서 처리하게하는 방법)

app server(fcm server 로 data를 보내고 결과를 받아낼) 설정및 사용방법    ref) https://firebase.google.com/docs/cloud-messaging/server

 http을 이용 FCM과 커뮤니케이션하는 경우 전달 되어지는 data형태 ref) https://firebase.google.com/docs/cloud-messaging/http-server-ref

FCM사용의 기본 ref) https://firebase.google.com/docs/cloud-messaging/concept-options

firebase UI 를 통하는 경우

  • backgound시에는 무조건 onMessageReceived()를 bypass한다. 어드밴스항목을 통해 정보를 넣어도 bypass한다.(notification을 클릭하면 무조건 launcher로 이동)
  • foreground시에는 어드밴스 항목에서작성한 항목은 data payload로 받아진다.
  • foreground시에서 받아진 data payload는 사용자가 앱에서 background로 이동한 다음 notification을 클릭해도 foreground에서 받은것처럼 유지 행동하게 된다.
  • 어드밴스항목을 사용하지 않고 작성하는 경우는 foreground에서는

    onMessageReceived() 를 거치며 data payload는 없는 것으로 처리된다.

App server를 이용하는 경우

data = { “notification”:
               {“title”: “test title from app server”,
                   "body": “test messge from app server”},

           "to" : “asdfghjkl……”
           }  

위와같이 notification방식으로하는 경우 foreground일때는 

onMessageReceived() 를 거친다. background의 경우 bypass 한다. 그리고 notification을 클릭하면 launcher로 이동

data = { “notification”:
              {“title”: “test title from app server”,
                  “body”: “test messge from app server”, “click_action”:”액션이름”},

          “to” : “asdfghjkl……”
          }

위와같이 action name을 지정해 주고<intent-filter> 와 그안의 <action android:name>을 이용 notification을 사용자가 클릭하면 특정 activity로 이동하게 할수 있지만 title, body값에 접근 할수 없다. click_action은 data전달이 필요없는 작업을 수행할때만 사용가능.

사용자가 foreground, background 든 어느쪽에서든 받은 notification 클릭시 내가 원하는 방향으로 이동하게 하기위해서는 app server에서 data payload를 넣어서 작성해야한다. 즉 내가 단순한 message (notification)만을 전달하더라도app server datapayload 방식을 택해야 사용자가 클릭하고 app안으로 이동 읽을수 있게 된다.

How do you send a Firebase Notification to all devices via CURL?

How do you send a Firebase Notification to all devices via CURL?

Receive Messages in an Android App  |  Firebase

Receive Messages in an Android App  |  Firebase

Notification Icon with the new Firebase Cloud Messaging system – Stack Overflow

Notification Icon with the new Firebase Cloud Messaging system – Stack Overflow