通知
2015-10-25 20:38
176 查看
通知
一.基本概念
1. ios提供了两种通知机制,本地通知,推送通知。2.本地通知和推送通知可以让不在前端运行的程序告知用户程序内部发生的信息。
3.通知的展示:播放声音,更新应用程序图标上的数字,显示一个横幅。
二.本地通知
1.通常使用本地通知,是在应用程序退出到后台调度的。应用程序退出后台之后,会在内存中驻留10分钟的时间,过了10分钟,系统会自动清理应用程序。2.在进入后台的方法中创建本地通知。
- (void)applicationDidEnterBackground:(UIApplication *)application
{
[self loadNotification];
}
#pragma mark - 创建本地通知
- (void)loadNotification
{
UILocalNotification *notification = [[UILocalNotification alloc]init];
// 5秒钟之后触发
notification.fireDate = [NSDate dateWithTimeIntervalSinceNow:5];
notification.alertBody = @"出大事了";
notification.soundName = UILocalNotificationDefaultSoundName;
notification.applicationIconBadgeNumber = 100;
notification.userInfo = @{@"userName": @"马大哈", @"age": @(18)};
// 要调用本地通知,需要通过UIApplication来统一调度
[[UIApplication sharedApplication]scheduleLocalNotification:notification];
}
3.发送的通知怎么获取本地通知
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
{
// 截获本地通知,用户通过通知的横幅点击进入系统,字典中才能找到本地通知
UILocalNotification *notification = launchOptions[UIApplicationLaunchOptionsLocalNotificationKey];
// 判断通知是否存在
if (notification) {
NSLog(@"%@", notification.userInfo);
[notification.userInfo writeToFile:@"/users/apple/Desktop/123.plist" atomically:YES];
}
self.window = [[UIWindow alloc] initWithFrame:[[UIScreen mainScreen] bounds]];
self.window.backgroundColor = [UIColor whiteColor];
[self.window makeKeyAndVisible];
return YES;
}
三.推送通知
1.消息推送服务,简称APNS。2.推送流程:首先应用程序需要注册接收消息,然后APNS会返回deciceToken,将token保存到本地,提交开发商的数据服务器,服务器保存用户的token,服务器向APNS发送消息,APNS发送消息给客户的应用程序。
3.在获取到token时,发送给开发商服务器之前,需要做一步优化。
4.Device Token的获取,Device Token是由用户手机发起请求时,由APNS生成的。注意:DeviceToken的生成机制可能随时变化,最好方法每次获取到deviceToken后,与之前(如果有)的deviceToken进行比较,如果发生变化,及时更新自己数据服务器上的记录
4.1 向APNS发送请求,即注册应用程序接收APNS推送消息
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
{
// 注册应用程序接收APNS推送的消息
[application registerForRemoteNotificationTypes:UIRemoteNotificationTypeAlert | UIRemoteNotificationTypeBadge | UIRemoteNotificationTypeSound];
self.window = [[UIWindow alloc] initWithFrame:[[UIScreen mainScreen] bounds]];
self.window.backgroundColor = [UIColor whiteColor];
[self.window makeKeyAndVisible];
return YES;
}
4.2 获取Device Token。
#pragma mark - 获取DeviceToken
- (void)application:(UIApplication *)application didRegisterForRemoteNotificationsWithDeviceToken:(NSData *)deviceToken
{
NSLog(@"%@", deviceToken);
// 1. 从系统偏好取之前的token
NSData *oldToken = [[NSUserDefaults standardUserDefaults]objectForKey:@"deviceToken"];
// 2. 新旧token进行比较
if (![oldToken isEqualToData:deviceToken]) {
// 3. 如果不一致,保存token到系统偏好
[[NSUserDefaults standardUserDefaults]setObject:deviceToken forKey:@"deviceToken"];
// 4. 使用post请求传输新旧token至服务器
// 1) url
// 具体的URL地址以及POST请求中的参数和格式,是由公司的后端程序员提供的
// 2) request POST body(包含新旧token的数据)
// 3) connection 的异步
}
}
相关文章推荐
- [LeetCode][JavaScript]Remove Duplicates from Sorted List
- 在一条SQL语句中向2个表中插入数据解决方案
- 怎么理解int main(int argc, const char *argv[])
- strlen和sizeof有什么区别?
- Folding
- JAVA多线程面试题
- 再谈备忘录模式 (memento pattern) Java
- DOM对象
- DOM对象
- Python基础(四) Python列表
- 如何写好简历及如何准备面试(转)
- Linux文件系统
- matlab与c++混合编程
- Python基础(三) Python字符串
- java作业04(动手动脑)
- 洛谷1186 玛丽卡
- phpstorm
- 摘自<编写高质量代码:改善Java程序的151个建议>
- BZOJ****-****
- Android APP引导页制作