前言:推送分为本地推送以及远程推送。

  两者的区别为本地推送一般为定时推送、定期推送或者位置推送。而远程推送更为多样化,能满足较高的要求。当然远程推送需要服务器端开发,开发流程较复杂。

  1、本地推送只需要在客户端写代码即可,实现简单轻松。

 (1)本地推送在app未开启的情况下也能收到本地推送的消息。会走这个入口方法

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

 (2)app在后台能收到推送消息。点击推送的消息,会打开APP,并且走

-(void)application:(UIApplication *)application didReceiveLocalNotification:(UILocalNotification *)notification;

 

 (3)app在前台运行时会收到推送消息,如果将通知中心的代理设为AppDelegate .这样本地推送的表现形式在前台时也能收到banner弹框消息。

但是如果将通知中心的代理设为某个控制器的话,在前台收不到推送消息,但是依然会回调willPresentNotification代理方法。

但是UIAppDelegate方法

-(void)application:(UIApplication *)application didReceiveLocalNotification:(UILocalNotification *)notification;会自动回调消息的内容

对于iOS 10  用户点击 推送消息,都会走代理方法,无论是前台 后台 还是未开启状态

-(void)userNotificationCenter:(UNUserNotificationCenter *)center didReceiveNotificationResponse:(UNNotificationResponse *)response withCompletionHandler:(void (^)(void))completionHandler;

当应用在前台时,会走如下代理方法 后台以及未开启app状态的情况下都不会走这个代理方法。目的是在前台时,应用能及时根据推送的消息进行一些相应的UI处理等。

- (void)userNotificationCenter:(UNUserNotificationCenter *)center willPresentNotification:(UNNotification*)notification withCompletionHandler:(void (^)(UNNotificationPresentationOptions options))completionHandler;

2、远程推送

远程推送 服务器端开发比较繁琐。下面是一些写在远程推送开发前的内容。可以借助第三方的推送工具如 Push me baby来测试。

有一篇很好的参考文章,感谢这位大侠的分享:https://mobiforge.com/design-development/programming-apple-push-notification-services

简单说明就是在github上下载push me baby源码 运行。在代码中init方法中修改device token\ certificate。注意相应环境的证书和device token要互相匹配。 device token由测试demo在真机上生成。 相应的证书要安装在mac上。拖入工程目录的证书要是cer格式。

////////////////////////////////////////////////下面是生成推送证书时需要注意的事项////////////////////////////////////////////////

生成apns推送证书时,服务器端需要pem格式。在电脑上将证书转成pem格式 ,思路是分别将证书和key导成p12,然后将p12转成pem格式。最后将两个pem文件合并成一个pem文件。最后验证证书是否生成成功。如果验证不成功的时候,注意请求crs文件,即秘钥时,为了安全起见,注意填写的邮箱为开发者账号。

参考链接https://www.jianshu.com/p/fb180965ff76

https://www.jianshu.com/p/cc952ea07a08

下面来介绍远程推送,远程推送的表现形式和本地推送非常一致。但是远程推送可以随时随地由应用的服务器推送消息,给appns,然后apns再将消息推送给设备。

远程推送无论应用在前台或者后台还是没有运行,都会弹banner条幅。同时也会有推送代理方法。

最新文章

  1. racle wm_concat(column)函数的使用
  2. codeforces 711B - Chris and Magic Square(矩阵0位置填数)
  3. RPM安装rabbitMQ
  4. JavaScipt 源码解析 数据缓存
  5. JavaScript符串中每个单词的首字母大写化
  6. bzoj2120 2453
  7. C++类的继承实例
  8. Kapit控件方法笔记
  9. RestTemplate 支持服务器内302重定向
  10. Python自学知识点----Day03
  11. 《用Python写爬虫》学习笔记(一)
  12. BZOJ2006 ST表 + 堆
  13. 【Java】 剑指offer(36) 二叉搜索树与双向链表
  14. 仿迅雷播放器教程 -- 基于VLC的C++播放器 (4)
  15. Redis入门到高可用(三)——通用命令
  16. 用Python监听鼠标和键盘事件
  17. gcc6.3的安装
  18. Mysql的文件系统规划以及日志配置
  19. php-PSR
  20. (转)NIO 文件锁定

热门文章

  1. 如何把链表以k个结点为一组进行翻转
  2. PHP根据ip获取地理位置(通过高德地图接口)
  3. day1-python条件语句和基本数据类型
  4. Zabbix安装部署实践
  5. java编程思想第四版第十章习题
  6. pat 1120 Friend Numbers(20 分)
  7. 一文教你快速读懂MQTT网关
  8. ArcGIS API For Javascript:新增热力图层的方法
  9. paper sharing :学习特征演化的数据流
  10. mysql基础之约束