我將推送通知發送到我的iPhone應用程序,並且我想要執行一組不同的指令來執行,具體取決於應用程序是否已啓動。我是iPhone開發新手,雖然我懷疑UIApplication或我的項目的AppDelegate類有解決方案,但我還沒有找到一個好的答案。有沒有簡單的方法來檢查這個?如何在收到推送通知時判斷我的iPhone應用程序是否正在運行?
回答
的UIApplication的代表有您需要實現方法
- (void)application:(UIApplication *)application didReceiveRemoteNotification:(NSDictionary *)userInfo
。這會在應用程序運行時收到通知。
如果您的應用程序當前未運行,並收到通知,然後你的應用程序可以與
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
與在launchOptions字典召開的通知細節展開。如果字典是零,那麼用戶正常點擊應用程序圖標。
蘋果文檔推送通知解釋了這一點:
但是,有以下兩種情況下的applicationDidFinishLaunching:是不是一個合適的實現網站:當通知到達
- 應用程序運行。
- 通知有效載荷包含應用程序可以使用的自定義數據。
在第一種情況下,當iPhone OS收到遠程通知時應用程序正在運行,如果要立即下載數據,則應該實現UIApplicationDelegate的application:didReceiveRemoteNotification:方法。下載後,請務必從應用程序圖標中移除徽章。 (如果你的應用程序經常與它的供應商對新的數據檢查,實施這種方法可能不是必要的。)
這意味着,如果你的應用程序:didReceiveRemoteNotification:委託方法被調用時,你的應用程序正在運行。
下面是處理應用程序活動/非活動狀態的更合適的方法。
- (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:
即可。
如果你要檢查applicationState iOS上小於4,你需要檢查applicationState支持:
if ([application respondsToSelector:@selector(applicationState)]){
// Safe to check applicationState
UIApplicationState state = [application applicationState];
}
取決於你所說的「推出」什麼,你要麼找:
- Kevin的回答上述(區分發射之間與否發射)
- 或該(懸浮或有源的,但已經啓動之間進行區分):
使用在應用程序變爲活動狀態時設置爲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」。
「完整」答案實際上是凱文的答案加上這個答案。
希望這會有所幫助。
- 1. 如何判斷全屏應用程序是否正在運行?
- 2. 隱藏推送通知時,應用程序正在運行
- 3. Android:當應用程序未運行時接收推送通知
- 4. 如何播放聲音,當我收到推送通知(當應用程序正在運行時)
- 5. 當應用程序未運行時獲取推送通知iPhone
- 6. 服務器如何知道iPhone是否收到推送通知?
- 7. 應用程序如何判斷它是否在hackintosh上運行?
- 8. 我如何在iphone應用程序中推送通知?
- 9. 如何在應用程序關閉時接收推送通知?
- 10. 任何方式來判斷我的iPhone應用程序是否在運行時在調試器下運行?
- 11. 當應用程序在前臺運行時收到iOS推送通知
- 12. iPhone - 應用程序仍在運行,接收推送通知=更改視圖
- 13. 我的Perl程序如何判斷是否在mod_perl下運行?
- 14. 如何判斷OrbBasic程序是否正在運行
- 15. 當應用程序在前臺時未收到推送通知
- 16. 推送iPhone應用程序的通知
- 17. 推送通知未在iPhone中收到
- 18. Android - 如何檢查我的應用程序是否在收到推送通知時打開?
- 19. 如何判斷我的Titanium應用程序是否在模擬器上運行?
- 20. 如何判斷openoffice的哪個應用程序正在運行?
- 21. 如何從Facebook服務接收我的iPhone應用程序的推送通知?
- 22. iPhone應用程序推送通知
- 23. 如何在iPhone接收到推送通知時
- 24. 如何判斷用戶關閉推送通知或刪除應用程序
- 25. 爲什麼我的iOS應用程序在收到推送通知時崩潰?
- 26. 我的應用程序不會收到Foursquare推送通知
- 27. 我的應用程序沒有收到解析推送通知
- 28. 在關閉的應用程序上未收到推送通知
- 29. 推送通知當應用程序正在運行時不起作用(活動)
- 30. 我想用推送通知我的應用程序的IPhone
這是一個gd之一。謝謝 – 2011-08-30 06:03:19