通知センター/コントロールセンター表示時のapplication:didReceiveLocalNotification
LocalNotificationによるプッシュ通知から、アプリの特定画面にダイレクトに
遷移する機能を持つiOSアプリを開発しています。通知センターの通知をタップ
した際の画面遷移はフォアグラウンド時/バックグラウンド時共に実現できているの
ですが、コントロールセンターや通知センターを表示しているときに通知が実施
されると通知センターの通知をタップしたのと同様に遷移が実施されてしまいます。
条件の振り分けとしてapplicationStateのプロパティの値を評価し、アプリを通常
使用している際(UIApplicationStateActive)は遷移が行われないようにしているの
ですが、通知センターやコントロールセンターが表示されている場合は通知をタップ
した場合と同様のUIApplicationStateInactiveで返ってきます。そのため通知を
タップしたのと同じ遷移が発生しているのですが、別の方法でコントロールセンターや
通知センターが表示されているだけの状態と、通知をタップしたときの状態を振り分け
できないでしょうか。
アプリ対応OSをiOS 7以降としているため、iOS 8からのNotification Actionが使えない状況です。
回答頂いた部分を含めて、実現したいことと試したことは以下の通りです。
実現したいこと
・通知受信時にユーザーの操作なしにアプリの画面遷移は行わない
(通知センター/コントロールセンター表示時を含む)
・通知をタップした際はアプリがフォアグラウンド/バックグラウンド時
共にアプリ内特定画面に遷移する
試したこと
・didReceiveLocalNotification内でapplicationStateの値で処理を振り分け
→通知センター/コントロールセンター表示時に操作せず遷移する以外は仕様通りに動作
・ライフサイクルの確認
→通知センター/コントロールセンター表示時の通知受信と、通知センターの
通知タップ時はどちらもapplicationWillResignActive・didReceiveLocalNotification・
applicationDidBecomeActiveの順番でAppDelegate内のメソッドが呼ばれているので
どちらの経路から来ているか判定できない
・applicationStateを各ライフサイクル時にキャッシュしてdidReceiveLocalNotification内で判定
→通知センター/コントロールセンター表示時の通知受信で勝手に遷移はしなくなるものの、
通知をタップした際にも遷移しなくなる
本家SOでも同様の質問がありました。
https://stackoverflow.com/questions/28232997/receiving-remote-notification-right-when-the-app-is-activating
回答がつかないところを見ると実現が難しいのでしょうか。