当你收到通知时,有两种状态。
1、程序在活跃状态,或者是后台。
这时候当你收到通知,就会走下面两个方法:
- (void)application:(UIApplication *)application didReceiveRemoteNotification:(NSDictionary *)userInfo {
if (application.applicationState == UIApplicationStateActive) {
[JPUSHService setBadge:0];
}
//对收到的信息 进行 符合自己业务的 操作
[self _operateLocalNotificationByUserInfo:userInfo];
}
//iOS 7 Remote Notification
- (void)application:(UIApplication *)application didReceiveRemoteNotification: (NSDictionary *)userInfo fetchCompletionHandler:(void (^) (UIBackgroundFetchResult))completionHandler {
if (application.applicationState == UIApplicationStateActive) {
[JPUSHService setBadge:0];
}
//对收到的信息 进行 符合自己业务的 操作
[self _operateLocalNotificationByUserInfo:userInfo];
}
2、当你的APP已经被杀死了。
这时候来了通知,你点击通知栏或者APP图标进入程序的话,上面的两个方法显然就不走了啊。但是他一定会走这个方法:
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions;
这里的launchOptions 显然是个字典。而有对应的KEY,通过apple提供的这个KEY,能取到通知的内容。再做对应的操作就好了:
//判断是否有通知
UILocalNotification *notification = [launchOptions objectForKey:UIApplicationLaunchOptionsLocalNotificationKey];
if (notification != nil) {
NSDictionary *userInfo = notification.userInfo;
if (application.applicationState == UIApplicationStateActive) {
[JPUSHService setBadge:0];
}
//这里是我的业务,与此问题没关系,您需要 根据您自己的业务
[self _operateLocalNotificationByUserInfo:userInfo];
}