アプリにプッシュ通知を統合しました。ユーザーは、グループに参加するためのプッシュ通知を受け取ります。ユーザーがJoinをクリックすると、コード内の何かを処理する必要があります。だから私は実装しています:
- (void)application:(UIApplication *)application
didReceiveRemoteNotification:(NSDictionary *)userInfo
これは、アプリが実行されていないときに正常に機能しています。
アプリの実行中、UIAlertView
が表示されません。ユーザーが参加するかどうかを引き続き決定できるように、アプリにプッシュ通知アラートを表示させるにはどうすればよいですか?
アプリケーションがアクティブなときに通知アラートを模倣するために、アプリケーションデリゲートでこのようなコードを使用しました。適切な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
}
}
誰もが興味を持っているかもしれませんが、私はシステムプッシュバナーのようなカスタムビューを作成しましたが、閉じるボタン(小さな青いX)とカスタムアクションのメッセージをタップするオプションを追加しました。また、ユーザーが古い通知を読んだり消したりする前に、複数の通知が届く場合もサポートします(何件まで積み重ねることができますか?)
使用方法は基本的にオンラインです:
[AGPushNoteView showWithNotificationMessage:@"John Doe sent you a message!"];
IOS7ではこのようになります(iOS6にはiOS6のルックアンドフィールがあります...)
必要な場合は、自分でアラートを表示する必要があります。これはここに文書化されている意図的な動作です http://developer.Apple.com/library/ios/#documentation/NetworkingInternet/Conceptual/RemoteNotificationsPG/IPhoneOSClientImp/IPhoneOSClientImp.html 以下リスト2-6
アプリケーションの実行中にアラートビューを表示するには、使用する必要があります
-(void)application:(UIApplication *)application
didReceiveRemoteNotification:(NSDictionary *)userInfo {
}
userInfo
変数にアクセスすることにより
この関数のみが呼び出され、通知を実装しているアプリが実行されている場合、通知が発生しない場合にアラートを明示的に表示する必要があります。ブレークポイントをそこに置き、関数が呼び出されたときに通知呼び出しを処理し、そこに警告します。
アプリは引き続きアプリデリゲートで-application:didReceiveRemoteNotification
メッセージを受信しますが、メッセージを自分で操作する必要があります(つまり、デフォルトではアラートは表示されません)。
userInfo
パラメーターには、キーnotificationType
を持つオブジェクトが含まれます。これを使用して、プッシュメッセージを識別できます。
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に接続するだけで、アラートを表示(表示)します**