美文网首页
iOS推送API演变过程

iOS推送API演变过程

作者: 流年划过颜夕 | 来源:发表于2019-10-23 11:06 被阅读0次

    iOS分为本地推送和远程推送。

    首先是注册推送,演变过程如下:

    //支持iOS8以下
       [application registerForRemoteNotificationTypes:UIRemoteNotificationTypeBadge | UIRemoteNotificationTypeAlert | UIRemoteNotificationTypeSound];
    
    //支持iOS8以上
       [application registerUserNotificationSettings:[UIUserNotificationSettings settingsForTypes:UIUserNotificationTypeAlert | UIUserNotificationTypeSound | UIUserNotificationTypeBadge categories:nil]];
    
    //支持iOS10以上(但需要引入框架UserNotifications)
        UNUserNotificationCenter *center = [UNUserNotificationCenter currentNotificationCenter];
        center.delegate = self;
        [center requestAuthorizationWithOptions:(UNAuthorizationOptionAlert | UNAuthorizationOptionBadge | UNAuthorizationOptionSound) completionHandler:^(BOOL granted, NSError * _Nullable error) {}
    

    接收:
    最早分推送接收是单独分开接收的
    本地推送:

    - (void)application:(UIApplication *)application didReceiveLocalNotification:(UILocalNotification *)notification{}
    

    和远程推送:

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

    但iOS10以后所有通知可以通过UNUserNotificationCenter来管理,包括远程通知和本地通知,而且方法调用机制也有变化,把以前一个接受远程推送和本地推送的接口合并为了一个,但是在统一成一个的前提下,又把调用过程拆分为了两种类型,通过代理来管理:

    第一种为当app处于前台时,自动调用:

    - (void)userNotificationCenter:(UNUserNotificationCenter *)center willPresentNotification:(UNNotification *)notification withCompletionHandler:(void (^)(UNNotificationPresentationOptions))completionHandler {
        //应用在前台收到通知
        NSLog(@"========%@", notification);
        //如果需要在应用在前台也展示通知
    completionHandler(UNNotificationPresentationOptionBadge|UNNotificationPresentationOptionSound|UNNotificationPresentationOptionAlert);
    }
    

    第二种为当app没有处于前台时,点击触发进入app,会调用:

    - (void)userNotificationCenter:(UNUserNotificationCenter *)center didReceiveNotificationResponse:(UNNotificationResponse *)response withCompletionHandler:(void (^)())completionHandler {
        //点击通知进入应用
        NSLog(@"response:%@", response);
    }
    

    相关文章

      网友评论

          本文标题:iOS推送API演变过程

          本文链接:https://www.haomeiwen.com/subject/omzfmctx.html