2013-08-12 11 views
5

appleのdocsによると、アプリケーションの状態変数が非アクティブ(link)であるかどうかをチェックすることで、ユーザの通知のタップを識別できます。通知のユーザのタップを検出する

のiOS注:iOSのでは、アプリケーションがアクションボタンをタップし、ユーザの結果として、または 通知は、アプリケーションの状態を調べる ことにより、既に実行中のアプリケーションに配信されたかどうか を立ち上げているかどうかを判断することができます。 のデリゲートの実装では、アプリケーション:didReceiveRemoteNotification:または アプリケーション:didReceiveLocalNotification:メソッドは、 applicationStateプロパティの値を取得し、評価します。値が UIApplicationStateInactiveの場合、ユーザーはアクションボタンをタップしました。 の値がUIApplicationStateActiveの場合、通知は に届いたときに最前面になりました。

しかし、私はフォアグラウンドでシステムアラート(システムアラートでは、アプリケーションのフォアグラウンドで表示されるアラートビューを意味します)があり、そのアプリケーションが非アクティブである状態(「システムアラート」が表示されている場合、アプリのapplication stateをUIApplicationStateInactiveに設定することで、iOSによってアプリが非アクティブになります)、ユーザーは引き続き画面上でアプリのコンテンツを見ることができます。下記添付ファイルをご参照ください:

enter image description here

をこの状態でアプリが通知を受信した場合、それは通知にタップし、ユーザーかのように動作します。このユースケースを解決するソリューションはありますか?

+1

かなり混乱します。あなたは「フォアグラウンドのシステムアラートとアプリが非アクティブな状態にあります」とはどういう意味ですか? –

+0

@HinataHyugaスクリーンショットでは、iOSによって制御されるシステムアラート(Gmailの通知アラート)の例があります。この時点で、iOSは非アクティブ状態(アプリのアプリケーション状態は非アクティブに設定されます)のまま、アプリを処理します。通知を受け取ったときに 'application:didReceiveLocalNotification:'メソッド呼び出しのたびに – Shashank

+0

が呼び出されます。 – iPatel

答えて

5
- (void)application:(UIApplication*)application didReceiveRemoteNotification: 
(NSDictionary*)userInfo 
{ 
     UIApplicationState state = [application applicationState]; 
     if (state == UIApplicationStateActive) 
     { 
       //When your app was active and it got push notification 
     } 
     else if (state == UIApplicationStateInactive) 
     { 
       //When your app was in background and it got push notification 
     } 
} 

didFinishLaunchingWithOptionsは、あなたのアプリが実行されていなかった時に呼び出され、打ち上げは、あなたの通知にクリックされました。

didReceiveRemoteNotificationにalertviewを表示するので、alertviewの代理人メソッドでタップすることができます。つまり、- (void)alertView:(UIAlertView *)alertView clickedButtonAtIndex:(NSInteger)buttonIndexです。

+0

これは私が理解しています。ユーザーがスクリーンショットに示されているような状態になっている場合でも、ユーザーが通知をタップしていることを確実に確認したい。 – Shashank

+1

間違っています。このメソッドは、アプリケーションの実行中にのみ呼び出されます。"プッシュ通知が到着したときにアプリケーションが実行されていない場合、メソッドはアプリケーションを起動し、起動オプション辞書に適切な情報を提供します。 – nerowolfe

+0

スクリーンショットに示すように、このアラートはコードで表示されますが、通知に関するシステム警告ではありません。 – nerowolfe

0

彼らは、addメソッド、ios10にこの問題を修正:

userNotificationCenter willPresentNotification. 

アプリがforground /アクティブ状態にあり、通知は、ユーザーが他のシステムアラートを閉じた後にのみ表示されます場合にのみ呼び出されます。

+0

代わりに、あなたが意味していたと思っていたのは、 ''オプションのfunc userNotificationCenter(_ center:UNUserNotificationCenter、 でした)というレスポンス:UNNotificationResponse、 withCompletionHandler completionHandler:@escaping() - > Void) '](https://developer.apple.com/ドキュメンテーション/ユーザ通知/非ユーロ化センタ管理/ 1649501-ユーザ通知センター)。 < - このメソッドは実際に応答、すなわちタップをキャプチャします。 'willPresentNotification'は、アプリが** foreground **にあるときのみです。フォアグランドにいるときは、アラートを表示してそれを処理します。 – Honey

関連する問題