我正在向我的iPhone应用发送推送通知,我希望根据应用程序是否已启动来执行不同的指令。我对iPhone开发不熟悉,虽然我认为UIApplication或者我的项目的AppDelegate类可能有解决方案,但我没有找到一个好的答案。是否有一种简单的方法来检查这个问题?
我正在向我的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
}
这能够运行是因为应用程序被挂起时,在“唤醒”过程中,操作系统在调用“applicationDidBecomeActive”之前会调用“applicationDidReceiveRemoteNotification”。
实际上,“完整”的答案是Kevin的回答再加上这个回答。
希望这可以帮到你。
UIApplication委托有一个方法
- (void)application:(UIApplication *)application didReceiveRemoteNotification:(NSDictionary *)userInfo
你需要实现的是接收通知的功能。当应用程序正在运行时,它将接收到该通知。
如果你的应用程序当前没有运行,并收到一条通知,则可以通过以下方式启动你的应用程序:
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
如果`launchOptions`字典中保存有通知的详细信息,则表明用户是通过通知打开应用;如果该字典为空,则表示用户像平常一样通过点击应用图标打开应用。
如果您要在iOS 4以下检查应用程序状态,您需要检查是否支持应用程序状态:
if ([application respondsToSelector:@selector(applicationState)] ){
// Safe to check applicationState
UIApplicationState state = [application applicationState];
}