一般我们在学习一些新的东西的时候我们必须要问自己几个问题,就举通知的例子
1、什么是通知?
2、为什么要用通知?
最后才是学习它,这样我们就是有目的的学习新的知识,而不是一味的别人都学了,所有我要学。
首先什么是通知(这片文章所有的内容提到的通知都是与题目有关的,而不是消息机制里的“通知“)。
通知是苹果公司自带的,主要作用是app有什么重要的动态或者事件来提醒用户的一种机制。
具体表现如图
为什么要使用通知,因为通知有强大提醒能力,想象一下你只要在下载app后用户允许了消息推送,当你有网络情况下通知可以在任何时候,不论你是否开启了app,还是在后台界面你屏幕最顶上都会有通知提示框。
还有一点就是即时性,app远程服务器推送过来的通知,客户端可以立即接受到通知。
先学习下本地通知
通知是要通过客户端授权的,所以在在appdelegate 的didfinishlaunching方法授权
1、认证
types里面的三个参数一般都是全选的,一个是app有上角的通知个数,一个通知提示声音,一个是提示框
UIUserNotificationSettings*setting=[UIUserNotificationSettings settingsForTypes:UIUserNotificationTypeBadge|UIUserNotificationTypeSound|UIUserNotificationTypeAlert categories:nil]] ;
[[UIApplication sharedApplication]registerUserNotificationSettings:setting];
2、在你需要消息通知的地方实例化本地消息通知
UILocationNotification * notification = [UILocationNotification alloc]init];
消息头
notification.alertTitle = @”消息头”;
notification.alertBody = @"消息体";
消息执行时间
notification.fireDate =
加入到app本地通知中
[UIApplication shareApplication]scheduLocationNotifatication:notification];
如果要设置app图片右上角的通知个数
notification.applicationIconBadgeNumber =
但是消息个数不是自动消失的,需要你在自己项目中的逻辑判断这个通知个数。
通知个数也可用app对象来设置
[UIApplication shareApplication].applictionIconbadgeNumber =
如果要设置通知的提示音你可以在本地下载一段音频,但是在苹果通知提示音最长时间不能超过30秒。
notification.soundName = @"音频的名称";
远程通知和本地通知类似,只是多了一个与苹果打交道的过程。
想象一下你做的一个app用户量比较多的情况下,公司的服务器要与用户保持长连接,用户量一多服务器的性能消耗就越大。小的公司可能就因为服务器的问题,还有一方面就是带宽也要跟的上用户量,要花大量的钱。所以一般小公司把长连接的需求交给了第三方,比如苹果、融云之类的,第三方会与客户保存长连接,而公司的服务器只有在用户推送过来消息的时候才会提示服务器,等待服务器给于回应,而其他的时候公司服务器根本就不需要知道,如用心跳包来回测试客户是否在线之类的。
远程推送我们就要与苹果打交道。
APNS全程apple push notification services
苹果推送通知的服务器
具体与用户和公司服务器的交互如果
在我们开发端我们只需了解我们怎么和APNS交互和接收通知的。首先客户端会将手机的UDID和app的boundleID加密后发给APNS然后APNS会将deviceToken一个二级制的标示返回给客户端,再客户端将deviceToken发送给服务器,接下来只需等待通知做相应的处理。
当然在使用APNS是要交钱的,必须成为苹果的开发者,这就是xcode用真机调试不需要成为开发者,但是我们开发还是要成为开发者原因之一。
app实现远程通知的条件
1、成为苹果的开发者
2、需要用真机调试