iPhoneアプリにプッシュ通知を送信していますが、アプリが既に起動されているかどうかに応じて、異なる一連の命令を実行したいと思います。私はiPhone開発に不慣れで、UIApplicationまたは私のプロジェクトのAppDelegateクラスに解決策があると思いますが、良い答えは見つかりませんでした。これを確認する簡単な方法はありますか?
5 に答える
アプリのアクティブ/非アクティブ状態を処理するより適切な方法を次に示します。
- (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:
です。
「起動」の意味に応じて、次のいずれかを探しています。
- 上記のケビンの答え(起動されているか起動されていないかを区別します)
- またはこれ(一時停止またはアクティブであるが、すでに起動されていることを区別します):
アプリケーションがアクティブになったときに 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」を呼び出すためです。
「完全な」回答は、実際にはケビンの回答とこの回答です。
お役に立てれば。
UIApplicationデリゲートにはメソッドがあります
- (void)application:(UIApplication *)application didReceiveRemoteNotification:(NSDictionary *)userInfo
実装する必要があります。これは、アプリの実行中に通知を受け取ります。
アプリが現在実行されておらず、通知を受信した場合、アプリを起動できます
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
launchOptions ディクショナリに保持されている通知の詳細を使用します。辞書が nil の場合、ユーザーは通常どおりアプリケーション アイコンをタップしました。
4 未満の iOS で applicationState を確認する場合は、applicationState がサポートされていることを確認する必要があります。
if ([application respondsToSelector:@selector(applicationState)] ){
// Safe to check applicationState
UIApplicationState state = [application applicationState];
}