アプリが実行されていないときにプッシュ通知を受信した場合、その通知をクリックすると、アプリが起動しますが、設定したアラート ビューでユーザーにプロンプトを表示せず、表示するかどうかを尋ねます。通知内容の有無。それはただ起動し、そこに座っています。
プッシュ通知は、アプリが実行中 (アクティブ アプリとして、またはバックグラウンドで実行中)に完全に機能しますが、アプリが実行されていないときは何も正しく機能しません。
launchOptions
NSDictionary をログアウトしapplication: didFinishLaunchingWithOptions:
て負荷を確認しようとしましたが、「(null)」と表示されます。したがって、基本的には何も含まれていません-通知の負荷が含まれていないのは意味がありませんか?
アプリが実行されていないときにプッシュ通知が到着したときにプッシュ通知を機能させる方法を知っている人はいますか?
編集:application: didReceiveRemoteNotification
何が何であるかを確認するために使用しているコードは次のとおりです。
if (UIApplicationStateBackground) {
NSLog(@"===========================");
NSLog(@"App was in BACKGROUND...");
}
else if (UIApplicationStateActive == TRUE) {
NSLog(@"===========================");
NSLog(@"App was ACTIVE");
}
else {
[[UIApplication sharedApplication] setApplicationIconBadgeNumber: 99];
UIAlertView *BOOM = [[UIAlertView alloc] initWithTitle:@"BOOM"
message:@"app was INACTIVE"
delegate:self
cancelButtonTitle:@"a-ha!"
otherButtonTitles:nil];
[BOOM show];
NSLog(@"App was NOT ACTIVE");
}
したがって、これはすべてのアプリケーションの状態を処理することになっていますが、そうではありません。プッシュ通知は、アプリがバックグラウンドまたはフォアグラウンドで実行されている場合にのみ機能します...
================================================
更新/編集#2:「@dianz」の提案(以下)application: didFinishLaunchingWithOptions
に従って、次を含めるように私のコードを変更しました:
UILocalNotification *localNotif = [launchOptions objectForKey:UIApplicationLaunchOptionsRemoteNotificationKey];
if (localNotif) {
NSString *json = [localNotif valueForKey:@"data"];
UIAlertView *bam = [[UIAlertView alloc] initWithTitle:@"appDidFinishWithOptions"
message:json
delegate:self
cancelButtonTitle:@"cool"
otherButtonTitles:nil];
[bam show];
}
これにより、AlertViewボックスが表示されますが、ペイロードがないようです.AlertViewのタイトルが表示されます(「appDidFinishWithOptions」)が、json NSStringがEMPTYになります...微調整を続けます...
======================
編集 #3 - 現在はほぼ100%動作
していdidFinishLaunchingWithOptions
ます。
UILocalNotification *localNotif = [launchOptions objectForKey:UIApplicationLaunchOptionsRemoteNotificationKey];
if (localNotif) {
// Grab the pushKey:
pushKey = [localNotif valueForKey:@"pushKey"];
// "pushKey" is an NSString declared globally
// The "pushKey" in the "valueForKey" statement is part of my custom JSON Push Notification pay-load.
// The value of pushKey will always be a String, which will be the name of the
// screen I want the App to navigate to. So when a Notification arrives, I go
// through an IF statement and say "if pushKey='specials' then push the
// specialsViewController on, etc.
// Here, I parse the "alert" portion of my JSON Push-Notification:
NSDictionary *tempDict = [localNotif valueForKey:@"aps"];
NSString *pushMessage = [tempDict valueForKey:@"alert"];
// Finally, ask user if they wanna see the Push Notification or Cancel it:
UIAlertView *bam = [[UIAlertView alloc] initWithTitle:@"(from appDidFinishWithOptions)"
message:pushMessage
delegate:self
cancelButtonTitle:@"Cancel"
otherButtonTitles:@"View Info", nil];
[bam show];
}
alertView: clickedButtonAtIndex
次に、ユーザーが AlertView で何を選択したかを確認するメソッドを実装し、それに応じて処理を進めます。
didReceiveRemoteNotification
これは、ロジックとともに完全に機能します。
ただし...アプリが実行されていない場合、プッシュ通知アラートが到着したらすぐにクリックせず、代わりにフェードアウトするのを待つと、プッシュ通知を送信します(これは3-のように発生します- 4 秒)、次にアプリのアイコン (BADGE が 1 になっている) をクリックします。アプリは起動しますが、起動時にプッシュ通知アラートがまったく表示されません。そこに座っているだけです。
次にその順列を理解する必要があると思います...