Firebase를 이용해서 Push Notification을 구현할 때 iOS는 안드로이드에 비해 뭔가 신경써줘야할 것이 많기도 하고, 문제가 생겼을 때 원인을 찾기도 좀 어렵다.
최근 애플이 인증 방법으로 인증서(.p12)를 이용한 방법에 인증키(.p8)를 이용해서 서버사이드 토큰을 이용하는 방식을 추가하면서 그나마 일이 좀 간단해졌다.
인증서를 이용할 때에는 Apple Developer 의 Identifiers 에서 해당 번들 ID의 configuration에서 인증서를 만들고 APN 인증서를 Firebase 콘솔에 등록해줘야 했다.
새로운 방식으로 인증키를 이용하면 앱마다 별도의 APN 인증서를 만들 필요가 없고 하나의 인증키(.p8)로 푸시 알림을 발송할 수 있다.
Apple Developer 사이트에서 Keys 탭을 선택한 후에 키를 만들고 해당 키로 사용할 서비스를 선택할 수 있다. 푸시 알림 외에 DeviceCheck, MapKit JS, Media Services, Apple 로그인, ClassKit Catalog 모두 하나의 키를 이용해서 인증할 수 있다는 뜻이다.
단, 매번 만들 필요가 없으니 여러 개의 키를 만들 수도 없다. 생성 후에 다운로드한 키 파일을 분실하면 다시 발급받을 수 없으니 잘 보관할 필요가 있다.
여기서 만든 인증키(.p8)를 Firebase Console에 업로드하기만 하면 더 이상의 설정 없이 푸시 발송/ 수신이 가능해진다.
푸시가 동작하는 설정 예는 다음과 같다.
1) Identifier 의 Push Notification에는 별도의 인증서 등록하지 않음.
2) 생성한 인증키에는 Apple Push Notifications Service(APNs)가 enbale되어 있음
3) Firebase Console에는 생성한 인증키를 업로드했다. APN 인증서는 사용하지 않으므로 등록하지 않았다.
여기서 키 ID는 애플 개발자 사이트에서 Key 생성/ 다운로드할 때 확인할 수 있고, 팀 ID는 프로젝트의 일반 설정에서 입력한 값이 기본으로 들어간다. 여기서 팀 ID가 잘못 들어가면 발송한 메시지가 수신되지 않으니 주의한다.
(이것은 Firebase Console에 팀 ID가 개발자 인증서 ID로 잘못 등록되어 있어서 도대체 푸시가 왜 안오는지 이틀동안 닭질하고 나서 쓰는 글. ㅎㅎㅎ)