문제 상황
400 Bad Request 가 나면서 지속적으로 망할놈의 Bad Request 만 발견되던 상황이였고, 이런 부분은 아래와 같이 해결할 수 있다.
https://firebase.google.com/docs/reference/fcm/rest/v1/projects.messages/send
이렇게 위의 해당하는 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 내부에서 담당하게 되어있다.
'Java > Spring Boot JPA' 카테고리의 다른 글
[FCM HTTP v1] 400 Bad Request 와 문제 해결 (0) | 2024.10.06 |
---|---|
[CORS] setAllowdOrigins method and property (0) | 2024.08.28 |
[Trouble Shooting] Hibernate: "Field 'id' doesn't have a default value" (1) | 2024.07.23 |
Request Body로 보내지는 JSON의 행방 불명 (3) | 2024.05.16 |
JPA - Field 'id' doesn't have a default value (0) | 2024.05.13 |