Jiwift

[Node] FCM Topic(주제)을 이용한 Push Notification 메세지 전송 feat. mutable-content 본문

다른 개발/기타

[Node] FCM Topic(주제)을 이용한 Push Notification 메세지 전송 feat. mutable-content

지위프트 2023. 6. 16. 23:00
반응형

[Node] FCM Topic(주제)을 이용한 Push Notification 메세지 전송

 

 

노드는 하나도 모릅니다. Chat GPT를 통해서 테스트한 내용을 나중에 필요한 상황에 사용하려고 작성합니다.

 

 일단 왜 내가 Node를 통해서 테스트를해야하는지 설명하자면.. 지금 하는 프로젝트 서버팀에서 FCM 메세지를 보내주는데, 서버에서 받은 내용을 토대로 파싱해 알림 제목과 내용을 만들어 뿌려야한다. 왜냐하면?? 서버에서 내려주는 알림에는 title과 body가 없기 때문이다. 

 

 여기서 문제는 iOS에서 푸시를 받으면 title과 body를 자동으로 읽어서 사용자에게 보여주는 것으로 알고있다. 그럼 어떻게 중간 단계에서 파싱을하지? 아니.. 앱이 실행중이지 않다면 불가능한게 아닌가?? 라는 생각이 들었다. 반은 맞고 반은 틀렸다. 기본적으로 iOS Push를 구현하면 내가 생각한 문제들이 생긴다. 하지만 Notification Service Extension을 사용하면 사용자에게 보여주기 전에 내용을 편집해서 보여줄 수 있다. 

 

 이 방법을 알게된 iOS 개발자 1500명이 존재하는 톡방에서는 왜 서버에서 title과 body를 내려주지 않냐는 질문에 나는 대답할 수 없었다..

 

Notification Service Extension를 사용하기 위해서는 서버에서 mutable-content를 담아서 보내줘야한다.

 

(Python으로 mutable-content을 추가하려고했는데 Chat GPT도 방법을 모른다하여 Node로 FCM 메세지를 전송해 iOS에서 잘 받아지는지 실험을 진행한다.)

 

 

Node가 전부 설치되었다는 상황에 진행합니다.

원하는 폴더에서 node?를 init해준다.

 

무언가를 계속 물어보는데 모르기 때문에 계속 enter를 눌러서 진행한다.

 

그럼 이렇게 설정이 완료된다.

 

npm install firebase-admin

그럼 이제 해당 명령어를 이용해 라이브러리를 설치한다.

 

설치가 끝나면 코드를 실행할 node 파일과 fcm 비공개키를 준비한다.

 

const admin = require('firebase-admin');
const serviceAccount = require('./fcmtopic-4de00-firebase-adminsdk-bvhdw-15875f.json');

admin.initializeApp({
	credential: admin.credential.cert(serviceAccount),
});

// 메시지 생성
const message = {
	notification: {
		title: 'FCM 메시지 제목',
		body: '알림 테스트 내용입니다.',
	},
	apns: {
		payload: {
			aps: {
				'mutable-content': 1
            }
		},
		fcm_options: {
			image: 'https://foo.bar.pizza-monster.png'
		}
	},
	topic: 'kimjitae', // 메시지를 보낼 대상 토픽 이름
};

// FCM 메시지 보내기
admin.messaging().send(message)
	.then((response) => {
		console.log('메시지가 성공적으로 보내졌습니다:', response);
	})
.catch((error) => {
    console.log('메시지 보내기 실패:', error);
});

serviceAccount에 비공개키 파일 경로를 넣어준다. 

topic에 앱이 구독하고있는 주제를 입력하면된다. 

 

(코드 중간에 mutable을 확인할 수 있다. 이러면 iOS에서 수정된 내용으로 알림을 보여줄 수 있다고한다. )

 

잘 동작하는 모습

(근데 만약에 우리가 알고있는 페이로드 방식과 전혀 다른 양식이 내려온다면 어떡하지?..)

반응형