ローカルUILocalNotification
を作成し、バナーとしてユーザーに表示しています。ユーザーがタップしてアプリに戻ったときに、アプリが特定の種類の通知に関する何らかのデータを受け取るように設定することは可能ですか? アプリで特定のView Controllerを開きたい。基本的にURLをアプリに送信するのが最善の方法だと思いますか、またはUILocalNotification
どの種類があったかをテストして正しいアクションを実行できるようにアクセスする方法はありますか?
3 に答える
iOS アプリに渡されるローカル NSUserNotification からデータを取得するには、次のメソッドを実装するだけです- (void)application:(UIApplication *)application didReceiveLocalNotification:(UILocalNotification *)notification
。
問題は、これは、アプリがバックグラウンドにあるときにローカル通知が投稿されたとき (つまり、ユーザーが通知をタップしてからアプリに戻ったとき) と、アプリがその時点でフォアグラウンドにある場合の両方で呼び出されることです。ローカル通知が発生したとき(結局のところ、タイマー上にあります)。では、アプリがバックグラウンドまたはフォアグラウンドにあるときに通知が発生したかどうかをどのように判断する必要がありますか? とてもシンプルです。これが私のコードです:
- (void)application:(UIApplication *)application didReceiveLocalNotification:(UILocalNotification *)notification {
UIApplicationState state = [application applicationState];
if (state == UIApplicationStateInactive) {
// Application was in the background when notification was delivered.
} else {
// App was running in the foreground. Perhaps
// show a UIAlertView to ask them what they want to do?
}
}
notification.userInfo
この時点で、NSDictionary を保持する に基づいて通知を処理できます。
NSUserNotificationCenterDelegateを実装し、このメソッドを定義する必要があります。
- (void)userNotificationCenter:(NSUserNotificationCenter *)center didActivateNotification:(NSUserNotification *)notification
例:
これは、「通知機能」アプリケーションで行ったことです。
- (void) userNotificationCenter:(NSUserNotificationCenter *)center didActivateNotification:(NSUserNotification *)notification
{
NSRunAlertPanel([notification title], [notification informativeText], @"Ok", nil, nil);
}
- (void) userNotificationCenter:(NSUserNotificationCenter *)center didDeliverNotification:(NSUserNotification *)notification
{
notifications=nil;
[tableView reloadData];
[center removeDeliveredNotification: notification];
}
通知がアクティブ化されたとき(ユーザーがクリック)、パネルでユーザーに通知するだけです(ハッドウィンドウを使用できます)。この場合、配信された通知をすぐに削除しますが、これは通常は発生しません。通知は残る可能性があります。しばらく時間がかかり、30分後に削除されます(開発しているアプリケーションによって異なります)。
1 - プロジェクトでいくつかのクラスを定義して、NSUserNoficationCenterDelegate プロトコルを実装します (ドキュメントはこちら) 。
@interface someObject : NSObject <NSUserNotificationCenterDelegate>
{
- (void)userNotificationCenter:(NSUserNotificationCenter *)center didActivateNotification:(NSUserNotification *)notification;
}
2 - #1 で定義されたオブジェクトのインスタンスをデフォルトの通知センターのデリゲートとして設定します。
[[NSUserNotificationCenter defaultNotificationCenter] setDelegate: someObject];
これで、ユーザーが通知をタップまたはクリックするたびに、didActivateNotification が呼び出されます。作成した元の通知が表示されます。したがって、必要な情報はすべて入手できるはずです。
特別な情報 (通知のタイトル、メッセージなど以外) が必要な場合は、送信をスケジュールする前に、通知に追加のアプリケーション固有の情報を設定する必要があります。例えば:
NSUserNotification* notification = [[NSUserNotification alloc] init];
NSDictionary* specialInformation = [NSDictionary dictionaryWithObjectsAndKeys: @"specialValue", @"specialKey", nil];
[notification setUserInfo:specialInformation];