Sign In
한결
Status
Empty
Assignee
Empty
[출시 후 Push Notification 적용]
Push Notification
앱이 InActive 상태가 아니더라도 확인할 수 있는 알림의 일종
개발자가 보내는 타이밍, 메시지 등을 미리 지정해서 코드로 빌드해둔 로컬 알림과 다르게
서버를 통해서 매번 다른 시간, 다른 내용으로 알림을 보내도록 APNs에 요청을 보낸다.
로컬/푸시 알림 모두 사용자의 권한 확보가 가장 중요하다.
Firebase Cloud Messaging 서비스로 Push 보내기
1.
결국에는 APNs를 거쳐야 하기 때문에, XCode 프로젝트에서 Push Notification을 지정해줘야 한다. (유료 계정!)
+ background 상태에서도 앱이 노티를 받아야 하기 때문에 background 설정까지 넣어준다.
2.
Push 사용을 위한 인증키를 발급 받는다.
developer.apple.com > 식별자 > key 발급 (.p8 형식의 보안 파일)
.p8 파일의 경우 만료 기한이 정해져 있지 않고, .p12 형태의 인증서 파일 인증서의 유효기간이 정해져 있다.
.p12 인증서는 개발용/배포용 구분이 되어 있고, 개별 앱마다 인증서 발급이 필요하다.
.p8의 경우는 하나의 인증키로 여러 앱에 적용이 가능하다.
3.
XCode 프로젝트 패키지에 firebase-messaging을 추가해준다.
4.
Firebase 콘솔에서 푸시를 보낼 앱 공간을 만들어서 서버를 구축한다. (google-info.plist 삽입까지 완료하자)
firebase 프로젝트 설정 상에 다운로드 받은 .p8 인증키를 등록한다.
iOS 클라이언트에 대한 Firebase의 공식 문서대로 초기 코드를 세팅한다.
5.
AppDelegate 단에서 디바이스-콘솔에 따른 토큰 갱신 로직을 잘 구성한다.
6.
Firebase 콘솔에서 Cloud Messaging 메뉴로 들어와 알림 메시지 캠페인 설정으로 초기 테스트를 진행해본다.
AppDelegate에서 조회한 토큰 데이터를 가지고 있어야 한다.
Push Notification을 위한 토큰 인증 방식
1.
앱이 설치된 개별 디바이스별로 고유한 token 값을 가진다. 이를 APNs에 인증을 확인한다.
2.
APNs에서는 토큰에 대한 유효성을 검증해주고 (response로 전달)
func application(application: UIApplication, didRegisterForRemoteNotificationsWithDeviceToken deviceToken: Data) { // APNs에서 발급해주는 기기별 토큰 값 Messaging.messaging().apnsToken = deviceToken }
3.
응답 받은 유효성 검증 내역을 앱에 등록해둔 Firebase SDK 코드로 Firebase 서버에 토큰 값을 가지게 된다. (서버 유저값과 토큰 맵핑)
// fcm 자체적으로 맵핑한 토큰 값을 기기에 다시 전달 // 이 fcm 토큰값을 프로젝트 내에서 활용해서 코드 작성 필요 didReceiveRegistrationToken fcmToken: String?
4.
이후 콘솔에서 등록된 푸시 알림 캠페인에 맞게 고유한 토큰 값으로 푸시를 보내는 요청을 APNs에 하게 되고 (Firebase → APNs)
5.
APNs에서는 토큰 값 비교를 통해 유효한 토큰의 디바이스에 푸시를 보내게 된다.
iOS의 푸시 알림
알림이 잘 전달되었고, 수신했는지는 확인이 불가하다.
사용자가 푸시를 터치했다면 확인이 가능 (코드로 연결할 수 있음)
알림 터치에 따른 화면 전환 분기 처리를 잘 해주어야 한다.
window의 rootView가 어떻게 되는지를 잘 확인해야겠지?
푸시 알림은 Foreground에서 수신이 default가 아니다.
background 수신이 default
foreground라면 따로 설정을 코드로 해주어야 하고, 로컬 알림을 쓰는게 맞다.
기기별 토큰이 다르기 때문에 동일 계정이라면 어떻게 멀티 토큰을 관리할 지 잘 고려해야 한다.
앱을 삭제하면 토큰 값이 변경됨
로그아웃은 괜찮음
👍