IOS Push Notification

Choong Won, Seo·2022년 5월 15일
0

mdoc

목록 보기
2/8
post-thumbnail

Today 5/15

Notification의 종류에는 local과 server를 통한 push가 있다. 오늘은 이 중 push를 학습한다.

Push Notification

APNs - Apple Push Notification Service

Provider(FCM) - APNs - Device 의 상태로 서로 연결되어 있고, APNs가 중간에서 토큰을 사용하여 서로를 중재하고 있다고 생각하면 된다.

APNs에서 인증서 설정을 하는 방법에는 크게 두 가지가 있다.

  • Token-based provider connection trust
  • Certificate-based provider connection trust

그 중 두 번째 방법은 하나의 bundle identifier을 대상으로 동작하기 때문에 첫 번째 방법보다 간편하다.

두 번째 방법 또한 p12와 p8로 나뉘는데, 요즘에는 1년마다 인증서를 갱신하지 않아도 되고, 프로젝트마다 다른 인증서를 발급받지 않아도 되는 p8 방식을 더 많이 사용한다고 한다.

P12방식 설명

[iOS] FCM(Firebase Cloud Messaging) + APNs - 푸쉬 알림 등록 (2)

p8

iOS Push Notification 설정하기

  1. Apple Developer 사이트 - Identifiers에서 Push Notifications를 체크해주고 Bundle Identifier을 생성한다. (키체인 접근에서 키체인을 생성하고 사용)

Apple Developer

  1. Certificates에 생성된 Identifier를 추가한다. (SandBox & Production) (아까 만들어둔 키체인 사용), 더블클릭 해서 Mac의 키체인에 추가한다.
  2. Keys에 또한 키를 추가해주면 다운받을 수 있는 p8파일이 생성된다.
  3. Firebase에서 APN 인증키에다가 아까 다운받은 p파일을 추가한다. 키ID는 키 다운 페이지에 적혀있고,팀ID는 Identifiers에서 볼 수 있다.
  4. Xcode 프로젝트 Signing & Capabilities에서 Push Notification ,Background Modes (Remote notification)를 등록한다.
  5. FCM 설정과 APN으로부터 알람을 받기 위한 설정을 해준다.
func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplication.LaunchOptionsKey: Any]?) -> Bool {
    // Override point for customization after application launch.
    FirebaseApp.configure()
    Messaging.messaging().delegate = self

    UNUserNotificationCenter.current().delegate = self

    let authOptions: UNAuthorizationOptions = [.alert, .badge, .sound]
    UNUserNotificationCenter.current().requestAuthorization(options: authOptions) { granted, error in
        if granted {
            print("알림 등록이 완료되었습니다.")
        }
    }
    application.registerForRemoteNotifications()
    return true
}
extension AppDelegate: UNUserNotificationCenterDelegate {
    func application(_ application: UIApplication, didRegisterForRemoteNotificationsWithDeviceToken deviceToken: Data) {
        Messaging.messaging().apnsToken = deviceToken
    }
}

extension AppDelegate: MessagingDelegate {
    func messaging(_ messaging: Messaging, didReceiveRegistrationToken fcmToken: String?) {
        // 이 받은 값을 서버로 보내주어야함.
        print("FCM Token: \(fcmToken)")
    }
}
  1. Firebase - Send your first message에서 메시지를 배포할 수 있다. (시뮬레이터가 아닌 Physical Device에서만 가능하다.)
profile
UXUI Design Based IOS Developer

0개의 댓글