firebase

flutter FCM 메시지 ios 수신시 알림음 및 진동 울리지 않는 현상

이나주니 2023. 6. 14. 17:21
반응형

fcm을 평소 사용하면서 개발을 해왔다

하지만 언제부터인가 아이폰에서만 PUSH 가 와도 진동이나 알림음이 들리지 않는것같아

골머리를 앓았다. 포그라운드에서는 정상적이지만 백그라운드에서 되질 않아 이곳 저곳 다 수정해보고 apn도 새로 받아 수정도 해보았지만 똑같았다,

알고보니 메시지를 fcm 서버로 보낼때 json 값으로 값으 보내줘야 했던것

android는 디폴트가 알림음을 울려주는것이라면  IOS에서는 그렇지 않았다

 

해결방법

{
    "message": {
        "token": "토큰",
        "notification": {
            "title": "Test",
            "body": "Test message"
        },
        "android": {
            "notification": {
                "sound": "default"
            }
        },
        "apns": {
            "payload": {
                "aps": {
                    "sound": "true"
                }
            }
        }
    }
}

위와 같이 JSON 형태로 서버로 값을 보내줘야 정상적으로 알림음이 들어오는것을 알수 있다

 

body에 이런식으로 보냄

 

코드 만드는 샘플

public test() {
    String title = "받장 휴대폰인증 테스트 메시지";
    String body = "인증번호는" + "[" + numStr + "]" + "입니다.";

    GoogleCredentials googleCredentials = GoogleCredentials
    String message = makeMessage(targetToken, title, body);

    OkHttpClient client = new OkHttpClient();
    RequestBody requestBody = RequestBody.create(message,
            MediaType.get("application/json; charset=utf-8"));
    Request request = new Request.Builder()
            .url(API_URL)
            .post(requestBody)
            .addHeader(HttpHeaders.AUTHORIZATION, "Bearer " + getAccessToken()) //header에 accesstoken을 추가
            .addHeader(HttpHeaders.CONTENT_TYPE, "application/json; UTF-8")
            .build();

    Response response = client.newCall(request).execute();

	System.out.println(response.body().string());
}
private String makeMessage(String targetToken, String title, String body) throws JsonParseException, JsonProcessingException {
        FcmMessage fcmMessage = FcmMessage.builder()
                .message(FcmMessage.Message.builder()
                        .token(targetToken)
                        .notification(FcmMessage.Notification.builder()
                                .title(title)
                                .body(body)
                                .image(null)
                                .build()
                        ).build()).validateOnly(false).build();

        return objectMapper.writeValueAsString(fcmMessage); //FcmMessage 생성후 objectmapper를 통해 string으로 변환하여 반환
    }

https://velog.io/@awaaaake/UMC-3rd-Springboot-rest-API-%EC%84%9C%EB%B2%84-%EA%B5%AC%ED%98%84-FCM-%EB%AC%B8%EC%9E%90-%EC%9D%B8%EC%A6%9D-3

 

[UMC-3rd & Springboot] rest API 서버 구현 - FCM 문자 인증 #3

👌FCM > Firebase Cloud Messaging 메시지를 안정적으로 무료 전송할 수 있는 크로스 플랫폼 메시징 솔루션이다. FCM 구현에는 두가지 구성요소가 필요힌데, 첫번째는 Firebase용 Cloud Functions 또는 앱 서버

velog.io

이분 꺼 참고 함

 

 

기타 참고용은 아래 링크에서 확인하면 좋을것같다

https://firebase.google.com/docs/cloud-messaging/http-server-ref?hl=ko 

 

Firebase 클라우드 메시징 HTTP 프로토콜

 

firebase.google.com

 

반응형