투케이2K

215. (TWOK/ERROR) [Android] Firebase push v1 파이어베이스 푸시 V1 방식 메시지 수신 시 데이터 파싱 이슈 본문

투케이2K 에러관리

215. (TWOK/ERROR) [Android] Firebase push v1 파이어베이스 푸시 V1 방식 메시지 수신 시 데이터 파싱 이슈

투케이2K 2024. 1. 30. 20:33

[환경 설정 및 설명]

프로그램 : AndroidStudio

설 명 : [Android] Firebase push v1 파이어베이스 푸시 V1 방식 메시지 수신 시 데이터 파싱 이슈

 

[에러 원인]

1. 기존 FCM 데이터 파싱 시 레거시 푸시 메시지 페이로드 형식만 지정되어 있어 발생하는 이슈

>> 기존 FCM 레거시 페이로드 형식 참고
{
  "data" : {
       "title" : "Push Test",
       "body"  : "Talend API 푸시테스트"
  },
  "to":"dvPXofxPQBSqWwACr2cW6b:APA91b...",
  "Android": {
    "priority": "high"
  },
  "priority": 10
}


>> 기존 안드로이드 FCM 메시지 파싱 참고

        if(remoteMessage.getData() != null
                && remoteMessage.getData().isEmpty() == false
                && String.valueOf(remoteMessage.getData().get("title")) != null
                && String.valueOf(remoteMessage.getData().get("title")).length() > 0
                && String.valueOf(remoteMessage.getData().get("body")) != null
                && String.valueOf(remoteMessage.getData().get("body")).length() > 0) {


            type = "getData"; // [타입 저장]
            title = String.valueOf(remoteMessage.getData().get("title")); // [타이틀 저장]
            messagae = String.valueOf(remoteMessage.getData().get("body")); // [메시지 저장]
        }
 

[해결 방법]

1. 안드로이드 푸시 메시지 수신 시 기존 레거시 페이로드 및 V1 페이로드 모두 파싱 가능 하도록 대응 수행

 

>> FCM V1 페이로드 참고

{
    "message": {
        "token": "<기기 고유 푸시 토큰 값>",
        "notification": {
          "body": "Body of Your Notification in data",
          "title": "Title of Your Notification in data"
        }
    }
}


>> 안드로이드 푸시 메시지 파싱 참고

        // -----------------------------------------
        if(remoteMessage.getData() != null
                && remoteMessage.getData().isEmpty() == false
                && String.valueOf(remoteMessage.getData().get("title")) != null
                && String.valueOf(remoteMessage.getData().get("title")).length() > 0
                && String.valueOf(remoteMessage.getData().get("body")) != null
                && String.valueOf(remoteMessage.getData().get("body")).length() > 0) {


            type = "getData"; // [타입 저장]
            title = String.valueOf(remoteMessage.getData().get("title")); // [타이틀 저장]
            messagae = String.valueOf(remoteMessage.getData().get("body")); // [메시지 저장]
        }
        // -----------------------------------------
        else if(remoteMessage.getNotification() != null
                && remoteMessage.getNotification().getTitle().isEmpty() == false
                && remoteMessage.getNotification().getBody().isEmpty() == false
                && String.valueOf(remoteMessage.getNotification().getTitle()) != null
                && String.valueOf(remoteMessage.getNotification().getTitle()).length() > 0
                && String.valueOf(remoteMessage.getNotification().getBody()) != null
                && String.valueOf(remoteMessage.getNotification().getBody()).length() > 0){


            type = "getNotification"; // [타입 저장]
            title = String.valueOf(remoteMessage.getNotification().getTitle()); // [타이틀 저장]
            messagae = String.valueOf(remoteMessage.getNotification().getBody()); // [메시지 저장]
        }
        // -----------------------------------------
        else {
            type = "NONE"; // [타입 저장]
            title = ""; // [타이틀 저장]
            messagae = ""; // [메시지 저장]
        }

        // -----------------------------------------

 

반응형
Comments