澳门威利斯人_威利斯人娱乐「手机版」

来自 威利斯人娱乐 2020-03-25 17:53 的文章
当前位置: 澳门威利斯人 > 威利斯人娱乐 > 正文

秘籍总结,通知推送

前言

事前说会独自收拾新闻文告的剧情,然则因为工的远非更新小说,违背了和谐的读书的最初的愿景。因为互连网一定要有风险意识,有可能眼一睁,大家就out丢了事情。

图片 1图表来自网络.jpeg

“狼,他从没欧洲狮山兽之君强健,也从极小象那高大的身躯,但起码:作者向来没在班子见到过他们的身影。”

兴许独有狼在平素奔走,那是自家直接中意它的来由,要像狼同样不断奔走,技能存活!

看完楼主装的一手好X,笔者来计算一小点您都晓得的打招呼上边的知识点!

图片 2楼主装X,打他.jpg

1、UserNotifications

  • 公告是 App 用来和客商调换的一种方式,特别是当 App 并从未在前台运营的时候。文告,正如它的称呼所重申的,被用作向客商‘布告’二个平地风波,大概唯有向客户提醒一条首要新闻。简来讲之,布告在升迁类型的 App 此中丰裕有用,以至在局地其余类型的 App 个中也是那样。例如,当客户进入二个钦定区域(那是 iOS8 的新性情),一个下载职命令负担功,只怕当恋人给你发送一条新闻的时候,一条通知就足以被出示出来。不论怎么样,通告的指标正是获取顾客的珍重,然后他们就能够管理通报了。

  • 从 iOS8 初叶,本质上的话有三种推送公告 Local Notifications(本地推送) 和 Remote Notifications(远程推送)。

    • 地方推送文告(Local Notifications):由开荒者定义,App 触发,触发的岁月是被先行安顿好的。
      • 地址文告(Location Notifications),iOS8 引进,可是她们只会在客商一个特定的地理或然 iBeacon 区域时,才会被触发,尽管大家看不到什么细节。
    • 长间隔推送布告(Remote Notifications):这种情景下,通告能够被分为四个项目。
      • 推送公告(The push notifications),棉被和衣服务器初阶化,然后经过 APNS,最后达到客商设备。
      • 沉默不语文告(The silent notifications),其实也是推送文告,可是她们并从未被出示给客户,而是立即被 App 拍卖以倡导某项任务,最后当一切都成功时,叁个本地通告被展现以提示客户。

  • iOS 10 司令员事情发生前横三竖四的推送布告统百分之十 UserNotifications.framework 来凑集处理和应用公告功用,还扩张部分实用的效能——撤回单条文告、更新已显得文告、中途修改文告内容、在通告中展现多媒体能源、自定义 UI 等功用,功效确实强盛。

  • 在客商常常生活中会有很各个景况须要布告,比方:信息提示、准期吃药、定时体格检查、到达某些地点提示客户等等,这一个成效在 UserNotifications 中都提供了相应的接口。

    图片 3

  • Local Notifications(本地推送)

    图片 4

    • App 本地创制公告,参与到系统的 Schedule(布置表)里,纵然触发器条件达到规定的标定时会推送相应的音讯内容。
  • Remote Notifications(远程推送)

    图片 5

    • 图中,Provider 是指有个别 BlackBerry 软件的 Push 服务器。APNS 是 Apple Push Notification 瑟维斯(Apple Push 服务器)的缩写,是苹果的服务器。

    • 上海体育地方能够分成多个阶段:

      • 先是等第:APNS Pusher 应用程序把要发送的音讯、目标 红米的标记打包,发给 APNS。
      • 第二品级:APNS 在自家的已注册 Push 服务的 iPhone列表中,查找有对应标志的 Samsung,并把消息发到 小米。
      • 其三等第:华为 把发来的音讯传递给相应的应用程序, 何况遵照设定弹出 Push 公告。
    • 长途推送创制流程

      图片 6

      • 从上海体育场地大家得以看看:

        • 首先是应用程序注册信息推送。
        • iOS 跟 APNS Server 要 deviceToken。应用程序接收deviceToken。
        • 应用程序将 deviceToken 发送给 Push 服务器端程序。
        • Push 服务器端程序向 APNS 发送推送音信。
        • APNS 将推送音讯发送给 One plus 应用程序。

push的第一专门的学业流程:

背景

iOS10 新个性一出,各样大神就曾经商讨新特色能给场景智能化所带给的益处(唉,可惜作者只是一个小白)。作者也被陈设适配iOS10的推送职业!

Apple 表示那是 iOS 有史以来最大的提拔(our biggest release yet卡塔尔国,特别智能开放的 Siri 、加强应用对 3D Touch 援救、 Home基特、电话拦截及全新设计的通报等等…

iOS 10 军长事情发生在此以前语无伦次的推送布告统10%UserNotifications.framework 来集中管理和选择文告功能,还扩大部分实用的功效——撤回单条文告、更新已显得文告、中途修改通告内容、在文告中显得多媒体财富、自定义UI等效果,功能确实强盛!

正文首借使针对iOS 10的音信通告做牵线,所以重重代码未有对iOS 10事情发生前做增多适配。

2、本地推送

  • 本土推送主要流程:

    • 1 申请本地推送
    • 2 创设二个触发器(trigger)
    • 3 成立推送的开始和结果(UNMutableNotificationContent)
    • 4 成立推送央求(UNNotificationRequest)
    • 5 推送供给增多到推送管理为主(UNUserNotificationCenter)中

图片 7

基本原理

iOS推送分为Local Notifications 和 Remote Notifications(原理图来源于网络,如有侵害权益请报告,小编会加多来源,小编怕我赔不起)

图片 8Local Notifications.png

  1. App本地成立文告,参与到系统的Schedule里,
  2. 设若触发器条件达到规定的标依期会推送相应的音讯内容

图片 9Remote Notifications1.jpg

图中,Provider是指某些金立软件的Push服务器,那篇小说我将利用自家花了12块大洋买的 APNS Pusher 作为本人的推送源。

APNS 是Apple Push Notification Service(Apple Push服务器)的缩写,是苹果的服务器。

上海体育地方可以分为五个级次:

首先等第:APNS Pusher应用程序把要发送的音信、指标One plus的标志打包,发给APNS。

其次等第:APNS在自己的已注册Push服务的三星列表中,查找有照顾标志的One plus,并把音讯发到一加。

其三阶段:HTC把发来的音信传递给相应的应用程序, 並且依照设定弹出Push文告。

图片 10Remote Notifications2.jpeg

从上图大家可以观望:

  1. 首先是应用程序注册新闻推送。

  2. IOS跟APNS Server要deviceToken。应用程序选取deviceToken。

  3. 应用程序将deviceToken发送给PUSH服务端程序。

  4. 服务端程序向APNS服务发送消息。

  5. APNS服务将消息发送给一加应用程序。

2.1 申请本地推送

  • 1、导入头文件,且要依照协议。这里供给当心,包罗头文件我们最棒写成这种格局,防止低版本找不根本文件现身难点。

        // 包含头文件
        #ifdef NSFoundationVersionNumber_iOS_9_x_Max
        #import <UserNotifications/UserNotifications.h>
        #endif
    
        // 遵守协议
        <UNUserNotificationCenterDelegate>
    
  • 2、在 application:didFinishLaunchingWithOptions: 中申请文告权限。

        - (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {
    
            UNUserNotificationCenter *center = [UNUserNotificationCenter currentNotificationCenter];
    
            // 设置代理,必须写代理,不然无法监听通知的接收与点击事件
            center.delegate = self;
    
            // 判断是否已申请通知权限
            [center getNotificationSettingsWithCompletionHandler:^(UNNotificationSettings * _Nonnull settings) {
    
                if (settings.authorizationStatus == UNAuthorizationStatusNotDetermined ||
                    settings.authorizationStatus == UNAuthorizationStatusDenied) {
    
                    // 申请通知权限
                    [center requestAuthorizationWithOptions:(UNAuthorizationOptionBadge |
                                                             UNAuthorizationOptionSound |
                                                             UNAuthorizationOptionAlert )
                                          completionHandler:^(BOOL granted, NSError * _Nullable error) {
    
                        if (!error && granted) {
    
                            // 用户点击允许
                            NSLog(@"注册成功");
                        } else {
    
                            // 用户点击不允许
                            NSLog(@"注册失败");
                        }
                    }];
                }
            }];
    
            return YES;
        }
    
    • 地方供给留意:

          1. 必须写代理,不然无法监听通知的接收与点击事件
              center.delegate = self;
      
          2. 之前注册推送服务,用户点击了同意还是不同意,以及用户之后又做了怎样的更改我们都无从得知,现在 apple 开放了这个 API,我们可以直接获取到用户的设定信息了。
             注意 UNNotificationSettings 是只读对象哦,不能直接修改!只能通过以下方式获取
      
              [center getNotificationSettingsWithCompletionHandler:^(UNNotificationSettings * _Nonnull settings) {
                  NSLog(@"%@",settings);
              }];
      
  • iOS设备连接网络后,会自动与APNS保持相仿TCP的长连接,等待APNS推送音信。
  • 应用启动时会登记新闻推送,并且会从APNS获取到注册的独一设备标志deviceToken,大家要把上传给应用的服务器。

骨干配置和骨干措施

假设只是简短的本土推送,跳过1 2 步骤,直接到3

1、 倘使您的App有远端推送的话,那您要求开垦者账号的,供给新建多个应和你bundle的push 证书。证书这一块笔者就背着了,假设针对证书有何样难点得以给本人留言,笔者会单独把证件相关的知识点收拾起来!若是您未曾账号,可以到某宝买个,很便利。2、 Capabilities中开拓Push Notifications 按钮在XCode7中这里的按键不张开,推送也是足以不荒谬使用的,不过在XCode8中,这里的按钮必需求开垦,不然会报错:

Error Domain=NSCocoaErrorDomain Code=3000 "未找到应用程序的“aps-environment”的授权字符串" UserInfo={NSLocalizedDescription=未找到应用程序的“aps-environment”的授权字符串}

开拓后会自动在项目里生成entitlements文件。

图片 11Push Notification开关.png图片 12entitlements文件.png

3、 推送的登记

第一步: 导入 #import <UserNotifications/UserNotifications.h>且要遵从<UNUserNotificationCenterDelegate>的合同,在Appdelegate.m中。这里必要留意,大家最佳写成这种情势(防止低版本找不干净文件现身难点)

#ifdef NSFoundationVersionNumber_iOS_9_x_Max#import <UserNotifications/UserNotifications.h>#endif

其次步:大家要求在- application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions中注册布告,代码如下

 - application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions { [self replyPushNotificationAuthorization:application]; return YES;}#pragma mark - 申请通知权限// 申请通知权限- replyPushNotificationAuthorization:(UIApplication *)application{ if (IOS10_OR_LATER) { //iOS 10 later UNUserNotificationCenter *center = [UNUserNotificationCenter currentNotificationCenter]; //必须写代理,不然无法监听通知的接收与点击事件 center.delegate = self; [center requestAuthorizationWithOptions:(UNAuthorizationOptionBadge | UNAuthorizationOptionSound | UNAuthorizationOptionAlert) completionHandler:^(BOOL granted, NSError * _Nullable error) { if (!error && granted) { //用户点击允许 NSLog; }else{ //用户点击不允许 NSLog; } }]; // 可以通过 getNotificationSettingsWithCompletionHandler 获取权限设置 //之前注册推送服务,用户点击了同意还是不同意,以及用户之后又做了怎样的更改我们都无从得知,现在 apple 开放了这个 API,我们可以直接获取到用户的设定信息了。注意UNNotificationSettings是只读对象哦,不能直接修改! [center getNotificationSettingsWithCompletionHandler:^(UNNotificationSettings * _Nonnull settings) { NSLog(@"========%@",settings); }]; }else if (IOS8_OR_LATER){ //iOS 8 - iOS 10系统 UIUserNotificationSettings *settings = [UIUserNotificationSettings settingsForTypes:UIUserNotificationTypeAlert | UIUserNotificationTypeBadge | UIUserNotificationTypeSound categories:nil]; [application registerUserNotificationSettings:settings]; }else{ //iOS 8.0系统以下 [application registerForRemoteNotificationTypes:UIRemoteNotificationTypeBadge | UIRemoteNotificationTypeAlert | UIRemoteNotificationTypeSound]; } //注册远端消息通知获取device token [application registerForRemoteNotifications];}

地方需求当心:

1. 必须写代理,不然无法监听通知的接收与点击事件 center.delegate = self;下面是我在项目里定义的宏#define IOS10_OR_LATER ([[[UIDevice currentDevice] systemVersion] floatValue] >= 10.0)#define IOS9_OR_LATER ([[[UIDevice currentDevice] systemVersion] floatValue] >= 9.0)#define IOS8_OR_LATER ([[[UIDevice currentDevice] systemVersion] floatValue] >= 8.0)#define IOS7_OR_LATER ([[[UIDevice currentDevice] systemVersion] floatValue] >= 7.0)2. 之前注册推送服务,用户点击了同意还是不同意,以及用户之后又做了怎样的更改我们都无从得知,现在 apple 开放了这个 API,我们可以直接获取到用户的设定信息了。注意UNNotificationSettings是只读对象哦,不能直接修改!只能通过以下方式获取 [center getNotificationSettingsWithCompletionHandler:^(UNNotificationSettings * _Nonnull settings) { NSLog(@"========%@",settings); }];打印信息如下:========<UNNotificationSettings: 0x1740887f0; authorizationStatus: Authorized, notificationCenterSetting: Enabled, soundSetting: Enabled, badgeSetting: Enabled, lockScreenSetting: Enabled, alertSetting: NotSupported, carPlaySetting: Enabled, alertStyle: Banner>

4、 远端推送要求得到器械的Device Token的艺术是还未有变的,代码如下

#pragma mark - 获取device Token//获取DeviceToken成功- application:(UIApplication *)application didRegisterForRemoteNotificationsWithDeviceToken:deviceToken{ //解析NSData获取字符串 //我看网上这部分直接使用下面方法转换为string,你会得到一个nil //错误写法 //NSString *string = [[NSString alloc] initWithData:deviceToken encoding:NSUTF8StringEncoding]; //正确写法 NSString *deviceString = [[deviceToken description] stringByTrimmingCharactersInSet:[NSCharacterSet characterSetWithCharactersInString:@"<>"]]; deviceString = [deviceString stringByReplacingOccurrencesOfString:@" " withString:@""]; NSLog(@"deviceToken===========%@",deviceString);}//获取DeviceToken失败- application:(UIApplication *)application didFailToRegisterForRemoteNotificationsWithError:(NSError *)error{ NSLog(@"[DeviceToken Error]:%@n",error.description);}

5、这一步吊了,那是iOS 10连串更新时,苹果给了我们2个代理方法来管理通报的吸收接纳和点击事件,那多少个艺术在<UNUserNotificationCenterDelegate>的磋商业中学,大家能够查看下。

@protocol UNUserNotificationCenterDelegate <NSObject>@optional// The method will be called on the delegate only if the application is in the foreground. If the method is not implemented or the handler is not called in a timely manner then the notification will not be presented. The application can choose to have the notification presented as a sound, badge, alert and/or in the notification list. This decision should be based on whether the information in the notification is otherwise visible to the user.- userNotificationCenter:(UNUserNotificationCenter *)center willPresentNotification:(UNNotification *)notification withCompletionHandler:(UNNotificationPresentationOptions options))completionHandler __IOS_AVAILABLE __TVOS_AVAILABLE __WATCHOS_AVAILABLE;// The method will be called on the delegate when the user responded to the notification by opening the application, dismissing the notification or choosing a UNNotificationAction. The delegate must be set before the application returns from applicationDidFinishLaunching:.- userNotificationCenter:(UNUserNotificationCenter *)center didReceiveNotificationResponse:(UNNotificationResponse *)response withCompletionHandler:)completionHandler __IOS_AVAILABLE __WATCHOS_AVAILABLE __TVOS_PROHIBITED;@end

别的,苹果把地方文告跟远程文告融为一炉。区分本地公告跟远程布告的类是UNPushNotificationTrigger.h类中,UNPushNotificationTrigger的种类是新增的,通过它,我们能够获得一些通报的触发条件 ,解释如下:

  1. UNPushNotificationTrigger 远程推送的文告类型
  2. UN提姆eIntervalNotificationTrigger 一准时期过后,重复恐怕不重复推送文告。我们能够设置timeInterval和repeats。
  3. UNCalendarNotificationTrigger 一定日期以往,重复恐怕不重复推送布告例如,你每天8点推送三个文告,只要dateComponents为8,若是你想天天8点都推送那一个布告,只要repeats为YES就足以了。
  4. UNLocationNotificationTrigger 地理地点的一种通告,当客户踏入或离开一个地理区域来布告。未来先建议来,前面笔者会一一代码演示出每一个用法。还是回到五个很吊的代办方法吗
#pragma mark - iOS10 收到通知 UNUserNotificationCenterDelegate//App处于前台接收通知时- userNotificationCenter:(UNUserNotificationCenter *)center willPresentNotification:(UNNotification *)notification withCompletionHandler:(UNNotificationPresentationOptions))completionHandler{ //收到推送的请求 UNNotificationRequest *request = notification.request; //收到推送的内容 UNNotificationContent *content = request.content; //收到用户的基本信息 NSDictionary *userInfo = content.userInfo; //收到推送消息的角标 NSNumber *badge = content.badge; //收到推送消息body NSString *body = content.body; //推送消息的声音 UNNotificationSound *sound = content.sound; // 推送消息的副标题 NSString *subtitle = content.subtitle; // 推送消息的标题 NSString *title = content.title; if([notification.request.trigger isKindOfClass:[UNPushNotificationTrigger class]]) { //此处省略一万行需求代码。。。。。。 NSLog(@"iOS10 收到远程通知:%@",userInfo); }else { // 判断为本地通知 //此处省略一万行需求代码。。。。。。 NSLog(@"iOS10 收到本地通知:{\\nbody:%@,\\ntitle:%@,\\nsubtitle:%@,\\nbadge:%@,\\nsound:%@,\\nuserInfo:%@\\n}",body,title,subtitle,badge,sound,userInfo); } // 需要执行这个方法,选择是否提醒用户,有Badge、Sound、Alert三种类型可以设置 completionHandler(UNNotificationPresentationOptionBadge| UNNotificationPresentationOptionSound| UNNotificationPresentationOptionAlert); } //App通知的点击事件- userNotificationCenter:(UNUserNotificationCenter *)center didReceiveNotificationResponse:(UNNotificationResponse *)response withCompletionHandler:completionHandler{ //收到推送的请求 UNNotificationRequest *request = response.notification.request; //收到推送的内容 UNNotificationContent *content = request.content; //收到用户的基本信息 NSDictionary *userInfo = content.userInfo; //收到推送消息的角标 NSNumber *badge = content.badge; //收到推送消息body NSString *body = content.body; //推送消息的声音 UNNotificationSound *sound = content.sound; // 推送消息的副标题 NSString *subtitle = content.subtitle; // 推送消息的标题 NSString *title = content.title; if([response.notification.request.trigger isKindOfClass:[UNPushNotificationTrigger class]]) { NSLog(@"iOS10 收到远程通知:%@",userInfo); //此处省略一万行需求代码。。。。。。 }else { // 判断为本地通知 //此处省略一万行需求代码。。。。。。 NSLog(@"iOS10 收到本地通知:{\\nbody:%@,\\ntitle:%@,\\nsubtitle:%@,\\nbadge:%@,\\nsound:%@,\\nuserInfo:%@\\n}",body,title,subtitle,badge,sound,userInfo); } //2016-09-27 14:42:16.353978 UserNotificationsDemo[1765:800117] Warning: UNUserNotificationCenter delegate received call to -userNotificationCenter:didReceiveNotificationResponse:withCompletionHandler: but the completion handler was never called. completionHandler(); // 系统要求执行这个方法}

急需介怀的:

1.下面这个代理方法,只会是app处于前台状态 前台状态 and 前台状态下才会走,后台模式下是不会走这里的- userNotificationCenter:(UNUserNotificationCenter *)center willPresentNotification:(UNNotification *)notification withCompletionHandler:(UNNotificationPresentationOptions))completionHandler2.下面这个代理方法,只会是用户点击消息才会触发,如果使用户长按、弹出Action页面等并不会触发。点击Action的时候会触发!- userNotificationCenter:(UNUserNotificationCenter *)center didReceiveNotificationResponse:(UNNotificationResponse *)response withCompletionHandler:completionHandler3.点击代理最后需要执行:completionHandler(); // 系统要求执行这个方法不然会报:2016-09-27 14:42:16.353978 UserNotificationsDemo[1765:800117] Warning: UNUserNotificationCenter delegate received call to -userNotificationCenter:didReceiveNotificationResponse:withCompletionHandler: but the completion handler was never called.4.不管前台后台状态下。推送消息的横幅都可以展示出来!后台状态不用说,前台时需要在前台代理方法中设置 ,设置如下:// 需要执行这个方法,选择是否提醒用户,有Badge、Sound、Alert三种类型可以设置completionHandler(UNNotificationPresentationOptionBadge| UNNotificationPresentationOptionSound| UNNotificationPresentationOptionAlert);

6、 iOS 10事情发生在此以前收到文告的相称方法

#pragma mark -iOS 10之前收到通知- application:(UIApplication *)application didReceiveRemoteNotification:(NSDictionary *)userInfo { NSLog(@"iOS6及以下系统,收到通知:%@", userInfo); //此处省略一万行需求代码。。。。。。}- application:(UIApplication *)application didReceiveRemoteNotification:(NSDictionary *)userInfo fetchCompletionHandler:(UIBackgroundFetchResult))completionHandler { NSLog(@"iOS7及以上系统,收到通知:%@", userInfo); completionHandler(UIBackgroundFetchResultNewData); //此处省略一万行需求代码。。。。。。}

段结:是或不是感到就停止了?NO NO NO(你以为离开了幻境,其实才刚巧走入幻境!)下面的牵线了基本原理、基本配备以致着力方法求证,以后做完这一个干活儿,大家的求学才刚刚初始!未来运气、地利、人和、能够起来上面推送coding的读书和测量检验了。

在顾客平日生活中会有很两种情景要求通告,举例:音讯提醒、依期吃药、依期体格检查、到达有个别地点提示顾客等等,这一个效能在 UserNotifications 中都提供了对应的接口。

图片 13图片来自网络.jpeg

大家先学会基本的本领轻巧的推送,前面在上学进级定制推送,最终看看能否高等推送(飞不飞起来看个人了,小编是飞不起来):

2.2 选择处理推送信息

  • iOS 10 系统改善时,苹果给了大家 2 个代理方法来管理通报的吸取和点击事件。

        @protocol UNUserNotificationCenterDelegate
    
        @optional
    
        // The method will be called on the delegate only if the application is in the foreground. If the method 
        is not implemented or the handler is not called in a timely manner then the notification will not be 
        presented. The application can choose to have the notification presented as a sound, badge, alert and/or 
        in the notification list. This decision should be based on whether the information in the notification 
        is otherwise visible to the user.
    
        - (void)userNotificationCenter:(UNUserNotificationCenter *)center 
               willPresentNotification:(UNNotification *)notification 
                 withCompletionHandler:(void (^)(UNNotificationPresentationOptions options))completionHandler 
                 __IOS_AVAILABLE(10.0) __TVOS_AVAILABLE(10.0) __WATCHOS_AVAILABLE(3.0);
    
        // The method will be called on the delegate when the user responded to the notification by opening the 
        application, dismissing the notification or choosing a UNNotificationAction. The delegate must be set 
        before the application returns from applicationDidFinishLaunching:.
    
        - (void)userNotificationCenter:(UNUserNotificationCenter *)center 
                didReceiveNotificationResponse:(UNNotificationResponse *)response 
                         withCompletionHandler:(void(^)())completionHandler 
                         __IOS_AVAILABLE(10.0) __WATCHOS_AVAILABLE(3.0) __TVOS_PROHIBITED;
    
        @end
    
  • 除此以外,苹果把本地文告跟远程通告融为一炉。区分本地通知跟远程通告的类是 UNPushNotificationTrigger.h 类中,UNPushNotificationTrigger 的项目是新扩大的,通过它,我们得以获取一些公告的触及条件 ,解释如下:

    • UNPushNotificationTrigger :(远程通告)远程推送的公告类型。
    • UNTimeIntervalNotificationTrigger :(本地公告)一按期间现在,重复或然不另行推送通告。我们得以安装 timeInterval(时间距离)和 repeats(是还是不是再一次)。
    • UNCalendarNotificationTrigger :(本地布告)一定日期以往,重复或许不重复推送文告 举个例子,你每天8 点推送多少个公告,只要 dateComponents 为 8,假若您想每一日 8 点都推送那些布告,只要 repeats 为 YES 就能够了。
    • UNLocationNotificationTrigger :(本地告示)地理地点的一种通告,当顾客踏向或离开八个地理区域来打招呼。
  • 要求专一的

        1. 下面这个代理方法,只会是 app 处于前台状态下才会走,后台模式下是不会走这里的。
            - (void)userNotificationCenter:(UNUserNotificationCenter *)center 
                   willPresentNotification:(UNNotification *)notification 
                     withCompletionHandler:(void (^)(UNNotificationPresentationOptions))completionHandler
    
        2. 下面这个代理方法,用户点击消息时会触发,点击 Action 按钮时也会触发。点击消息时默认会打开 App。
            - (void)userNotificationCenter:(UNUserNotificationCenter *)center 
                   didReceiveNotificationResponse:(UNNotificationResponse *)response 
                            withCompletionHandler:(void (^)())completionHandler
    
        3. 不管前台后台状态下,推送消息的横幅都可以展示出来。后台状态不用说,前台时需要在前台代理方法中设置,选择是否提醒用户。
            completionHandler(UNNotificationPresentationOptionBadge 
                            | UNNotificationPresentationOptionSound
                            | UNNotificationPresentationOptionAlert);
    
        4. 点击代理最后需要执行:completionHandler(); 不然会报错。
            2016-09-27 14:42:16.353978 UserNotificationsDemo[1765:800117] Warning: UNUserNotificationCenter delegate 
            received call to -userNotificationCenter:didReceiveNotificationResponse:withCompletionHandler: but the 
            completion handler was never called.
    
  • 收纳管理地方和长间距推送音讯

        // AppDelegate.m
    
        // UNUserNotificationCenterDelegate 协议方法,App 处于前台接收通知
        - (void)userNotificationCenter:(UNUserNotificationCenter *)center 
               willPresentNotification:(UNNotification *)notification 
                 withCompletionHandler:(void (^)(UNNotificationPresentationOptions))completionHandler{
    
            // 收到推送的请求
            UNNotificationRequest *request = notification.request;
    
            // 收到推送的内容
            UNNotificationContent *content = request.content;
    
            // 收到用户的基本信息
            NSDictionary *userInfo = content.userInfo;
    
            // 收到推送消息的角标
            NSNumber *badge = content.badge;
    
            // 收到推送消息 body
            NSString *body = content.body;
    
            // 推送消息的声音
            UNNotificationSound *sound = content.sound;
    
            // 推送消息的副标题
            NSString *subtitle = content.subtitle;
    
            // 推送消息的标题
            NSString *title = content.title;
    
            if ([notification.request.trigger isKindOfClass:[UNPushNotificationTrigger class]]) {
    
                // 收到远程推送消息
                NSLog(@"收到远程推送消息: %@", userInfo);
    
            } else {
    
                // 收到本地推送消息
                NSLog(@"收到本地推送消息: %@", userInfo);
            }
    
            // 需要执行这个方法,选择是否提醒用户,有 Badge、Sound、Alert 三种类型可以设置
            completionHandler(UNNotificationPresentationOptionBadge 
                            | UNNotificationPresentationOptionSound 
                            | UNNotificationPresentationOptionAlert);
        }
    
  • 拍卖推送新闻点击事件

        // AppDelegate.m
    
        // UNUserNotificationCenterDelegate 协议方法
        - (void)userNotificationCenter:(UNUserNotificationCenter *)center 
                didReceiveNotificationResponse:(UNNotificationResponse *)response 
                         withCompletionHandler:(void (^)())completionHandler{
    
            // 收到推送的请求
            UNNotificationRequest *request = response.notification.request;
    
            // 收到推送的内容
            UNNotificationContent *content = request.content;
    
            // 收到用户的基本信息
            NSDictionary *userInfo = content.userInfo;
    
            // 收到推送消息的角标
            NSNumber *badge = content.badge;
    
            // 收到推送消息 body
            NSString *body = content.body;
    
            // 推送消息的声音
            UNNotificationSound *sound = content.sound;
    
            // 推送消息的副标题
            NSString *subtitle = content.subtitle;
    
            // 推送消息的标题
            NSString *title = content.title;
    
            if ([response.notification.request.trigger isKindOfClass:[UNPushNotificationTrigger class]]) {
    
                // 远程推送消息
                NSLog(@"点击远程推送消息: %@", userInfo);
    
            } else {
    
                // 本地推送消息
                NSLog(@"点击本地推送消息: %@", userInfo);
            }
    
            // 系统要求执行这个方法
            completionHandler(); 
        }
    

图片 14

基本Local Notifications 和 Remote Notifications

一、 基本的地面推送

地面推送生成主要流程便是:

1. 创建一个触发器2. 创建推送的内容(UNMutableNotificationContent)3. 创建推送请求(UNNotificationRequest)4. 推送请求添加到推送管理中心(UNUserNotificationCenter)中

1、新功能trigger能够在特定条件触发,有三类:UNTimeIntervalNotificationTrigger、UNCalendarNotificationTrigger、UNLocationNotificationTrigger

1.1、 UNTimeIntervalNotificationTrigger:一段时间后触发(准期推送

//timeInterval:单位为秒 repeats:是否循环提醒//50s后提醒UNTimeIntervalNotificationTrigger *trigger1 = [UNTimeIntervalNotificationTrigger triggerWithTimeInterval:50 repeats:NO];

1.2 UNCalendarNotificationTrigger :调用 (instancetype)triggerWithDateMatchingComponents:(NSDateComponents *)dateComponents repeats:repeats;实行挂号;时间点音讯用 NSDateComponents.(依期推送

//在每周一的14点3分提醒NSDateComponents *components = [[NSDateComponents alloc] init]; components.weekday = 2;components.hour = 16;components.minute = 3; // components 日期UNCalendarNotificationTrigger *calendarTrigger = [UNCalendarNotificationTrigger triggerWithDateMatchingComponents:components repeats:YES];

1.3、UNLocationNotificationTrigger:调用 (instancetype)triggerWithRegion:(CLRegion *)region repeats:repeats;举行注册,地区音讯运用CLRegion的子类CLCircularRegion,能够布置region属性 notifyOnEntrynotifyOnExit,是在步向地面、从地区出来或许两个都要的时候进行通报,那么些测量试验进程特意从商号跑到家时刻关切手提式有线话机有推送嘛,果然是有的(一定推送

 //首先得导入#import <CoreLocation/CoreLocation.h>,不然会regin创建有问题。 // 创建位置信息 CLLocationCoordinate2D center1 = CLLocationCoordinate2DMake(39.788857, 116.5559392); CLCircularRegion *region = [[CLCircularRegion alloc] initWithCenter:center1 radius:500 identifier:@"经海五路"]; region.notifyOnEntry = YES; region.notifyOnExit = YES; // region 位置信息 repeats 是否重复 (CLRegion 可以是地理位置信息) UNLocationNotificationTrigger *locationTrigger = [UNLocationNotificationTrigger triggerWithRegion:region repeats:YES];

2、创建推送的剧情(UNMutableNotificationContent)UNNotificationContent:属性readOnlyUNMutableNotificationContent:属性有title、subtitle、body、badge、sound、lauchImageName、userInfo、attachments、categoryIdentifier、threadIdentifier

地面音讯内容 |内容约束大小 |体现-------------|--------|title |NSString| 约束在一行,多出某个简约号subtitle |NSString |节制在一行,多出一部分简短号body| NSString |公告栏现身时,限定在两行,多出一些省略号;预览时,全体出示

**注意点: **body中printf风格的转义字符,比方说要富含%,供给写成%% 才会显得,同样

 // 创建通知内容 UNMutableNotificationContent, 注意不是 UNNotificationContent ,此对象为不可变对象。 UNMutableNotificationContent *content = [[UNMutableNotificationContent alloc] init]; content.title = @"Dely 时间提醒 - title"; content.subtitle = [NSString stringWithFormat:@"Dely 装逼大会竞选时间提醒 - subtitle"]; content.body = @"Dely 装逼大会总决赛时间到,欢迎你参加总决赛!希望你一统X界 - body"; content.badge = @666; content.sound = [UNNotificationSound defaultSound]; content.userInfo = @{@"key1":@"value1",@"key2":@"value2"};

3、制造完整的本地推送乞求Demo

//定时推送  createLocalizedUserNotification{ // 设置触发条件 UNNotificationTrigger UNTimeIntervalNotificationTrigger *timeTrigger = [UNTimeIntervalNotificationTrigger triggerWithTimeInterval:5.0f repeats:NO]; // 创建通知内容 UNMutableNotificationContent, 注意不是 UNNotificationContent ,此对象为不可变对象。 UNMutableNotificationContent *content = [[UNMutableNotificationContent alloc] init]; content.title = @"Dely 时间提醒 - title"; content.subtitle = [NSString stringWithFormat:@"Dely 装逼大会竞选时间提醒 - subtitle"]; content.body = @"Dely 装逼大会总决赛时间到,欢迎你参加总决赛!希望你一统X界 - body"; content.badge = @666; content.sound = [UNNotificationSound defaultSound]; content.userInfo = @{@"key1":@"value1",@"key2":@"value2"}; // 创建通知标示 NSString *requestIdentifier = @"Dely.X.time"; // 创建通知请求 UNNotificationRequest 将触发条件和通知内容添加到请求中 UNNotificationRequest *request = [UNNotificationRequest requestWithIdentifier:requestIdentifier content:content trigger:timeTrigger]; UNUserNotificationCenter* center = [UNUserNotificationCenter currentNotificationCenter]; // 将通知请求 add 到 UNUserNotificationCenter [center addNotificationRequest:request withCompletionHandler:^(NSError * _Nullable error) { if  { NSLog(@"推送已添加成功 %@", requestIdentifier); //你自己的需求例如下面: UIAlertController *alert = [UIAlertController alertControllerWithTitle:@"本地通知" message:@"成功添加推送" preferredStyle:UIAlertControllerStyleAlert]; UIAlertAction *cancelAction = [UIAlertAction actionWithTitle:@"取消" style:UIAlertActionStyleCancel handler:nil]; [alert addAction:cancelAction]; [[UIApplication sharedApplication].keyWindow.rootViewController presentViewController:alert animated:YES completion:nil]; //此处省略一万行需求。。。。 } }];}

运作结果如下:

图片 15装逼决赛布告.jpg

二、 基本的远端推送要是你想模仿远端推送,根据自身前面介绍的安顿基本条件、证书、push开关和主导方法就足以上行下效远端的着力远端推送。1、运转为工人身份程则会获得设备的Device Token,前边会用到。

图片 16device token.png

2、今后我们需求三个推送服务器给APNS发送消息。作者眼下说了本身花了12块大洋买了叁个APNS pusher 来模拟远端推送服务,当然你能够不花钱也得以用到,比如:NWPusher

图片 17APNS pusher

3、你必要把您刚刚获得的device token填到相应地点,同临时间您要配备好push证书哦。

4、要求增多aps内容了,然后点击send就OK了

{ "aps" : { "alert" : { "title" : "iOS远程消息,我是主标题!-title", "subtitle" : "iOS远程消息,我是主标题!-Subtitle", "body" : "Dely,why am i so handsome -body" }, "badge" : "2" }}

5、稍纵则逝你就收下了远端新闻了

图片 18远端音信.jpg

6、Notification Management对推送进行查、改、删。都急需一个必要的参数requestIdentifier

1、更新公告

Local Notification需求通过纠正request.相通的requestIdentifier,重新扩充加到推送center就能够了,说白了就是重复创制local Notification request(只要保险requestIdentifier就ok了),应用处景如图

图片 19Local Notification更新前.png图片 20Local Notification更新后.png

Remote Notification 更新须要通过新的字段apps-collapse-id来作为唯一标示,笔者前边用的APNS pusher暂不援助这么些字段,但是github上有相当多如此的工具: 也得以立异推送音讯

2、推送新闻的找寻和删除

// Notification requests that are waiting for their trigger to fire//获取未送达的所有消息列表- getPendingNotificationRequestsWithCompletionHandler:(NSArray<UNNotificationRequest *> *requests))completionHandler;//删除所有未送达的特定id的消息- removePendingNotificationRequestsWithIdentifiers:(NSArray<NSString *> *)identifiers;//删除所有未送达的消息- removeAllPendingNotificationRequests;// Notifications that have been delivered and remain in Notification Center. Notifiations triggered by location cannot be retrieved, but can be removed.//获取已送达的所有消息列表- getDeliveredNotificationsWithCompletionHandler:(NSArray<UNNotification *> *notifications))completionHandler __TVOS_PROHIBITED;//删除所有已送达的特定id的消息- removeDeliveredNotificationsWithIdentifiers:(NSArray<NSString *> *)identifiers __TVOS_PROHIBITED;//删除所有已送达的消息- removeAllDeliveredNotifications __TVOS_PROHIBITED;

测验如下:

  notificationAction{ NSString *requestIdentifier = @"Dely.X.time"; UNUserNotificationCenter* center = [UNUserNotificationCenter currentNotificationCenter]; //删除设备已收到的所有消息推送 // [center removeAllDeliveredNotifications]; //删除设备已收到特定id的所有消息推送 // [center removeDeliveredNotificationsWithIdentifiers:@[requestIdentifier]]; //获取设备已收到的消息推送 [center getDeliveredNotificationsWithCompletionHandler:^(NSArray<UNNotification *> * _Nonnull notifications) { }];}

段结: 收到通知时您要求在appdelegate里面包车型地铁代办方法里管理你的须要逻辑,那一个须要您自身写了。到前段时间甘休你左右了主导的本地推送骨干的远端推送!

无意写了如此多字、本来继续准备写进阶的本地和远端推送(Media Attachments、Notification Actions、自定义推送分界面等),留着下一篇博客继续享受呢,欲知后事怎样,且听下会装X!

一经你欢悦能够点个合意_(竟有那样千古罪人)

下集预先报告:

图片 21推送图片.jpg图片 22推送图片2.jpg

参照他事他说加以考查资料:

2.3 创造触发器

  • 新功效 trigger 能够在特定条件触发,有三类:UNTimeIntervalNotificationTrigger、UNCalendarNotificationTrigger、UNLocationNotificationTrigger

  • 1、UNTimeIntervalNotificationTrigger:按时推送。

    • 一段时间后触发。

          // timeInterval:单位为秒(s)  repeats:是否循环提醒
      
          // 50s 后提醒
          UNTimeIntervalNotificationTrigger *trigger1 = [UNTimeIntervalNotificationTrigger triggerWithTimeInterval:50 
                                                                                                           repeats:NO];
      
  • 2、UNCalendarNotificationTrigger:依期推送。

    • 岁月点音讯用 NSDateComponents。

          // 在每周一的 14 点 3 分提醒
          NSDateComponents *components = [[NSDateComponents alloc] init];
          components.weekday = 2;
          components.hour = 16;
          components.minute = 3;
      
          // components 日期
          UNCalendarNotificationTrigger *calendarTrigger = [UNCalendarNotificationTrigger triggerWithDateMatchingComponents:components 
                                                                                                                    repeats:YES];
      
  • 3、UNLocationNotificationTrigger:定点推送。

    • 地面音信应用 CLRegion 的子类 CLCircularRegion,可以安顿 region 属性 notifyOnEntry 和 notifyOnExit,是在步向地面、从地区出来或然双方都要的时候进行通报。

          // 首先得导入 #import <CoreLocation/CoreLocation.h> 。
      
          // 创建位置信息
          CLLocationCoordinate2D center1 = CLLocationCoordinate2DMake(39.788857, 116.5559392);
          CLCircularRegion *region = [[CLCircularRegion alloc] initWithCenter:center1 radius:500 identifier:@"经海五路"];
          region.notifyOnEntry = YES;
          region.notifyOnExit = YES;
      
          // region 位置信息 repeats 是否重复 (CLRegion 可以是地理位置信息)
          UNLocationNotificationTrigger *locationTrigger = [UNLocationNotificationTrigger triggerWithRegion:region 
                                                                                                    repeats:YES];
      

692194-4be41eab63ed71a9-1.jpg

2.4 成立推送的内容

  • UNNotificationContent:属性 readOnly
  • UNMutableNotificationContent:属性有 title、subtitle、body、badge、sound、lauchImageName、userInfo、attachments、categoryIdentifier、threadIdentifier

    本地消息内容 内容限制大小 展示
    title NSString 限制在一行,多出部分省略号
    subtitle NSString 限制在一行,多出部分省略号
    body NSString 通知栏出现时,限制在两行,多出部分省略号;预览时,全部展示
    • 注意点: body 中 printf 风格的转义字符,例如说要含有 %,须求写成 %% 才会来得, 雷同

          UNMutableNotificationContent *content = [[UNMutableNotificationContent alloc] init];
      
          content.title = @"本地推送通知 - title";
          content.subtitle = @"本地推送通知 - subtitle";
          content.body = @"本地推送通知 - body,本地推送通知本地推送通知本地推送通知本地推送通知本地推送通知";
          content.badge = @666;                                                       // 推送消息的角标
          content.sound = [UNNotificationSound defaultSound];                         // 提醒声音
          content.userInfo = @{@"key1":@"userInfoValue1", @"key2":@"userInfoValue2"}; // 收到用户的基本信息
          content.categoryIdentifier = @"Dely_locationCategory";                      // 用于添加 Action 的标识
      
  • 在供给给使用推送音信时,Provider把push内容、接受push新闻的deviceToken按APNS钦点的格式打包好,发送给APNS;
  • APNS选用到Provider发送的新闻后,查找deviceToken,假使该装置已经和APNS塑造了一而再,则立刻将该新闻推送给该装置,若是设备不在线,则在装置后一次连接到APNS后将音讯推送给该设备。请留意苹果并不有限协助推送一定成功。
  • 配备遭受push新闻后,iOS系统会依附SSL证书决断这几个push音信是发放那一个应用的,进而运行相应的客商端。

2.5 完整的本地推送成立

  • 报名本地推送

        // 包含头文件
        #ifdef NSFoundationVersionNumber_iOS_9_x_Max
        #import <UserNotifications/UserNotifications.h>
        #endif
    
        // 遵守协议
        <UNUserNotificationCenterDelegate>
    
        - (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {
    
            UNUserNotificationCenter *center = [UNUserNotificationCenter currentNotificationCenter];
    
            // 设置代理,必须写代理,不然无法监听通知的接收与点击事件
            center.delegate = self;
    
            // 判断是否已申请通知权限
            [center getNotificationSettingsWithCompletionHandler:^(UNNotificationSettings * _Nonnull settings) {
    
                if (settings.authorizationStatus == UNAuthorizationStatusNotDetermined ||
                    settings.authorizationStatus == UNAuthorizationStatusDenied) {
    
                    // 申请通知权限
                    [center requestAuthorizationWithOptions:(UNAuthorizationOptionBadge |
                                                             UNAuthorizationOptionSound |
                                                             UNAuthorizationOptionAlert )
                                          completionHandler:^(BOOL granted, NSError * _Nullable error) {
    
                        if (!error && granted) {
    
                            // 用户点击允许
                            NSLog(@"注册成功");
                        } else {
    
                            // 用户点击不允许
                            NSLog(@"注册失败");
                        }
                    }];
                }
            }];
    
            return YES;
        }
    
  • 接纳管理地点推送新闻

        // AppDelegate.m
    
        // UNUserNotificationCenterDelegate 协议方法,App 处于前台接收通知
        - (void)userNotificationCenter:(UNUserNotificationCenter *)center 
               willPresentNotification:(UNNotification *)notification 
                 withCompletionHandler:(void (^)(UNNotificationPresentationOptions))completionHandler{
    
            // 收到推送的请求
            UNNotificationRequest *request = notification.request;
    
            // 收到推送的内容
            UNNotificationContent *content = request.content;
    
            // 收到用户的基本信息
            NSDictionary *userInfo = content.userInfo;
    
            // 收到推送消息的角标
            NSNumber *badge = content.badge;
    
            // 收到推送消息 body
            NSString *body = content.body;
    
            // 推送消息的声音
            UNNotificationSound *sound = content.sound;
    
            // 推送消息的副标题
            NSString *subtitle = content.subtitle;
    
            // 推送消息的标题
            NSString *title = content.title;
    
            if ([notification.request.trigger isKindOfClass:[UNPushNotificationTrigger class]]) {
    
                // 收到远程推送消息
                NSLog(@"收到远程推送消息: %@", userInfo);
    
            } else {
    
                // 收到本地推送消息
                NSLog(@"收到本地推送消息: body:%@,title:%@, subtitle:%@, badge:%@,sound:%@, userInfo:%@",
                                              body, title, subtitle, badge, sound, userInfo);
            }
    
            // 需要执行这个方法,选择是否提醒用户,有 Badge、Sound、Alert 三种类型可以设置
            completionHandler(UNNotificationPresentationOptionBadge 
                            | UNNotificationPresentationOptionSound 
                            | UNNotificationPresentationOptionAlert);
        }
    
  • 管理推送新闻点击事件

        // AppDelegate.m
    
        // UNUserNotificationCenterDelegate 协议方法
        - (void)userNotificationCenter:(UNUserNotificationCenter *)center 
                didReceiveNotificationResponse:(UNNotificationResponse *)response 
                         withCompletionHandler:(void (^)())completionHandler{
    
            // 收到推送的请求
            UNNotificationRequest *request = response.notification.request;
    
            // 收到推送的内容
            UNNotificationContent *content = request.content;
    
            // 收到用户的基本信息
            NSDictionary *userInfo = content.userInfo;
    
            // 收到推送消息的角标
            NSNumber *badge = content.badge;
    
            // 收到推送消息 body
            NSString *body = content.body;
    
            // 推送消息的声音
            UNNotificationSound *sound = content.sound;
    
            // 推送消息的副标题
            NSString *subtitle = content.subtitle;
    
            // 推送消息的标题
            NSString *title = content.title;
    
            if ([response.notification.request.trigger isKindOfClass:[UNPushNotificationTrigger class]]) {
    
                // 远程推送消息
                NSLog(@"点击远程推送消息: %@", userInfo);
    
            } else {
    
                // 本地推送消息
                NSLog(@"点击本地推送消息: body:%@,title:%@, subtitle:%@, badge:%@,sound:%@, userInfo:%@",
                                             body, title, subtitle, badge, sound, userInfo);
            }
    
            // 系统要求执行这个方法
            completionHandler(); 
        }
    
  • iOS10 制造发送本地布告

        // 添加头文件
        #import <UserNotifications/UserNotifications.h>
    
    • 创设定期推送布告

          - (void)createLocalizedUserNotification1 {
      
              // 设置触发条件
              UNTimeIntervalNotificationTrigger *timeTrigger = [UNTimeIntervalNotificationTrigger triggerWithTimeInterval:10.0f 
                                                                                                                  repeats:NO];
      
              // 创建通知内容
              UNMutableNotificationContent *content = [[UNMutableNotificationContent alloc] init];
              content.title = @"定时推送通知 - title";
              content.subtitle = [NSString stringWithFormat:@"定时推送通知 - subtitle,%@", [NSDate date]];
              content.body = @"定时推送通知 - body,定时推送通知定时推送通知定时推送通知定时推送通知定时推送通知";
              content.badge = @666;                                                       // 推送消息的角标
              content.sound = [UNNotificationSound defaultSound];
              content.userInfo = @{@"key1":@"userInfoValue1", @"key2":@"userInfoValue2"}; // 收到用户的基本信息
              content.categoryIdentifier = @"Dely_locationCategory";                      // 用于添加 Action 的标识
      
              // 创建通知标示
              NSString *requestIdentifier = @"Dely.note";
      
              // 创建通知请求
              UNNotificationRequest *request = [UNNotificationRequest requestWithIdentifier:requestIdentifier
                                                                                    content:content
                                                                                    trigger:timeTrigger];
      
              UNUserNotificationCenter *center = [UNUserNotificationCenter currentNotificationCenter];
      
              // 将通知请求添加到用户通知中心
              [center addNotificationRequest:request withCompletionHandler:^(NSError * _Nullable error) {
      
                  if (!error) {
                      NSLog(@"本地推送已添加成功 1 %@", requestIdentifier);
                  }
              }];
          }
      
    • 开创定期推送通告

          - (void)createLocalizedUserNotification2 {
      
              // 创建日期组建
              NSDateComponents *components = [[NSDateComponents alloc] init];
              components.weekday = 4;
              components.hour = 5;
              components.minute = 48;
      
              // 设置触发条件
              UNCalendarNotificationTrigger *calendarTrigger = [UNCalendarNotificationTrigger triggerWithDateMatchingComponents:components 
                                                                                                                        repeats:YES];
      
              // 创建通知内容
              UNMutableNotificationContent *content = [[UNMutableNotificationContent alloc] init];
              content.title = @"定期推送通知 - title";
              content.subtitle = [NSString stringWithFormat:@"定期推送通知 - subtitle,%@", [NSDate date]];
              content.body = @"定期推送通知 - body,定期推送通知定期推送通知定期推送通知定期推送通知定期推送通知";
              content.badge = @2;                                                         // 推送消息的角标
              content.sound = [UNNotificationSound defaultSound];
              content.userInfo = @{@"key1":@"userInfoValue1", @"key2":@"userInfoValue2"}; // 收到用户的基本信息
              content.categoryIdentifier = @"Date_locationCategory";                      // 用于添加 Action 的标识
      
              // 创建通知标示
              NSString *requestIdentifier = @"Date.note";
      
              // 创建通知请求
              UNNotificationRequest *request = [UNNotificationRequest requestWithIdentifier:requestIdentifier 
                                                                                    content:content 
                                                                                    trigger:calendarTrigger];
      
              UNUserNotificationCenter *center = [UNUserNotificationCenter currentNotificationCenter];
      
              // 将通知请求添加到用户通知中心
              [center addNotificationRequest:request withCompletionHandler:^(NSError * _Nullable error) {
      
                  if (!error) {
                      NSLog(@"推送已添加成功 2 %@", requestIdentifier);
                  }
              }];
          }
      
    • 创立定点推送公告

          // 添加头文件
          #import <CoreLocation/CoreLocation.h>
      
          - (void)createLocalizedUserNotification3 {
      
              // 创建位置信息
              CLLocationCoordinate2D center1 = CLLocationCoordinate2DMake(39.788857, 116.5559392);
              CLCircularRegion *region = [[CLCircularRegion alloc] initWithCenter:center1 radius:500 identifier:@"经海五路"];
              region.notifyOnEntry = YES;
              region.notifyOnExit = YES;
      
              // 设置触发条件
              UNLocationNotificationTrigger *locationTrigger = [UNLocationNotificationTrigger triggerWithRegion:region 
                                                                                                        repeats:YES];
      
              // 创建通知内容
              UNMutableNotificationContent *content = [[UNMutableNotificationContent alloc] init];
              content.title = @"定点推送通知 - title";
              content.subtitle = [NSString stringWithFormat:@"定点推送通知 - subtitle,%@", [NSDate date]];
              content.body = @"定点推送通知 - body,定点推送通知定点推送通知定点推送通知定点推送通知定点推送通知";
              content.badge = @1;                                                         // 推送消息的角标
              content.sound = [UNNotificationSound defaultSound];
              content.userInfo = @{@"key1":@"userInfoValue1", @"key2":@"userInfoValue2"}; // 收到用户的基本信息
              content.categoryIdentifier = @"Address_locationCategory";                   // 用于添加 Action 的标识
      
              // 创建通知标示
              NSString *requestIdentifier = @"Address.note";
      
              // 创建通知请求
              UNNotificationRequest *request = [UNNotificationRequest requestWithIdentifier:requestIdentifier 
                                                                                    content:content 
                                                                                    trigger:locationTrigger];
      
              UNUserNotificationCenter* center = [UNUserNotificationCenter currentNotificationCenter];
      
              // 将通知请求添加到用户通知中心
              [center addNotificationRequest:request withCompletionHandler:^(NSError * _Nullable error) {
      
                  if (!error) {
                      NSLog(@"推送已添加成功 3 %@", requestIdentifier);
                  }
              }];
          }
      
    • 运维结果如下

      图片 23 图片 24

在上述进度中,有八个关键步骤需求和谐管理:

3、远程推送

  • 长途推送首要流程:

    • 1 应用程序注册音信推送
    • 2 iOS 跟 APNS Server 要 deviceToken。应用程序选取 deviceToken
    • 3 应用程序将 deviceToken 发送给 Push 服务器端程序
    • 4 Push 服务器端程序向 APNS 发送推送音信
    • 5 APNS 将推送消息发送给 红米 应用程序
  • 获取道具的deviceToken并上盛传Provider;
  • Provider发送推送消息到APNS;

本文由澳门威利斯人发布于威利斯人娱乐,转载请注明出处:秘籍总结,通知推送

关键词: iOS基础知 IOS 秘籍 消息 iOS-NET