29

iPhoneアプリにプッシュ通知を送信していますが、アプリが既に起動されているかどうかに応じて、異なる一連の命令を実行したいと思います。私はiPhone開発に不慣れで、UIApplicationまたは私のプロジェクトのAppDelegateクラスに解決策があると思いますが、良い答えは見つかりませんでした。これを確認する簡単な方法はありますか?

4

5 に答える 5

76

アプリのアクティブ/非アクティブ状態を処理するより適切な方法を次に示します。

- (void)application:(UIApplication *)application didReceiveRemoteNotification:(NSDictionary *)userInfo {   
        // check for the app state
        UIApplicationState state = [application applicationState];

        if (state == UIApplicationStateActive) {
            //the app is in the foreground, so here you do your stuff since the OS does not do it for you
            //navigate the "aps" dictionary looking for "loc-args" and "loc-key", for example, or your personal payload)
        }

    application.applicationIconBadgeNumber = 0;
}

didReceiveRemoteNotification:はい、アプリの実行中に呼び出されますが、中断されてiOSいる場合、 はバッジの表示などを処理します。アプリがフォアグラウンドにある場合、OS は何もせず、 を呼び出すだけdidReceiveRemoteNotification:です。

于 2010-08-28T03:15:42.493 に答える
26

「起動」の意味に応じて、次のいずれかを探しています。

  • 上記のケビンの答え(起動されているか起動されていないかを区別します)
  • またはこれ(一時停止またはアクティブであるが、すでに起動されていることを区別します):

アプリケーションがアクティブになったときに true に設定され、アプリケーションがアクティブでないときに false に設定されるフラグを使用します。

フラグ (ヘッダー ファイル [.h] 内):

BOOL applicationIsActive;

コード (実装ファイル [.m] 内):

- (void)applicationDidBecomeActive:(UIApplication *)application {
    applicationIsActive = YES;
}

- (void)applicationWillResignActive:(UIApplication *)application {
    applicationIsActive = NO;
}

- (void)application:(UIApplication *)application didReceiveRemoteNotification:(NSDictionary *)userInfo
{
    if (applicationIsActive) {
        // Handle notification in app active state here
    }
    else {
        // Handle notification in app suspended state here
    }

これが機能するのは、アプリケーションが中断されると、「ウェイクアップ」プロセス中に OS が「applicationDidBecomeActive」を呼び出す前に「applicationDidReceiveRemoteNotification」を呼び出すためです。

「完全な」回答は、実際にはケビンの回答とこの回答です。

お役に立てれば。

于 2011-05-13T12:54:07.627 に答える
18

UIApplicationデリゲートにはメソッドがあります

- (void)application:(UIApplication *)application didReceiveRemoteNotification:(NSDictionary *)userInfo

実装する必要があります。これは、アプリの実行中に通知を受け取ります。

アプリが現在実行されておらず、通知を受信した場合、アプリを起動できます

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

launchOptions ディクショナリに保持されている通知の詳細を使用します。辞書が nil の場合、ユーザーは通常どおりアプリケーション アイコンをタップしました。

于 2010-01-04T08:47:11.323 に答える
6

4 未満の iOS で applicationState を確認する場合は、applicationState がサポートされていることを確認する必要があります。

if ([application respondsToSelector:@selector(applicationState)] ){
  // Safe to check applicationState
  UIApplicationState state = [application applicationState];
}
于 2011-03-17T18:13:31.210 に答える