5

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

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

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

ここに画像の説明を入力

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

4

2 に答える 2

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アプリが実行されておらず、通知で Launch がクリックされたときに呼び出されます。

didReceiveRemoteNotification で alertview を表示するので、alertview のデリゲート メソッドでタップを識別できます- (void)alertView:(UIAlertView *)alertView clickedButtonAtIndex:(NSInteger)buttonIndex

于 2013-08-12T11:29:21.407 に答える