当用户按下图标而不是警报时处理本地通知

时间:2014-07-02 20:17:38

标签: ios objective-c notifications uilocalnotification localnotification

以下是我想要处理Apple文档中引用的情况。

  

作为呈现通知的结果,用户点击警报的操作按钮或点击(或点击)应用程序图标。   如果点击操作按钮(在运行iOS的设备上),系统将启动应用程序,应用程序将调用其委托的应用程序:didFinishLaunchingWithOptions:method(如果已实现);它传入通知有效负载(用于远程通知)或本地通知对象(用于本地通知)。

     

如果在运行iOS的设备上轻触应用程序图标,则应用程序会调用相同的方法,但不会提供有关通知的信息。如果在运行OS X的计算机上单击应用程序图标,则应用程序将调用委托的applicationDidFinishLaunching:方法,其中委托可以获取远程通知有效负载。

如果没有关于通知的信息,我该如何处理这种情况?

3 个答案:

答案 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上的图标(而不是通知的警报/横幅),则会调用相同的方法,但您不会收到任何通知信息。只需点击应用图标即无法处理本地通知。