본문 바로가기

일::개발

Flutter: 푸시 알림 iOS 설정 - .p8 인증키

Firebase를 이용해서 Push Notification을 구현할 때 iOS는 안드로이드에 비해 뭔가 신경써줘야할 것이 많기도 하고, 문제가 생겼을 때 원인을 찾기도 좀 어렵다.

최근 애플이 인증 방법으로 인증서(.p12)를 이용한 방법에 인증키(.p8)를 이용해서 서버사이드 토큰을 이용하는 방식을 추가하면서 그나마 일이 좀 간단해졌다.

 

인증서를 이용할 때에는 Apple Developer 의 Identifiers 에서 해당 번들 ID의 configuration에서 인증서를 만들고 APN 인증서를 Firebase 콘솔에 등록해줘야 했다.

앱마다 Push notification용 SSL 인증서 생성

 

새로운 방식으로 인증키를 이용하면 앱마다 별도의 APN 인증서를 만들 필요가 없고 하나의 인증키(.p8)로 푸시 알림을 발송할 수 있다.

Apple Developer 사이트에서 Keys 탭을 선택한 후에 키를 만들고 해당 키로 사용할 서비스를 선택할 수 있다. 푸시 알림 외에 DeviceCheck, MapKit JS, Media Services, Apple 로그인, ClassKit Catalog 모두 하나의 키를 이용해서 인증할 수 있다는 뜻이다.

 

단, 매번 만들 필요가 없으니 여러 개의 키를 만들 수도 없다. 생성 후에 다운로드한 키 파일을 분실하면 다시 발급받을 수 없으니 잘 보관할 필요가 있다.

 

여기서 만든 인증키(.p8)를 Firebase Console에 업로드하기만 하면 더 이상의 설정 없이 푸시 발송/ 수신이 가능해진다.

 

푸시가 동작하는 설정 예는 다음과 같다.

1) Identifier 의 Push Notification에는 별도의 인증서 등록하지 않음.

샘플 앱(com.example.notificationSample.uaremine)의 Identifiers 중 Push Notifications enable

2) 생성한 인증키에는 Apple Push Notifications Service(APNs)가 enbale되어 있음

Keys에 새로 생성한 Key에는 특정 앱의 번들ID와 연관 없이 APNs가 enable되어 있다.

3) Firebase Console에는 생성한 인증키를 업로드했다. APN 인증서는 사용하지 않으므로 등록하지 않았다.

팀 ID를 잘 확인한다.

여기서 키 ID는 애플 개발자 사이트에서 Key 생성/ 다운로드할 때 확인할 수 있고, 팀 ID는 프로젝트의 일반 설정에서 입력한 값이 기본으로 들어간다. 여기서 팀 ID가 잘못 들어가면 발송한 메시지가 수신되지 않으니 주의한다.

애플 개발자 사이트에 로그인한 후에 아이디 하단에 나오는 팀 아이디를 등록해야 한다.(기려져 있는 부분)

 

(이것은 Firebase Console에 팀 ID가 개발자 인증서 ID로 잘못 등록되어 있어서 도대체 푸시가 왜 안오는지 이틀동안 닭질하고 나서 쓰는 글. ㅎㅎㅎ)