iOS10下app运行中,但是处于后台,点击通知问题


/**
 *  当app完全离线状态,点击通知栏的通知,会调用该方法此时launchOptions有值
 */
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {

    //APNS注册通知
    if ([UIDevice currentDevice].systemVersion.doubleValue<8.0) {
        [[UIApplication sharedApplication] registerForRemoteNotificationTypes:(UIRemoteNotificationTypeAlert | UIRemoteNotificationTypeSound | UIRemoteNotificationTypeBadge)];
    }
    else {
        [[UIApplication sharedApplication] registerForRemoteNotifications];
        [[UIApplication sharedApplication] registerUserNotificationSettings:[UIUserNotificationSettings settingsForTypes:UIUserNotificationTypeBadge|UIUserNotificationTypeSound|UIUserNotificationTypeAlert categories:nil]];
    }
    NSLog(@"%@",launchOptions);
    //判断是否由远程消息通知触发应用程序启动
    if (launchOptions) {
        //获取应用程序消息通知标记数(即小红圈中的数字)
        NSInteger badge = [UIApplication sharedApplication].applicationIconBadgeNumber;
        self.window.rootViewController.view.backgroundColor = [UIColor redColor];
        if (badge>0) {
            //如果应用程序消息通知标记数(即小红圈中的数字)大于0,清除标记。
            badge--;
            //清除标记。清除小红圈中数字,小红圈中数字为0,小红圈才会消除。
            [UIApplication sharedApplication].applicationIconBadgeNumber = badge;
            NSDictionary *pushInfo = [launchOptions objectForKey:@"UIApplicationLaunchOptionsRemoteNotificationKey"];



            UIAlertView *alert = [[UIAlertView alloc] initWithTitle:@"提示" message:[NSString stringWithFormat:@"%@,您可以在消息设置那里进行查看",[[pushInfo objectForKey:@"aps"] objectForKey:@"alert"]] delegate:nil cancelButtonTitle:@"确定" otherButtonTitles:nil, nil];
            [alert show];

        }
    }

    [UIApplication sharedApplication].applicationIconBadgeNumber = 0;
    return YES;
}

/**
 *  当app出于前台的时候,接收到消息,会调用下面这个方法.
 */

- (void)application:(UIApplication *)application didReceiveRemoteNotification:(NSDictionary *)userInfo fetchCompletionHandler:(void (^)(UIBackgroundFetchResult))completionHandler
{

    NSLog(@"%s", __func__);
    self.window.rootViewController.view.backgroundColor = [UIColor greenColor];

}
/**
 *  当app在运行中但是出于后台的时候,点击通知栏的通知,app从后台回到前台会触发下面这个方法而不是上面这个
 *  虽说该方法提示已经过期,这是不是iOS10的一个bug呢?
 */

- (void)application:(UIApplication *)application didReceiveRemoteNotification:(NSDictionary *)userInfo
{
    NSLog(@"%s", __func__);
    self.window.rootViewController.view.backgroundColor = [UIColor greenColor];

}

iOS10下app运行中,但是处于后台,点击通知问题_第1张图片

你可能感兴趣的:(iOS)