APNs
Youngminah opened this issue · 0 comments
Youngminah commented
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오류는 클라이언트문제인지 서버문제인지 찾기 어려운편
뱃지
- 뱃지는 기본적으로 푸시 클릭을 해도 사라지지 않음. 뱃지 카운트 관리를 스스로 해야한다.
- 서버에서 연산해주어야하고 클라이언트에서 카운트 정보를 주어야한다.
- 다국어 알림 설정
- 서버에서 할수도 있고, 클라이언트에서 할 수도 있다.