質問: iPhoneのPush通知で「ロックされていない時の通知のスタイル」を「通知」にすると、通知があった際に「キャンセル」と「開く」の2つの選択肢が表示されます。 この時「開く」をタップするとアプリが起動しますが、ある特定の画面にアプリ起動時の画面を遷移させたいです。対応iOSは8.0〜です。 この場合のアクションのカスタマイズ方法を探してみてもiOS8から導入された複数選択肢があるアクションの解説は見つかりましたが、デフォルトアクションのカスタマイズ方法は見つかりませんでした。 デフォルトアクションのカスタマイズはできないのでしょうか? また、通知をバナー表示にした際に特定の画面に起動時の画面を遷移させる方法も教えていただきたいです。
回答: iOSでのローカルプッシュ受信後の挙動は大きく3パターンに分けることができます。 1. アプリがフォアグラウンド起動時に通知を受け取る 2. アプリがバックグラウンド起動時に通知を受け取り、アプリをフォアグラウンド起動にする 3. アプリが停止している時に通知を受け取り、アプリをフォアグラウンド起動にする `AppDelegate`内の処理でこれら3パターンに対して異なる処理を走らせることができます。 【1と2の処理】 1と2については、`AppDelegate`に下記のメソッドを加えることで処理を分岐します。 ``` func application(application: UIApplication, didReceiveLocalNotification notification: UILocalNotification) { if(application.applicationState == .Active) { // 1の場合の処理をここに書く } else if(application.applicationState == .Inactive) { // 2の場合の処理をここに書く } else { // その他の場合の処理(今回は該当なし) } } ``` 【3の処理】 3の場合のみ`AppDelegate`の`didFinishLaunchingWithOptions`に処理を書く必要があります。 ``` func application(application: UIApplication!, didFinishLaunchingWithOptions launchOptions: NSDictionary!) -> Bool { if (launchOptions != nil) { var notification:UILocalNotification? = launchOptions.objectForKey(UIApplicationLaunchOptionsLocalNotificationKey) as? UILocalNotification if(notification != nil) { // 3の場合の処理をここに書く } } } ``` 1〜3の各処理の実行時にnotificationオブジェクトを持てるので、 ローカルプッシュ実行時にカスタムデータを含むようにしていれば、 `notification.userInfo`を見ることで、必要に応じた処理ができるようになります。 また、画面遷移の方法についてですが、 `NSNotificationCenter`を利用してはいかがでしょうか? 例えば、rootViewControllerにあたるViewControllerのメソッドを`NSNotificationCenter` で呼び出して、その中で`performSegueWithIdentifier`を実行して画面遷移させる といったことが思いつきます。 (他にもっと良い方法があるかもしれませんが...。) 質問への認識違いなどありましたらご指摘ください。 少しでも参考になれば幸いです。