2012-02-07 14 views
2

プッシュ通知を含む1つのiPhoneアプリで作業しています。アプリはさえに(実行されていなかったならば、今の質問は、あるアプリがiPhoneを実行していないときにプッシュ通知を取得

- (BOOL)application:(UIApplication *)application 
    didFinishLaunchingWithOptions:(NSDictionary *)launchOptions 
{ 
    [[UIApplication sharedApplication] registerForRemoteNotificationTypes:UIRemoteNotificationTypeAlert| UIRemoteNotificationTypeBadge| UIRemoteNotificationTypeSound]; 

    ... 
} 

:私は、それは次のよう

application:(UIApplication *)application 
    didFinishLaunchingWithOptions:(NSDictionary *)launchOptions 

とプッシュ通知のために登録することを示唆している多くの文書とチュートリアルで見てきたようにバックグラウンド)、プッシュが来たらプッシュメッセージを処理できませんが、再度通知エリアからプッシュメッセージを使用してアプリを再び昼食すればメッセージを受け取ることができます。

初めて昼食をしてもプッシュメッセージが表示されるようにするにはどうすればいいですか?

+0

どのようにあなたが登録した前に、デバイスにプッシュを送信しようとしているが、しかし、鍵を持って&あなたのサーバーに送信され? – mattjgalloway

+0

過去にアプリが使用されていた場合、私のサーバーはデバイストークンを追跡していますので、その時点で台無しになっていなくてもプッシュを送信できます。しかし、今問題は、アプリケーションが初めて起動するときです。通知を処理しないよう通知にサインアップしようとしています。どのように私はこの問題を解決することができますか? – shebelaw

+0

何をハングアップしますか?私はあなたが物事を混乱させたと思う。 @ warrenmの答えを見てください。 – mattjgalloway

答えて

6

登録して通知を受け取るという概念が混在している可能性があります。 registerForRemoteNotificationTypes:メソッドが最初に呼び出される前に、プッシュ通知を受け取ることは不可能です。このメソッドは、最初にプッシュ通知を送信するために使用されるプッシュトークンを提供するためです。

通知が届くのは、最初のアプリの起動時とプログラムの実行中の2つの状況があります。

最初のタイプの通知を処理するには、辞書をapplication:didFinishLaunchingWithOptions:に送信して検査する必要があります。次のコードは、起動時に受け取った通知を、アプリケーションが既に実行中にプッシュ通知が到着したときに呼び出されるデリゲートメソッドにルーティングする方法を示しています。あなたのapplication:didFinishLaunchingWithOptions:オーバーライドで

置き、これを:

NSDictionary *pushNotificationPayload = [launchOptions valueForKey:UIApplicationLaunchOptionsRemoteNotificationKey]; 
if(pushNotificationPayload) { 
    [self application:application didReceiveRemoteNotification:pushNotificationPayload]; 
} 
+0

はい、これはおそらく適切な解決策です、私はそれをテストします。ありがとうWarrenm – shebelaw

+0

はいこれは適切な解決策ですが、ユーザーがプッシュ通知ではなくAppアイコンをクリックしたときに警告( 'didReceiveRemoteNotification'メソッド内に配置された' UIAlert')が表示されるようにするにはどうすればよいですか。 –

+0

これは、1年以上経過した解答のコメントではなく、新しい質問として投稿する方が良いかもしれません。 – warrenm

関連する問題