一、准备工作

1、项目中要集成推送,首先要了解推送的原理,虽然3个版本中的推送实现方式不一样,但是原理还是一样的。安卓总是因为推送出问题,由于苹果有自己的推送服务(APNS),所以我觉得苹果的推送比安卓好实现很多。推送分为远程推送和本地推送。远程推送可以看成是客户端,APNS,后台服务器相互关联形成的一个服务;本地推送只是在客户端实现,比如提醒事项,甚至闹钟;

2、远程推送需要我们去申请证书,相信你们都已经知道怎么做了,此处省略几百字;

3、推送的基本流程:

  (1)客户端启动,注册推送;

  (2)注册成功后,我们可以拿到deviceToken,此时我们把deviceToken发给后台;

  (3)我们实现接受到推送的方法,下面会介绍;

  (4)需要推送的时候后台会把推送的信息和deviceToken发给APNS;

  (5)APNS会在已经注册的deviceToken中查找后台传入的deviceToken;

  (6)找到后,发出通知我们就可以接收到了(前提是已经同意接收通知,并且手机是开机状态~~)。

    tps:

   推送信息的最大长度是255个字符;

二、注册推送

注册推送是在下面的方法中:

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions

1、iOS8以前注册方式:

[[UIApplication sharedApplication] registerForRemoteNotificationTypes:UIRemoteNotificationTypeBadge|UIRemoteNotificationTypeSound|UIRemoteNotificationTypeAlert];

2、iOS8-iOS10注册方式:

     //iOS8的新特性,后台接收到通知侧滑显示选项UIMutableUserNotificationAction *action1 = [[UIMutableUserNotificationAction alloc] init];action1.identifier = @"action_identifier1";action1.title = @"Accept";action1.activationMode = UIUserNotificationActivationModeForeground;UIMutableUserNotificationAction *action2 = [[UIMutableUserNotificationAction alloc] init];action2.identifier = @"action_identifier2";action2.title = @"Reject";action2.activationMode = UIUserNotificationActivationModeBackground;action2.authenticationRequired = YES;action2.destructive = YES;UIMutableUserNotificationCategory *categorys = [[UIMutableUserNotificationCategory alloc] init];categorys.identifier = @"category1";[categorys setActions:@[action1, action2] forContext:(UIUserNotificationActionContextDefault)];//注册推送UIUserNotificationSettings *userSettings = [UIUserNotificationSettings settingsForTypes:UIUserNotificationTypeBadge|UIUserNotificationTypeSound|UIUserNotificationTypeAlert categories:[NSSet setWithObject:categorys]];[[UIApplication sharedApplication] registerForRemoteNotifications];[[UIApplication sharedApplication] registerUserNotificationSettings:userSettings];

3、iOS10及其以上注册:

在iOS10中,苹果对推送进行了一层封装,需要加入UserNotifications.framework,不然会报错;并且要导入头文件:#import <UserNotifications/UserNotifications.h>,因为iOS10才有这个文件,所以在导入时要加判断,遵循代理UNUserNotificationCenterDelegate。

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

开始注册:    

     UNUserNotificationCenter *center = [UNUserNotificationCenter currentNotificationCenter];        //遵循代理UNUserNotificationCenterDelegatecenter.delegate = self;[center requestAuthorizationWithOptions:(UNAuthorizationOptionBadge | UNAuthorizationOptionSound | UNAuthorizationOptionAlert) completionHandler:^(BOOL granted, NSError * _Nullable error) {if (!error && granted) {NSLog(@"注册成功");}else{NSLog(@"注册失败");}}];//获取通知授权信息[center getNotificationSettingsWithCompletionHandler:^(UNNotificationSettings * _Nonnull settings) { UNAuthorizationStatusNotDetermined : 没有做出选择UNAuthorizationStatusDenied : 用户未授权UNAuthorizationStatusAuthorized :用户已授权}]; [application registerForRemoteNotifications];

三、获取 deviceToken

在消息注册成功后,会在下面的方法中返回deviceToken

- (void)application:(UIApplication *)application didRegisterForRemoteNotificationsWithDeviceToken:(NSData *)deviceToken

返回的是data类型,解析的时候看网上很多人说解析失败,我把解析的方法也放上来供大家参考

NSString *token = [NSString stringWithFormat:@"%@", [[[[deviceToken description] stringByReplacingOccurrencesOfString:@"<" withString:@""] stringByReplacingOccurrencesOfString:@">" withString:@""] stringByReplacingOccurrencesOfString:@" " withString:@""]];

接着我们就需要把获取的token发送给后台。

四、实现接收到通知的方法

1、iOS10以下,userInfo是后台传给APNS的字典,可以直接使用

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

2、iOS10及以上

在前台的时候调用代理方法:

- (void)userNotificationCenter:(UNUserNotificationCenter *)center willPresentNotification:(UNNotification *)notification withCompletionHandler:(void (^)(UNNotificationPresentationOptions options))completionHandler __IOS_AVAILABLE(10.0) __TVOS_AVAILABLE(10.0) __WATCHOS_AVAILABLE(3.0)
{

    // 需要执行这个方法,选择是否提醒用户,有Badge、Sound、Alert三种类型可以设置

    completionHandler(UNNotificationPresentationOptionBadge

               | UNNotificationPresentationOptionSound

               | UNNotificationPresentationOptionAlert);

}

在方法中,返回UNNotification类型的实例notification,我们可以从UNNotification开始逐层点击查看。获取后台传入APNS最终的方法是:

notification.request.content.userInfo

在后台的时候调用代理方法:

- (void)userNotificationCenter:(UNUserNotificationCenter *)center didReceiveNotificationResponse:(UNNotificationResponse *)response withCompletionHandler:(void(^)())completionHandler __IOS_AVAILABLE(10.0) __WATCHOS_AVAILABLE(3.0) __TVOS_PROHIBITED
{//这个方法必须调用completionHandler();
}

在方法中,返回UNNotificationResponse类型的实例response,我们可以从UNNotificationResponse开始逐层点击查看发现UNNotification是UNNotificationResponse的一个属性,所以获取后台传入APNS最终的方法是:

response.notification.request.content.userInfo

​​​​​​​转载:iOS8以前、iOS8-iOS10、iOS10以及以上推送的简单实现 - Werido_G - 博客园

iOS 推送系统方法总结相关推荐

  1. iOS推送小结--swift语言

    APNS的推送机制 首先我们看一下苹果官方给出的对ios推送机制的解释.如下图 Provider就是我们自己程序的后台服务器,APNS是Apple Push Notification Service的 ...

  2. iOS 推送手机消息背后的技术

    作者:allenzzhao,腾讯  IEG运营开发工程师 消息推送我们几乎每天都会用到,但你知道iOS中的消息推送是如何实现的吗?本文将从推送权限申请,到本地和远程消息推送,再到App对推送消息的处理 ...

  3. ios推送通知之ios推送证书的申请和使用配置

    很多人初次接触推送通知,不知道怎么去申请ios推送证书和配置推送. 很多人犯的错误就是用推送证书p12去打包ipa,推送不是用来打包的,下面详细介绍ios推证书的申请和配置使用. ios推送证书分为测 ...

  4. iOS 推送通知及推送扩展

    概述 iOS中的通知包括本地推送通知和远程推送通知,两者在iOS系统中都可以通过弹出横幅的形式来提醒用户,点击横幅会打开应用.在iOS 10及之后版本的系统中,还支持通知扩展功能(UNNotifica ...

  5. IOS推送消息怎么实现icon图标的数字累加

    为什么80%的码农都做不了架构师?>>>    IOS推送消息怎么实现icon图标的数字累加 在你自己服务器上做计数,客户端做减法并反馈给你的服务器 ,然后你服务器将需要显示的数字发 ...

  6. iOS 推送通知详解

    这是一篇编译的文章,内容均出自Parse.com的iOS开发教程,同时作者还提供了视频讲解.本文将带领开发者一步一步向着iOS推送通知的深处探寻,掌握如何配置iOS推送通知的奥义. 介绍一点点背景资料 ...

  7. iOS推送流程(APNS)

    iOS推送流程(APNS) 一.APNS(Apple Push Notification Service) 苹果推送通知服务(APNs)是推送通知的网关,iPhone ipad 对于应用程序在后台运行 ...

  8. IOS推送详解(一)------APNs

    最近项目需要做IOS推送,在网上了解了下苹果的推送过程以及接口协议. 博文会分几部分来写,先介绍下APNs,然后介绍协议(新的旧的都说下),然后介绍生成证书,最后上代码. APNS IOS推送要比安卓 ...

  9. 一步一步教你做ios推送

    最近在研究ios的推送问题,遇到了一些问题,最终整理了一下.放在这里和大家分享 APNS的推送机制 首先我们看一下苹果官方给出的对ios推送机制的解释.如下图 Provider就是我们自己程序的后台服 ...

最新文章

  1. oracle维护数据的完整性
  2. linux文本三剑客,Linux文本处理三剑客之grep
  3. struts2在页面显示网页编辑器发布的内容
  4. 什么是初效过滤器_初效过滤器怎么样 初效过滤器特点介绍【详解】
  5. 正则提取的url中的域名以及替换域名的方法 preg_match()和preg_replace()
  6. 声压级 matlab,语音信号处理教程(二)声音的声压级和响度
  7. 烂泥:高负载均衡学习haproxy之安装与配置
  8. 【LeetCode】题解合集(JavaScript版)
  9. 建立一个被称为sroot()的函数,返回其参数的二次方根,重载sroot()三次,让它返回整数,长整数与双精度的二次方根
  10. MAC电脑触摸板手势(提高办公效率)
  11. 优雅发送HTTP请求
  12. 论文阅读 [TPAMI-2022] VolterraNet: A Higher Order Convolutional Network With Group Equivariance for Homo
  13. Ajax+GridView+Xml的简易留言薄
  14. 旅人随笔[02] 量子物理的故事
  15. java计算机毕业设计农产品供销服务系统源码+系统+mysql数据库+lw文档
  16. C++入门学习:引用和常引用
  17. 艰涩难懂,不存在的,消息队列其实很简单
  18. 贝叶斯统计 韦来生 课后题答案 第一章
  19. 杰理-watch-手表-AC701-双击屏幕唤醒
  20. PySpark——随机森林分类案例

热门文章

  1. 怎么判断两张图片是否完全相同,通过读取图片内容进行对比
  2. 测试工程师之Python面试题(附答案)
  3. java 火龙劫,火龙畅想圆满完成 最终结果即将揭晓
  4. 「ChatGPT」十分钟学会如何在本地调用API_KEY(最新版 | 附源码)
  5. 浅谈月出月落和月相的计算方法以及替代工具 - 月出月落和月相 API
  6. 微信小程序 Now you can provide attr wx:key for a wx:for to improve performance.
  7. QGIS批量向XYZ Tiles加载地图
  8. 图像转mif文件的操作步骤
  9. 谷粒学院16万字笔记+1600张配图(八)——课程管理
  10. 关于TCP三次握手和两次握手的思考