

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>  
回答がつかないところを見ると実現が難しいのでしょうか。


CC BY-SA 3.0
2015-04-08T01:49:48.907
8890
2015-04-15T08:19:40.343
2017-05-23T12:38:55.250
-1
9212
question
ios objective-c xcode push-notification
通知センター/コントロールセンター表示時のapplication:didReceiveLocalNotification