9

プッシュ通知に特有の動作が見られ、私が間違ったことやすべきことについて誰かがアドバイスを持っているかどうか疑問に思っていました。

私は次のようにapplication:(UIApplication*)application didReceiveRemoteNotification:書いています:

- (void)application:(UIApplication*)application didReceiveRemoteNotification: (NSDictionary*)userInfo
{
NSLog(@"Received notification: %@", userInfo);
[self addMessageFromRemoteNotification:userInfo updateUI:YES];
} 

ご覧のとおり、アプリの状態は気になりません。PNを取得するたびにメッセージをログに記録したいだけです。

私のセットアップはAppleのドキュメントに従っており、プッシュ通知を受け取ることができます。

PNが入ったときに予想される動作は次のとおりです。

  • アプリがバックグラウンドにあり、通知をクリックします。通知センターに通知が表示されます。通知をクリックすると、アプリが前面に表示され、上記のメソッドが呼び出されていることがわかります。
  • アプリはアクティブで、すでにフォアグラウンドにあります。上記のメソッドが呼び出されていることがわかります。

さて、以下は私が見ている独特の振る舞いです:

  • PNが入ります。通知で確認してください。アプリアイコンのバッジを確認してください。通知ではなく、アプリのアイコンをクリックします。この例では、上記のメソッドが呼び出されていないことがわかりました。私はそれが呼ばれることを期待していました...

誰かが以前にこの振る舞いを見たことがありますか?これは何が起こるべきですか?これに関するAppleのドキュメントには何も表示されませんでした...また、これを回避する方法はありますか?

4

3 に答える 3

2

アプリがバックグラウンドで実行されておらず、プッシュ通知から最初に起動され、didFinishLaunchingWithOptions:が実装されている場合は、そこにコードを実装する必要があります。

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary*)launchOptions {
    if (launchOptions != nil) {
        NSDictionary* userInfo = [launchOptions valueForKey:@"UIApplicationLaunchOptionsRemoteNotificationKey"];
        if (userInfo != nil) {
            NSDictionary* apsInfo = [userInfo objectForKey:@"aps"];
            NSString* custom = [userInfo objectForKey:@"yourCustomPushData"];
            // do something with it
        }
    }
    //...
}
于 2012-06-06T09:35:25.020 に答える
2

私も同じ行動をしています。それは私を夢中にさせますが、それがiOSの仕組みだと思います.

以下は、Apple のドキュメントからの抜粋です。これは、アプリが実行されていないときの application:didFinishLaunchingWithOptions に関するものです。アプリがbackground/didReceiveRemoteNotificationのときも同じようです。

「(iOS を実行しているデバイスで) アクション ボタンがタップされると、システムはアプリケーションを起動し、アプリケーションはデリゲートの application:didFinishLaunchingWithOptions: メソッドを呼び出します (実装されている場合); 通知ペイロード (リモート通知の場合) またはローカルで渡します。 -通知オブジェクト (ローカル通知用)。

iOS を実行しているデバイスでアプリケーション アイコンがタップされた場合、アプリケーションは同じメソッドを呼び出しますが、通知に関する情報は提供しません。" から: http://developer.apple.com/library/ios/#documentation/NetworkingInternet/Conceptual/RemoteNotificationsPG/IPhoneOSClientImp/IPhoneOSClientImp.html#//apple_ref/doc/uid/TP40008194-CH103-SW1

于 2012-12-07T11:54:50.203 に答える
0

私の場合、Mrj'sは機能していないので、次のオプションを試しました

アプリケーションがバックグラウンドにない場合は、次のコードを使用する必要があります

   //-------------- check notification when app is come to foreground after apllication get terminated ----------------//

UILocalNotification *localNotif =

[launchOptions objectForKey:UIApplicationLaunchOptionsRemoteNotificationKey];

if (localNotif) {

    [self handleRemotNotification:[launchOptions valueForKey:@"UIApplicationLaunchOptionsRemoteNotificationKey"]]; // private method


}
于 2013-06-06T07:07:00.190 に答える