web-dev-qa-db-ja.com

iOS-アプリの実行中にプッシュ通知アラートが表示されない

アプリにプッシュ通知を統合しました。ユーザーは、グループに参加するためのプッシュ通知を受け取ります。ユーザーがJoinをクリックすると、コード内の何かを処理する必要があります。だから私は実装しています:

- (void)application:(UIApplication *)application 
        didReceiveRemoteNotification:(NSDictionary *)userInfo

これは、アプリが実行されていないときに正常に機能しています。
アプリの実行中、UIAlertViewが表示されません。ユーザーが参加するかどうかを引き続き決定できるように、アプリにプッシュ通知アラートを表示させるにはどうすればよいですか?

34
Satyam

アプリケーションがアクティブなときに通知アラートを模倣するために、アプリケーションデリゲートでこのようなコードを使用しました。適切なUIAlertViewDelegateプロトコルメソッドを実装して、ユーザーがいずれかのボタンをタップしたときに何が起こるかを処理する必要があります。

- (void)application:(UIApplication *)application didReceiveRemoteNotification:(NSDictionary *)userInfo {    
  UIApplicationState state = [application applicationState];
  if (state == UIApplicationStateActive) {
      NSString *cancelTitle = @"Close";
      NSString *showTitle = @"Show";
      NSString *message = [[userInfo valueForKey:@"aps"] valueForKey:@"alert"];
      UIAlertView *alertView = [[UIAlertView alloc] initWithTitle:@"Some title"
       message:message 
       delegate:self 
       cancelButtonTitle:cancelTitle 
       otherButtonTitles:showTitle, nil];
      [alertView show];
      [alertView release];
  } else {
    //Do stuff that you would do if the application was not active
  }
}
70
Jakob W

誰もが興味を持っているかもしれませんが、私はシステムプッシュバナーのようなカスタムビューを作成しましたが、閉じるボタン(小さな青いX)とカスタムアクションのメッセージをタップするオプションを追加しました。また、ユーザーが古い通知を読んだり消したりする前に、複数の通知が届く場合もサポートします(何件まで積み重ねることができますか?)

GitHubへのリンク:AGPushNote

使用方法は基本的にオンラインです:

[AGPushNoteView showWithNotificationMessage:@"John Doe sent you a message!"];

IOS7ではこのようになります(iOS6にはiOS6のルックアンドフィールがあります...)

Example

17
Aviel Gross

必要な場合は、自分でアラートを表示する必要があります。これはここに文書化されている意図的な動作です http://developer.Apple.com/library/ios/#documentation/NetworkingInternet/Conceptual/RemoteNotificationsPG/IPhoneOSClientImp/IPhoneOSClientImp.html 以下リスト2-6

1
Kerni

アプリケーションの実行中にアラートビューを表示するには、使用する必要があります

-(void)application:(UIApplication *)application 
       didReceiveRemoteNotification:(NSDictionary *)userInfo {
}

userInfo変数にアクセスすることにより

1
Stark

この関数のみが呼び出され、通知を実装しているアプリが実行されている場合、通知が発生しない場合にアラートを明示的に表示する必要があります。ブレークポイントをそこに置き、関数が呼び出されたときに通知呼び出しを処理し、そこに警告します。

1
Ballu

アプリは引き続きアプリデリゲートで-application:didReceiveRemoteNotificationメッセージを受信しますが、メッセージを自分で操作する必要があります(つまり、デフォルトではアラートは表示されません)。

userInfoパラメーターには、キーnotificationTypeを持つオブジェクトが含まれます。これを使用して、プッシュメッセージを識別できます。

0

UIAlertControllerをサポートするバージョンは次のとおりです

-(void)application:(UIApplication *)application didReceiveLocalNotification:(UILocalNotification *)notification {
UIApplicationState state = [application applicationState];
[UIApplication sharedApplication].applicationIconBadgeNumber = 0;
if (state == UIApplicationStateActive) {

    UIAlertController * alert=   [UIAlertController
                                  alertControllerWithTitle:notification.alertTitle
                                  message:notification.alertBody
                                  preferredStyle:UIAlertControllerStyleAlert];

    UIAlertAction* ok = [UIAlertAction
                         actionWithTitle:@"OK"
                         style:UIAlertActionStyleDefault
                         handler:^(UIAlertAction * action)
                         {
                             [alert dismissViewControllerAnimated:YES completion:nil];

                         }];

    [alert addAction:ok];

    [self.navigationController presentViewController:alert animated:YES completion:nil];

}

}

**私のアプリはApp Delegateでself.navigationControllerを使用していることに注意してください。ViewControllerに接続するだけで、アラートを表示(表示)します**

0
Mike Zriel