以下是我想要处理Apple文档中引用的情况。
作为呈现通知的结果,用户点击警报的操作按钮或点击(或点击)应用程序图标。 如果点击操作按钮(在运行iOS的设备上),系统将启动应用程序,应用程序将调用其委托的应用程序:didFinishLaunchingWithOptions:method(如果已实现);它传入通知有效负载(用于远程通知)或本地通知对象(用于本地通知)。
如果在运行iOS的设备上轻触应用程序图标,则应用程序会调用相同的方法,但不会提供有关通知的信息。如果在运行OS X的计算机上单击应用程序图标,则应用程序将调用委托的applicationDidFinishLaunching:方法,其中委托可以获取远程通知有效负载。
如果没有关于通知的信息,我该如何处理这种情况?
答案 0 :(得分:5)
如果我理解正确,听起来你已经触发了UILocalNotification,但如果用户点击应用程序图标而不是通知,你仍然需要处理它。正确的吗?
如果是这种情况,那么据我所知,您将无法处理来自应用程序代理的通知,因为该应用程序未通过通知启动或退出后台,而是由用户提供相互作用。
但是,如果您在带有通知的应用程序上设置badgeNumber,那么您可以尝试这样的事情:
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {
if (launchOptions[UIApplicationLaunchOptionsLocalNotificationKey]) {
UILocalNotification *notification = launchOptions[UIApplicationLaunchOptionsLocalNotificationKey];
} else if ([UIApplication sharedApplication].applicationIconBadgeNumber > 0) {
// Assume that user launched the app from the icon with a notification present.
}}
您可能还需要检查- (void)applicationDidBecomeActive:(UIApplication *)application
中的badgeNumber。
答案 1 :(得分:1)
改进@Aron Crittendon回答:
还要考虑在applicationDidBecomeActive中处理它:
-(void)applicationDidBecomeActive:(UIApplication *)application
{
if ([UIApplication sharedApplication].applicationIconBadgeNumber > 0) {
//application is in background, fired notification and user tapped app icon with badge
}
}
答案 2 :(得分:0)
正如文档所述,如果您点击iOS上的图标(而不是通知的警报/横幅),则会调用相同的方法,但您不会收到任何通知信息。只需点击应用图标即无法处理本地通知。