下午看了一點黑白大廚,非常不錯的料理競賽節目。真的超好奇 Netflix 到底怎麼挖來一堆米其林主廚,錄影那天是不是很多首爾餐廳都一起公休啊。
看了好想去米其林餐廳看看世界。
iOS 當中有 Push Notification,會透過 Apple APNs (Apple Push Notification Service)把訊息推到用戶的手機。整個流程大約分成四個步驟:註冊 APNs --> server 把訊息和 token 送給 apple --> APNs 發送通知 --> app 處理通知。
註冊步驟大約如下 (created by ChatGPT):
// 註冊 & 申請權限
UNUserNotificationCenter.current().requestAuthorization(options: [.alert, .sound, .badge]) { granted, error in
if granted {
DispatchQueue.main.async {
UIApplication.shared.registerForRemoteNotifications()
}
}
}
上面的 options 是閉包的參數,而 granted, error 則是會 return 的內容,括號內則根據 return 結果繼續動作,其實應該也可以用 async/await 來處理異步函數。
// 傳 Token
func application(_ application: UIApplication, didRegisterForRemoteNotificationsWithDeviceToken deviceToken: Data) {
// 將 token 傳至伺服器
}
而當 server 在特定情況下需要推送訊息給特定 user,例如下面是蘋果官網的範例:
HEADERS
:method = POST
:scheme = https
:path = /3/device/00fc13adff785122b4ad28809a3420982341241421348097878e577c991de8f0
host = api.sandbox.push.apple.com
apns-id = eabeae54-14a8-11e5-b60b-1697f925ec7b
apns-push-type = alert
apns-expiration = 0
apns-priority = 10
DATA
{ "aps" : { "alert" : "Hello" } }
對於應用來說,如果想處理通知內容,則需要使用到 userNotificationCenter 這個類別這個類別來做進一步的設定。