Back/apps/push.js
seonkyu.kim 880062e136
All checks were successful
JJ_Back/pipeline/head This commit looks good
[] APNs 적용
2024-08-20 14:29:30 +09:00

51 lines
1.8 KiB
JavaScript

import apn from 'apn';
import { bundleID, apnKey, apnKeyID, apnTeamID } from '../private/config.js';
// APNs 옵션 설정
const options = {
token: {
key: `../private/${apnKey}`, // 다운로드한 .p8 파일 경로
keyId: apnKeyID, // Apple Developer Console에서 얻은 키 ID
teamId: apnTeamID, // Apple Developer Console에서 얻은 팀 ID
},
production: false, // 프로덕션(실제 배포 환경)인 경우 true로 설정
};
const apnProvider = new apn.Provider(options);
export function HandlePush(req, res) {
const { deviceToken, title, body, parameter, sound, badge } = req.body;
if (!deviceToken || !title || !body) {
res.status(400).json({ error: 'deviceToken, title, and body are required' });
return;
}
// APNs Notification 설정
const notification = new apn.Notification();
notification.topic = bundleID; // 애플리케이션 번들 ID
notification.expiry = Math.floor(Date.now() / 1000) + 3600; // 1시간 후 만료
notification.badge = badge ? Number(badge) : 0;
notification.sound = sound || "default";
notification.alert = {
title: title,
body: body,
};
notification.payload = { parameter: parameter };
// APNs를 통해 푸시 알림 전송
apnProvider.send(notification, deviceToken).then((response) => {
if (response.sent.length > 0) {
console.log('Successfully sent message:', response.sent);
res.status(200).json({ message: 'Successfully sent message' });
} else {
console.error('Failed to send message:', response.failed);
res.status(500).json({ error: 'Failed to send message', details: response.failed });
}
}).catch((error) => {
console.error('Error sending message:', error);
res.status(500).json({ error: `Error sending message: ${error.message}` });
}).finally(() => {
apnProvider.shutdown(); // APNs 연결 종료
});
}