36

この質問に似ています: applicationDidBecomeActive のリモート プッシュ通知データにアクセスするにはどうすればよいですか?

ただし、プッシュ通知の代わりにアプリのアイコンをクリックした場合applicationDidBecomeActiveに、通知データにアクセスする方法が異なります。

フローは次のとおりです。push notificationthenをクリックdidReceiveRemoteNotificationするとトリガーされますが、元のアプリのアイコンをクリックすると、のみapplicationDidBecomeActiveがトリガーされ、didReceiveRemoteNotification呼び出されません。

後者のケースを探しているので、プッシュ通知データにアクセスするにはどうすればよいですか。

(どちらの場合も、アプリがバックグラウンドにあり、まだ強制終了されていないと仮定しています。)

4

4 に答える 4

38

ホーム画面からアプリを起動しても、リモート プッシュ ペイロードを取得できません。

プッシュ データがアプリの使用にとって重要な場合は、アプリの起動後にサーバーからロードします。

于 2012-08-23T02:55:57.090 に答える
6

@fannheywardの答えは絶対に正しいです。アプリのアイコンをタップしてアプリケーションを起動すると、ペイロードを取得できません。

アプリのアイコンをタップして、アプリの起動時に通知が保留になっていることを知ったらどうなるでしょうか。この知識があれば、アプリはサーバーからペイロードをフェッチできます。

このようなすべての通知に「バッジ」を設定できます。applicationDidBecomeActiveでは、[application applicationIconBadgeNumber]> 0をチェックして、通知がアクティブであることを確認できます。サーバーからペイロードをフェッチした後、以下のように0に設定できます

[UIApplication sharedApplication] setApplicationIconBadgeNumber:1];
[[UIApplication sharedApplication] setApplicationIconBadgeNumber:0];

注:これは、通知を受信したときにアプリのバッジが表示されることを意味します。ユーザーが設定からバッジを無効にした場合の動作がわかりません。

于 2012-08-30T17:18:19.277 に答える
4

アプリケーションのターゲットが iOS7 以上の場合、アプリケーションがバックグラウンドで生きている場合にのみ実行できます。

Xcode の機能設定で、Background Modes>Remote notifications を有効にし、以下のコードを記述する必要があります。

- (void)application:(UIApplication *)application didReceiveRemoteNotification:(NSDictionary *)userInfo fetchCompletionHandler:(void (^)(UIBackgroundFetchResult))completionHandler
{ 
    // save userInfo in NSUserDefaults
    completionHandler( UIBackgroundFetchResultNoData );
}

テストしたい場合は、https://github.com/acoomans/SimulatorRemoteNotificationsを使用すると便利です

  • サーバー側から、 content-available プロパティの値を 1 に設定してください。

これを機能させるには、バックグラウンド フェッチ ボックスもチェックする必要がありました。

于 2015-10-23T09:20:28.770 に答える
-7

次のような appDelegate の launchWithOptions メソッドで通知を受け取る必要があります。

NSDictionary *remoteNotif = [launchOptions objectForKey: UIApplicationLaunchOptionsRemoteNotificationKey];   

    if(remoteNotif != nil){  
        //Handle your notification   
    }
于 2012-08-24T18:58:48.190 に答える