728x90

문제 상황

400 Bad Request 가 나면서 지속적으로 망할놈의 Bad Request 만 발견되던 상황이였고, 이런 부분은 아래와 같이 해결할 수 있다. 

 

https://firebase.google.com/docs/reference/fcm/rest/v1/projects.messages/send

 

Method: projects.messages.send  |  Firebase Cloud Messaging REST API

 

firebase.google.com

 

이렇게 위의 해당하는 URL로 가게 되면 우측 창에 Payload 를 전개할 수 있는 창이 있는데, 해당하는 부분에 파라미터들을 추가하면서 실험해볼 수가 있다.

 


이걸 해결하기 전까지는 어떤 삽질들을 했을까?

1. Postman을 이용한 삽질

 

아래와 같이 Payload  를 정의한다.

 

POST 에 소스코드에서 추가했던 바처럼 message 의 send 를 보낼 수 있는 엔드포인트를 postman의 상단에 정의한다

POST https://fcm.googleapis.com/v1/projects/moyamo-plus/messages:send

 

 

Request Body 를 정의한다.

FCM HTTP v1 Payload 에서는 공통 부분을 정의할 때에는 (안드로이드와 iOS에 대해서 동시에 발송할 때에는) 반드시 message 하부에 notification 의 body가 정의되어야 한다. 

 

{
    "message":{
        "notification":{
            "title":"이름이 뭘까요?",
            "body":"알림테스트에 들어갑니다"
        },
        "token":"fG1sB-i_TRWsI1W9vjL0ql:APA91bFq8CvJ14HqaWDBDO7b4qNwk3avS4_RP849X-s801cIjXgRgfTHLULLpojpXI9tACW1hDmZEkINjXJpU6oh4y4YTIEm3k7LvYQO8Z0zOrkYEAIY1E3bbPtB77y3YhjALR0JF8XL",
        "android":{
            "notification":{
                "click_action":".MainActivity",
                "sound":"default"
            }
        }
    },
    "validate_only":false
}

 

 

android의 경우에는 notification 이 있고 title 과 body가 있을 경우 해당하는 속성을 override 해서 사용하므로 해당하는 부분만 참고하면 된다.

 

주의해야 할 부분에 대한 정의

1. Common Notification에 대한 Payload

FCM HTTP v1 Payload 에서는 공통 부분을 정의할 때에는 (안드로이드와 iOS에 대해서 동시에 발송할 때에는) 반드시 message 하부에 notification 의 body가 정의되어야 한다. 

 

 

2. Android Notification 과 Common Notification의 Conflict 

message의 common noficatication field 와 android 에서 해당하는 부분을 동시에 정의했을 경우 Push Notification 이 발송되었을 때, Android 내에서 Main Activity 로 가서 intent-filter 에 의해서 발동하는 clickAction 이 정상적으로 발동되지 않는다.

 

따라서 Main Activity 로 향하는 부분에 대한 정의만 필요하다면 굳이 Android 에 대한 부분을 정의하면서 최상단에 있는 Common Notification field 를 정의하진 말자

 

3. Custom Notication 에 대한 가능 여부

정확하게는 clickAction에 대한 유도라기 보다, Push Notification 에 대한 Custom Notification의 가능 여부는 당연히 가능하다.

 

모든 부분에 대한 사용 중에서 Data property 를 사용하면 되고, Payload 는 다음과 같이 전개하면 된다.

{
  "message": {
    "data": {
      "title": "<가을에 심는 구근> 알리움 2개 품종",
      "description": "test data close",
      "id": "15170295",
      "photoUrl": "",
      "referenceId": "15170295",
      "referenceType": "question",
      "resourceType": "question",
      "resourceId": "15170295"
    },
    "token": "fG1sB-i_TRWsI1W9vjL0ql:APA91bFq8CvJ14HqaWDBDO7b4qNwk3avS4_RP849X-s801cIjXgRgfTHLULLpojpXI9tACW1hDmZEkINjXJpU6oh4y4YTIEm3k7LvYQO8Z0zOrkYEAIY1E3bbPtB77y3YhjALR0JF8XL"
  },
  "validate_only": false
}

 

 

물론 이와같이 정의했을 경우 안드로이드에서 받아서 처리하는 Json에 대한 처리는 Android 내부에서 담당하게 되어있다.

+ Recent posts