質問: ### 前提・実現したいこと macOS Sierra (10.12) Xcode8 Swift3で、 iPhone (iOS8〜10)向けのアプリを作っています。 NiftyCloudMobileBackend(NCMB)を使用しています。 デバイストークンを発行し、PUSH通知が届くまでは実装できました。 実現したいことは、 ユーザがPush通知をタップしたときに、Push通知(Remote Notification)に含まれているJSONデータをアプリ側で取得し、含まれている動画URLをアプリ内WKwebviewで開くことです。 Push通知にJSONデータで動画IDを含めることはできていますので、 そのデータをどこで受け取れば良いのかがわかりません。 JSONの受取までの処理の実装方法を探しています。 ### 試したこと iOS10ではUNUserNotificationCenterDelegate を使い、iOS8,9ではapplication:didReceiveRemoteNotification を使う? つまりバージョンによって場合分けが必要? ### 補足情報(言語/FW/ツール等のバージョンなど) 開発環境:macOS Sierra (10.12) Xcode8 Swift3 対象:iPhone (iOS8〜10) Pushサーバ:NiftyCloudMobileBackend(NCMB) ### 不備がありましたら teratail自体にもなれていないため、 もしよろしければ、アドバイスをいただければと思います。 また、swiftについても、調べ方など教えていただければ幸いです。 お手数ではありますが、ご回答宜しくお願い申し上げます。
回答: application:didReceiveRemoteNotificationは非推奨となってしまいましたが、iOS10でちゃんと通知を受けることができます。 従来の方式の場合、3つのシチュエーションに応じて*あらかじめ決められたプロトタイプのメソッドを実装*しておきます。userInfo(動画ID)を取得できるメソッドは以下の通りです。 ・アプリがフォアグランドの時に通知受信 ・アプリがバックグランドの時に通知受信 ``` func application(_ application: UIApplication, didReceiveRemoteNotification userInfo: [AnyHashable : Any], fetchCompletionHandler completionHandler: @escaping (UIBackgroundFetchResult) -> Void // application.applicationStateを調べるとフォアグラウンドかバックグランドの判別ができます ``` ・アプリが通知から起動された時(通常時のメソッドです。launchOptionsをチェックします) ``` func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplicationLaunchOptionsKey: Any]?) -> Bool //launchOptions?[UIApplicationLaunchOptionsRemoteNotificationKey]がnilかどうかをチェックします。nilでなければ中身はuserinfoが格納されており、通知から起動されたことになります ```