簡體   English   中英

收到推送通知后,如何判斷我的iPhone應用程序是否正在運行?

[英]How do I tell if my iPhone app is running when a Push Notification is received?

我正在向我的iPhone應用程序發送推送通知,我想要執行一組不同的指令,具體取決於應用程序是否已經啟動。 我是iPhone開發的新手,雖然我懷疑UIApplication或我的項目的AppDelegate類有解決方案,但我還沒有找到一個好的答案。 有沒有簡單的方法來檢查這個?

這是處理應用程序的活動/非活動狀態的更合適的方法。

- (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會負責貼上徽章等。如果應用程序在前台,操作系統什么都不做,只需調用你的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字典中保存的通知詳細信息。 如果字典為零,則用戶正常點擊應用程序圖標。

如果要檢查iOS上的applicationState是否小於4,則需要檢查是否支持applicationState:

if ([application respondsToSelector:@selector(applicationState)] ){
  // Safe to check applicationState
  UIApplicationState state = [application applicationState];
}

推送通知的Apple文檔解釋了這一點:

但是,有兩種情況,applicationDidFinishLaunching:不是合適的實現站點:

  • 通知到達時應用程序正在運行。
  • 通知有效內容包含應用程序可以使用的自定義數據。

在第一種情況下,當iPhone OS收到遠程通知時應用程序正在運行的情況下,如果要立即下載數據,則應實現應用程序:didReceiveRemoteNotification:UIApplicationDelegate的方法。 下載后,請務必從應用程序圖標中刪除徽章。 (如果您的應用程序經常向其提供者檢查新數據,則可能不需要實現此方法。)

這意味着如果您的應用程序:didReceiveRemoteNotification:delegate方法被調用,則您的應用程序正在運行。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM