전에 Wandoo! 프로젝트 진행할 때 local notification을 개발해야되는데 remote notification과 local notification을 구분하지 못하고 remote notification을 공부해서 프로젝트에 연결시킬뻔 한적이 있다...ㅋㅋㅋㅋ 그때 공부했던 부분을 돌이켜보며 오늘 수업 복습을...🙃
: 각 디바이스로 보내려고 하는 메세지를 받고 신뢰도를 검사해서 각 디바이스로 푸시알림을 보내줌 -> 모든 푸시 알림을 보내기 위한 중재센터
Provider가 APNs에 메세지를 보냄 → APNs에서 인증서를 확인해서 신뢰하는 Provider인지 확인 → 각 디바이스로 알림 보내줌
→ APNs는 Provider와 Device사이에 각각의 인증서가 필요함
if #available(iOS 10.0, *) {
// For iOS 10 display notification (sent via APNS)
UNUserNotificationCenter.current().delegate = self
let authOptions: UNAuthorizationOptions = [.alert, .badge, .sound]
UNUserNotificationCenter.current().requestAuthorization(
options: authOptions,
completionHandler: { _, _ in }
)
} else {
let settings: UIUserNotificationSettings =
UIUserNotificationSettings(types: [.alert, .badge, .sound], categories: nil)
application.registerUserNotificationSettings(settings)
}
application.registerForRemoteNotifications()
Messaging.messaging().delegate = self
// 현재 사용중인 토큰 가져오기
Messaging.messaging().token { token, error in
if let error = error {
print("Error fetching FCM registration token: \(error)")
} else if let token = token {
print("FCM registration token: \(token)")
// 화면에 보여줄 필요가 없기 때문에 삭제하면 됨
// self.fcmRegTokenMessage.text = "Remote FCM registration token: \(token)"
}
}
func messaging(_ messaging: Messaging, didReceiveRegistrationToken fcmToken: String?) {
print("Firebase registration token: \(String(describing: fcmToken))")
let dataDict: [String: String] = ["token": fcmToken ?? ""]
NotificationCenter.default.post(
name: Notification.Name("FCMToken"),
object: nil,
userInfo: dataDict
)
// TODO: If necessary send token to application server.
// Note: This callback is fired at each app startup and whenever a new token is generated.
}
func application(application: UIApplication,
didRegisterForRemoteNotificationsWithDeviceToken deviceToken: Data) {
Messaging.messaging().apnsToken = deviceToken
}
func userNotificationCenter(_ center: UNUserNotificationCenter, willPresent notification: UNNotification, withCompletionHandler completionHandler: @escaping (UNNotificationPresentationOptions) -> Void) {
completionHandler([.alert, .badge, .sound])
}