Youngminah/TIL

APNs

Youngminah opened this issue · 0 comments

APNs - Apple Push Notification

  • 네이버, 카카오처럼 큰 규모가 아닐경우 보통 파이어베이스 이용

포그라운드 수신설정

  • 14이후
func userNotificationCenter(_ center: UNUserNotificationCenter, willPresent notification: UNNotification, withCompletionHandler completionHandler: @escaping (UNNotificationPresentationOptions) -> Void) {
     completionHandler([.list, .banner, .badge, .sound])
}
  • 14이전
func userNotificationCenter(_ center: UNUserNotificationCenter, willPresent notification: UNNotification, withCompletionHandler completionHandler: @escaping (UNNotificationPresentationOptions) -> Void) {
     completionHandler([.alert, .badge, .sound])
}

푸시 알람 데이터값 확인 및 클릭 했을때 처리

func userNotificationCenter(_ center: UNUserNotificationCenter, didReceive response: UNNotificationResponse, withCompletionHandler completionHandler: @escaping () -> Void) {
   print("사용자가 푸시를 클릭했습니다.")
   print(response.notification.request.content.userInfo)
   print(response.notification.request.content.body)
   let userInfo = response.notification.request.content.userInfo
   if userInfo[AnyHashable("key")] as? Int == 1 {
       print("광고 푸시입니다")
   } else {
       print("다른 푸시입니다")
   }
}
  • 위 메소드를 구현하지 않으면 클릭했을때 화면을 켜주기만 한다.

화면 진입시 배지 삭제

    func sceneWillEnterForeground(_ scene: UIScene) {
        // Called as the scene transitions from the background to the foreground.
        // Use this method to undo the changes made on entering the background.
        UNUserNotificationCenter.current().removeAllPendingNotificationRequests()
        UNUserNotificationCenter.current().removeAllDeliveredNotifications()
        UIApplication.shared.applicationIconBadgeNumber = 0
    }

디바이스 토큰 갱신

    import Firebase
    override func viewWillAppear(_ animated: Bool) {
        super.viewWillAppear(animated)
        Installations.installations().delete { error in
            if let error = error {
                print("Error: \(error)")
                return
            } else {
                print("Installation deleted!")
            }
            
        }
    }
  • 디바이스 토큰을 지울수 있다.

예상이슈

  • 안드로이드는 잘오는데 iOS는 잘 안오는 경우
    • 데이터 메시지 : iOS 수신 보장이 안됨. iOS 백그라운드, 베터리, 앱 실행, 저전력 모드인지상태에 따라 다름
    • 알림 메시지: iOS 수신 보장됨.
  • APNs오류는 클라이언트문제인지 서버문제인지 찾기 어려운편
  • 뱃지
    • 뱃지는 기본적으로 푸시 클릭을 해도 사라지지 않음. 뱃지 카운트 관리를 스스로 해야한다.
    • 서버에서 연산해주어야하고 클라이언트에서 카운트 정보를 주어야한다.
  • 다국어 알림 설정
    • 서버에서 할수도 있고, 클라이언트에서 할 수도 있다.