Java에 이어서 Node.js를 통해 푸시 테스트를 해보았습니다. Java보다는 간단했습니다. p12 인증서 방식의 암호화된 pem파일을 사용했습니다. 오늘 배웠던 모듈과 소스에 대해서 정리해보겠습니다.
1. Node.js에서 apn 모듈 이용하기
node.js에서 모듈을 사용하지 않으면 제 기능을 못쓰고 있는 것입니다. 'apn' 모듈을 통해서 ios 기기에 푸시메시지를 보내보겠습니다. apn 모듈은 이번 주에만 63855명이 다운받아 푸시메시지를 주고받는데 사용하고 있습니다.
설치하는 법은 단순하게
npm install apn --save 입니다.
준비물은 앞 포스팅에서 많이 말했던 pem 파일입니다. 인증서를 받는 방법과 pem 파일을 받는 방법, 인증서에 대한 개념은 앞선 포스팅에 많이 설명했으니 거쳐오셔요. 이번 포스팅은 다른 프로그램을 이용하지 않고 Node.js를 통해서 Push를 테스트해보는 것입니다.
2023.01.28 - [취미로 코딩하기] - IOS 개발 APNs 아이폰 테스트
2023.01.25 - [취미로 코딩하기] - iOS Push Notification 개발 및 테스트, 사용법
apn 모듈을 통해 우리는 ios 앱에 푸시를 기본적으로 보낼 수 있고 badge, alert, expiry, sound 등의 상세한 설정을 할 수 있습니다.
{"messageFrom":"John Appelseed","aps":{"badge":3,"sound":"ping.aiff","alert":"\uD83D\uDCE7 \u2709 You have a new message"}}
메시지는 JWT (Json WebToken)으로 이루어져있는데 위는 Push Message를 보내기 위한 Json의 예시입니다.
apn 에서 좋았다고 생각하는 것은 Trouble Shooting( 에러가 무엇인지 알고 처리하는 것)을 편하게 할 수 있다는 것입니다.
https://developer.apple.com/library/archive/technotes/tn2265/_index.html
처음 인증서를 생성하는 방법부터 처리과정까지 제대로 나와있습니다.
제가 이번에 겪었던 착오는 인증서는 Development용, production용이 있는데 Xcode를 통해 바로 실기기에 넣었는데 멍청하게 production용으로 푸시테스트를 했습니다. 그래서 BadDeviceToken이라는 에러를 보고 Development로 수정하니 가능해졌습니다.
Development용 인증서 - Xcode에서 디버깅한 모든 앱에 적용
Production용 인증서 - AppStore에서 다운받은 모든 앱에 적용
2. Node.js를 통해서 Push서버 개발
npm install apn 을 통해서 모듈을 설치하셨다면 이제 코드를 적어보겠습니다.
var apn = require('apn')
var pro_option = {
cert: 'aps_production.pem 의 경로를 적어준다.',
key:'mykey.pem의 경로를 적어준다.',
production: false,
passphrase:"pem에 사용했던 암호를 적어준다."
}
const service = new apn.Provider(pro_option)
const note = new apn.Notification()
note.topic = "Xcode나 개발자계정에서 보고 bundle identifier를 적어준다. ex)com.korea.moka"
note.alert = "Hello! Its test"
service.send(note, '푸시를 받고 싶은 기기의 디바이스토큰을 적어준다.').then( result => {
console.log("sent : ", result.sent.length)
console.log("failed : ", result.failed.length)
console.log(result.failed)
})
pro_option에서 인증서에 대한 정보, 키에 대한 정보를 적어주고 암호까지 적어서 Json형식으로 만들어줍니다.
이것을 Provider객체 인자로 받아서 service를 만들어줍니다.
note 변수의 경우에는 푸시를 어떤 방식으로 보낼 것인지 방식을 설정합니다.
마지막으로 send 메소드를 통해서 비동기로 처리하고 처리한 결과를 result 값으로 받아서 확인합니다.
result로 결과를 받아서 확인하는 것은 매우 중요합니다. APNs의 경우 어디서 디버깅을 해야할지 참 애매합니다. 제대로 된 바이블이 없어서이기도 합니다.
실패한다면 result.failed 값에서 구글링해보시길 바랍니다. 저는 BadDeviceToken 에러가 나와서 구글링을 통해서 바로 고쳤습니다.
이 코드를 터미널에서 node 명령어를 통해 실행시켜줍니다.
[함께 읽으면 좋은 글]
2023.01.25 - [취미로 코딩하기] - iOS Push Notification 개발 및 테스트, 사용법
2023.01.25 - [취미로 코딩하기] - Docker, 도커를 사용하는 이유와 도커 설치법
2023.01.26 - [취미로 코딩하기] - 자바스크립트 ES6 , CommonJS 문법, 모듈시스템 차이
'프로그래밍_' 카테고리의 다른 글
Nodejs typscript 사용해야 할까?,사용법 (0) | 2023.02.06 |
---|---|
iOS 개발 NotificationCenter 사용법, 데이터전달 (2) | 2023.02.03 |
IOS 개발 APNs 아이폰 테스트 (0) | 2023.01.28 |
자바스크립트 ES6 , CommonJS 문법, 모듈시스템 차이 (0) | 2023.01.26 |
iOS Push Notification 개발 및 테스트, 사용법 (0) | 2023.01.25 |
댓글