[英]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.