Objective-C 推送通知

系统 iOS 10.x
本文简单记录远程通知,更多细节看心情整理


1.注册通知

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {
    if (iOS系统大于10.0) {
        UNUserNotificationCenter *center = [UNUserNotificationCenter currentNotificationCenter];
        center.delegate = self;
        [center requestAuthorizationWithOptions:(UNAuthorizationOptionBadge | UNAuthorizationOptionSound | UNAuthorizationOptionAlert) completionHandler:^(BOOL granted, NSError * _Nullable error) {
            if (granted) {
                NSLog(@"register success");
            } else {
                NSLog(@"register failure");
            }
        }];
    } else {
        UIUserNotificationSettings *setting = [UIUserNotificationSettings settingsForTypes:(UIUserNotificationTypeBadge | UIUserNotificationTypeSound | UIUserNotificationTypeAlert) categories:nil];
        [[UIApplication sharedApplication] registerUserNotificationSettings:setting];

    }
    [[UIApplication sharedApplication] registerForRemoteNotifications];

    return YES;
}

2.处理token

- (void)application:(UIApplication *)application didRegisterForRemoteNotificationsWithDeviceToken:(NSData *)deviceToken {
    // 自定义处理token
    NSLog(@"%@",deviceToken);
}

3.接收远程通知

/**
 iOS3.0 ~ 10.0

 前台状态下,当接收到远程通知
 点击通知
 完全退出情况下,点击通知,不会执行
 */
- (void)application:(UIApplication *)application didReceiveRemoteNotification:(NSDictionary *)userInfo {

    double version = [[[UIDevice currentDevice] systemVersion] doubleValue];
    if (version < 10.0) {
        NSLog(@"收到远程通知");
        self.window.rootViewController.view.backgroundColor = [UIColor redColor];
    }
}

/*
 iOS7.0 ~ 10.0

 如果实现了该方法,则不执行application:(UIApplication *)application didReceiveRemoteNotification:(NSDictionary *)userInfo

 前台状态下,当接收到远程通知
 点击通知
 完全退出情况下,点击通知,也会执行

 只要接收到了通知,不管当前APP的状态,不管后台,还是锁屏,都直接执行这个方法
 要求:
 1.必须勾选后台模式Remote Notification
 2.告诉系统是否有新的内容更新(执行完成代码块)
 3.设置发送通知的格式("content-available":"xxx")
 {
 "aps" : {
 "alert":"This is some fancy message.",
 "badge":1,
 "content-available":"xxx"
 }
 }

 调用系统回调代码块的作用
 1.系统会估量App消耗的电量,并根据传递的UIBackgroundFetchResult参数记录新数据是否可用
 2.调用完成的处理代码时,应用的界面缩略图会自动更新

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

    double version = [[[UIDevice currentDevice] systemVersion] doubleValue];
    if (version < 10.0) {
        NSLog(@"收到远程通知-----2");
        self.window.rootViewController.view.backgroundColor = [UIColor blueColor];
    }

    completionHandler(UIBackgroundFetchResultNewData);
}

/*
 前台状态下
 完全退出,点击通知,不会执行这个方法
 */
- (void)userNotificationCenter:(UNUserNotificationCenter *)center willPresentNotification:(UNNotification *)notification withCompletionHandler:(void (^)(UNNotificationPresentationOptions))completionHandler {

    if([notification.request.trigger isKindOfClass:[UNPushNotificationTrigger class]]) {
        NSLog(@"收到远程通知-----3.remote");
        self.window.rootViewController.view.backgroundColor = [UIColor yellowColor];
    }
    else {
        NSLog(@"收到本地通知-----3.local");
        self.window.rootViewController.view.backgroundColor = [UIColor orangeColor];
    }

    // UNNotificationPresentationOptionAlert 在前台状态下会出现通知栏
    completionHandler(UNNotificationPresentationOptionSound | UNNotificationPresentationOptionBadge | UNNotificationPresentationOptionAlert);
}

/*
 点击通知
 完全退出,点击通知,也会执行这个方法
 */
- (void)userNotificationCenter:(UNUserNotificationCenter *)center didReceiveNotificationResponse:(UNNotificationResponse *)response withCompletionHandler:(void(^)())completionHandler {

    if([response.notification.request.trigger isKindOfClass:[UNPushNotificationTrigger class]]) {
        NSLog(@"收到远程通知-----4.remote");
        self.window.rootViewController.view.backgroundColor = [UIColor purpleColor];
    }
    else {
        NSLog(@"收到本地通知-----4.local");
        self.window.rootViewController.view.backgroundColor = [UIColor greenColor];
    }
    completionHandler();
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值