//一个完整的通知一般包含3个属性:

- (NSString *)name; // 通知的名称

- (id)object; // 通知发布者(是谁要发布通知)

- (NSDictionary *)userInfo; // 一些额外的信息

 //初始化一个通知(NSNotification)对象

+ (instancetype)notificationWithName:(NSString *)aName object:(id)anObject;

+ (instancetype)notificationWithName:(NSString *)aName object:(id)anObject userInfo:(NSDictionary *)aUserInfo;

- (instancetype)initWithName:(NSString *)name object:(id)object userInfo:(NSDictionary *)userInfo;
4.10 NSNotificationCenter

第一步:注册通知监听器

- (void)addObserver:(id)observer selector:(SEL)aSelector name:(NSString *)aName object:(id)anObject;

- (id)addObserverForName:(NSString *)name object:(id)obj queue:(NSOperationQueue *)queue usingBlock:(void (^)(NSNotification *note))block;

注意:当name参数为空时,可监听并打印anObject对象的所有事件,可用此方法来观察控件的事件触发顺序

 第二步:发布通知

- (void)postNotification:(NSNotification *)notification;

- (void)postNotificationName:(NSString *)aName object:(id)anObject;

- (void)postNotificationName:(NSString *)aName object:(id)anObject userInfo:
(NSDictionary *)aUserInfo;

 第三步:取消监听器

- (void)removeObserver:(id)observer;

 
- (void)removeObserver:(id)observer name:(NSString *)aName object:(id)anObject;

一.基本概念

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;

 
}
三.推送通知
(远程推送:

第一阶段:应用程序把要发送的消息、目的iPhone的标识打包,发给APNS。

第二阶段:APNS在自身的已注册Push服务的iPhone列表中,查找有相应标识的iPhone,并把消息发送到iPhone。

第三阶段:iPhone把发来的消息传递给相应的应用程序,并且按照设定弹出Push通知。)

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 的异步

}

}

iOS-NSNotification本地推送、远程推送的更多相关文章

  1. IOS中程序如何进行推送消息(本地推送,远程推送)2(上)

    未看过本地推送的,可以提前看一下本地推送. http://www.cnblogs.com/wolfhous/p/5135711.html =============================== ...

  2. iOS的推送机制APNs:本地推送&远程推送

    本地推送: 本地推送主要应用在备忘录,闹钟等本地的,基于时间定时的消息提醒.本篇不做详细描述. 远程推送:APNS(苹果推送通知服务) iOS远程推送机制的原理及流程: 注册推送(橙色部分):若该Ap ...

  3. 包教包会:本地推送 & 远程推送

    什么是推送?注意,和我们常用的抽象通知不同(NSNotification): 可以让不在前台运行的app,告知用户app内部发生了什么事情:或者没有运行的app接收到服务器发来的通知..比如离线QQ接 ...

  4. iOS---iOS10适配iOS当前所有系统的远程推送

    一.iOS推送通知简介 众所周知苹果的推送通知从iOS3开始出现, 每一年都会更新一些新的用法. 譬如iOS7出现的Silent remote notifications(远程静默推送), iOS8出 ...

  5. IOS JPush 集成步骤(极光远程推送解决方案,支持android和iOS两个平台)

    ●  什么是JPush ●  一套远程推送解决方案,支持android和iOS两个平台 ●  它能够快捷地为iOS App增加推送功能,减少集成APNs需要的工作量.开发复杂 度 ●  更多的信息,可 ...

  6. iOS 申请测试用的远程推送证书

    进入member center创建一个App ID 注意下面证书名字的变化 将刚刚生成的两个证书下载下来,双击安装 安装完成后可以在钥匙串中查看 这样远程推送证书的申请流程就走完了

  7. IOS中程序如何进行推送消息(本地推送,远程推送)

    [1]-------------什么是推送消息? 我就以一张图解释------------ [2]-----------IOS程序中如何进行本地推送?----------- 2.1,先征求用户同意 1 ...

  8. IOS中程序如何进行推送消息(本地推送,远程推送)2(下)

    内容中包含 base64string 图片造成字符过多,拒绝显示

  9. 适配 iOS 8 时遇到的问题两则:远程推送和 Unwind Segue

    原文:http://imtx.me/archives/1910.html 昨天我在微博上吐槽:iOS 8 / Xcode 6 真是史上对开发人员最糟糕的版本号了.收到非常多朋友表达同感. 之所以这么说 ...

  10. 李洪强iOS经典面试题154- 通知与推送

    李洪强iOS经典面试题154- 通知与推送   通知与推送 本地通知和远程推送通知对基本概念和用法? image 本地通知和远程推送通知都可以向不在前台运行的应用发送消息,这种消息既可能是即将发生的事 ...

随机推荐

  1. python - super 寻找继承关系

    """ super 是根据当前类对象的 mro 的继承顺序进行函数的调用的 """ class Base(object): def fn(s ...

  2. koa-compose 类库学习

    koa-compose 是koa 框架的根源的根源 ,是其实现洋葱包裹型中间件的基础 以下是koa2.X 版本所以依赖的compose 版本 ,其主要核心依赖于new Promise.resolve( ...

  3. HDU-2082-找单词(母函数)

    链接: http://acm.hdu.edu.cn/showproblem.php?pid=2082 题意: 假设有x1个字母A, x2个字母B,..... x26个字母Z,同时假设字母A的价值为1, ...

  4. NuGet本地包自定义路径

    <?xml version="1.0" encoding="utf-8"?> <configuration> <packageSo ...

  5. Oracle 11g 禁用 SQL Tuning Advisor 与 auto space advisor

    生产上有一套11g数据库alert.log报错ORA-16957: SQL Analyze time limit interrupt.  查询MOS相关文档Troubleshooting: ORA-1 ...

  6. 056_统计/etc/passwd 中 root 出现的次数

    #!/bin/bash#每读取一行文件内容,即从第 1 列循环到最后 1 列,依次判断是否包含 root 关键词,如果包含则 x++awk -F: '{i=1;while(i<=NF){if($ ...

  7. mysql授权访问数据库

    授权给mysql权限 将所有的权限赋值给某个用户 grant all privileges on *.* to username@"%" identified by 'passwo ...

  8. vue-上拉加载、下拉刷新组件

    vue在移动端开发过程中,上拉加载.下拉刷新是页面的基本需求,现在给大家介绍一种基于touch事件封装的刷新组件. 组件支持传参.传递事件.请求成功异步回调.上拉与触底触发加载或刷新. 父子组件间的通 ...

  9. zookeeper 随记

    ZooKeeper是一个分布式的,开放源码的分布式应用程序协调服务. zookeeper的几种模式: 1.单点模式 2.分布式集群模式,节点运行在多台机器 3.单点多实例 在这里只介绍单点多实例安装. ...

  10. 运维管理SLA

    主要三个概念: SLI 服务关键量化指标,即测试哪些指标,如何测等 SLO :服务等级目标,即要达到哪些目标,如设备正常率3个9.4个9等,即99.9% SLA:  服务等级协议,即如果未完成SLO中 ...