Photo by Jamie Street on Unsplash
這幾天收到了關於 APNs Log Event 的傳送問題,因為這個問題才發現到 APNs 與 DeepLink 在開啟APP的 function 觸發的順序不太一樣
簡單的說一下 APNs 與 DeepLink
APNs
全名是 APPLE Push Notification service 的縮寫,也就是推播系統,這裡指的推播是指 Remote Notification ,是由遠端系統發送資訊給手機端,用途有很多種,遊戲APP最常拿來做活動通知
想更了解APNs 可以參考APPLE 官方說明 APNs / User notifications
DeepLink
就是可以讓你自定URL Schemes,可以讓你利用這個URL來開啟APP,不過如果APP不存在是不會幫你連到APP Store 下載的
想更了解DeepLink請參考官方說明 Custom url scheme
Universal Link
另一個比較常聽到的就是Universal Link ,它並不是DeepLink,但是有相似的功能,最明顯的差異在於Universal Link 是和一般網頁一樣 https:// 開頭,而DeepLink 就是自定的如:ABC://
可參考官方說明 Universal link
回到正題
一般Launch App 的流程
didFinishLaunch ➡️ applicationDidBecomeActive
DeepLink 開啟 App 的流程
didFinishLaunch ➡️ application open url ➡️ applicationDidBecomeActive

Push Notification 開啟 App 的流程
didFinishLaunch➡️ userNotificationCenter(_:didReceive:withCompletionHandler:) ➡️ applicationDidBecomeActive➡️ application open url

注意到applicationDidBecomeActive與 application open url 在這二個情況下的執行順序不同嗎?
說真的平常不太會留意到這樣的情況,因為無論誰先誰後都可以順利開啟APP且執行到應該要做的事情
這次沒有log紀錄的需求的話,也許就不會有機會發現這件有趣的事
希望大家 Coding 愉快~