通知をプッシュするのが非常に新しいので、アプリが終了したときにリモートプッシュ通知を処理する最良の方法を説明するいくつかのチュートリアルを見てきました。アプリ。プッシュ通知がタップされたときdidFinishLaunchingWithOptionsを呼び出していますが、なんらかの理由で関数がスキップされ、コードを実行して適切なView Controllerを開くことができません。アプリが終了したときにプッシュ通知に応答する
ここAppDelegate
func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplicationLaunchOptionsKey : Any]? = nil) -> Bool {
// Override point for customization after application launch.
//UserNotification
let center = UNUserNotificationCenter.current()
center.requestAuthorization(options: [.alert, .sound, .badge]) { (granted, error) in
// Enable or disable features based on authorization.
if granted {
UIApplication.shared.registerForRemoteNotifications()
if GlobalService.sharedInstance().g_userDeviceToken == nil {
// GlobalService.sharedInstance().g_userDeviceToken = ""
}
} else {
print("Don't Allow")
}
if let notification = launchOptions?[UIApplicationLaunchOptionsKey.remoteNotification] as? [String: AnyObject] {
self.getUserChatRooms()
let aps = notification["aps"] as! [String: AnyObject]
let mainNC = self.window?.rootViewController as! UINavigationController
let storyboard = UIStoryboard.init(name: "Main", bundle: nil)
let mainVC = storyboard.instantiateViewController(withIdentifier: String(describing: MainViewController.self)) as! MainViewController
GlobalService.sharedInstance().g_homeVC = mainVC
mainVC.didReceiveChat(aps)
mainNC.pushViewController(mainVC, animated: false)
}
...
//SVProgressHUD
SVProgressHUD.setDefaultStyle(.dark)
//Check UserObj
GlobalService.sharedInstance().g_appDelegate = self
if let userObj = GlobalService.sharedInstance().loadUserObj() {
GlobalService.sharedInstance().g_userMe = userObj
startApplication(animated: false)
...
return true
}
のコードが、これはMainVCに呼び出される関数です。
func didReceiveChat (_ notificationDictionary: [String: AnyObject]){
let allChats = GlobalService.sharedInstance().g_aryChatRooms
if let noti_id = notificationDictionary["noti_id"] as? String{
let pushID = Int(noti_id)
if pushID != nil {
for chat in allChats {
if chat.chat_room_id! == pushID! {
chtRoom = chat
NotificationCenter.default.post(name: Notification.Name(rawValue: Constants.Notifications.GET_MSG), object: self)
break
}
}
}
}
}
、その後、私のviewDidLoadメソッドで、私はオブザーバを追加します。
NotificationCenter.default.addObserver(self,selector: #selector(MainViewController.addChatScn(_:_:)), name: NSNotification.Name(rawValue: Constants.Notifications.GET_MSG), object: nil)
最後にaddChatScnメソッドを呼び出します。
@objc func addChatScn(_ chatObj: ChatRoomObj, _ msgName: String) {
let popvc = UIStoryboard(name: "Main", bundle: nil).instantiateViewController(withIdentifier: "ChatContainerViewController") as! ChatContainerViewController
iconContainer.isHidden = true
add_Msg_Btn.isHidden = true
popvc.vcA = self
popvc.m_selectedChatRoom = chatObj
popvc.msgName = msgName
self.addChildViewController(popvc)
popvc.view.center = self.view.center
popvc.view.bounds.size = CGSize(width: 337, height: 503)
self.view.addSubview(popvc.view)
popvc.didMove(toParentViewController: self)
}
これは、アプリがバックグラウンドにあるときには便利だと思うが、私の特定のユースケースは、アプリが完全に終了したときである – NightHawk95