iOS-NSNotification本地推送、远程推送
//一个完整的通知一般包含3个属性:
- (NSString *)name; // 通知的名称
- (id)object; // 通知发布者(是谁要发布通知)
- (NSDictionary *)userInfo; // 一些额外的信息
+ (instancetype)notificationWithName:(NSString *)aName object:(id)anObject;
+ (instancetype)notificationWithName:(NSString *)aName object:(id)anObject userInfo:(NSDictionary *)aUserInfo;
第一步:注册通知监听器
- (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;

一.基本概念
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时,发送给开发商服务器之前,需要做一步优化。
.png)
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本地推送、远程推送的更多相关文章
- IOS中程序如何进行推送消息(本地推送,远程推送)2(上)
未看过本地推送的,可以提前看一下本地推送. http://www.cnblogs.com/wolfhous/p/5135711.html =============================== ...
- iOS的推送机制APNs:本地推送&远程推送
本地推送: 本地推送主要应用在备忘录,闹钟等本地的,基于时间定时的消息提醒.本篇不做详细描述. 远程推送:APNS(苹果推送通知服务) iOS远程推送机制的原理及流程: 注册推送(橙色部分):若该Ap ...
- 包教包会:本地推送 & 远程推送
什么是推送?注意,和我们常用的抽象通知不同(NSNotification): 可以让不在前台运行的app,告知用户app内部发生了什么事情:或者没有运行的app接收到服务器发来的通知..比如离线QQ接 ...
- iOS---iOS10适配iOS当前所有系统的远程推送
一.iOS推送通知简介 众所周知苹果的推送通知从iOS3开始出现, 每一年都会更新一些新的用法. 譬如iOS7出现的Silent remote notifications(远程静默推送), iOS8出 ...
- IOS JPush 集成步骤(极光远程推送解决方案,支持android和iOS两个平台)
● 什么是JPush ● 一套远程推送解决方案,支持android和iOS两个平台 ● 它能够快捷地为iOS App增加推送功能,减少集成APNs需要的工作量.开发复杂 度 ● 更多的信息,可 ...
- iOS 申请测试用的远程推送证书
进入member center创建一个App ID 注意下面证书名字的变化 将刚刚生成的两个证书下载下来,双击安装 安装完成后可以在钥匙串中查看 这样远程推送证书的申请流程就走完了
- IOS中程序如何进行推送消息(本地推送,远程推送)
[1]-------------什么是推送消息? 我就以一张图解释------------ [2]-----------IOS程序中如何进行本地推送?----------- 2.1,先征求用户同意 1 ...
- IOS中程序如何进行推送消息(本地推送,远程推送)2(下)
内容中包含 base64string 图片造成字符过多,拒绝显示
- 适配 iOS 8 时遇到的问题两则:远程推送和 Unwind Segue
原文:http://imtx.me/archives/1910.html 昨天我在微博上吐槽:iOS 8 / Xcode 6 真是史上对开发人员最糟糕的版本号了.收到非常多朋友表达同感. 之所以这么说 ...
- 李洪强iOS经典面试题154- 通知与推送
李洪强iOS经典面试题154- 通知与推送 通知与推送 本地通知和远程推送通知对基本概念和用法? image 本地通知和远程推送通知都可以向不在前台运行的应用发送消息,这种消息既可能是即将发生的事 ...
随机推荐
- BZOJ 1181: [CROATIAN2009] IZBROI选举(二分+dp)
题面 在一个地区的选举中,共有V个人参加了投票,每一票只可能投给N个政党中的一个.当地的议会共有M个席位.不妨将N个政党编号为1到N,并且设编号为i的政党最终的得票为Vi,则议会中的席位按如下规则分配 ...
- 微信公众号开发--微信JS-SDK分享到朋友圈和分享给朋友
之前写过一篇使用微信JS-SDK来实现扫一扫功能的博客 微信公众号开发–微信JS-SDK扫一扫功能 在该博客里介绍了微信JS-SDK的基本用法,其中包括以下几个步骤 还详细介绍了通过config接口注 ...
- [Functional Programming] Rewrite a reducer with functional state ADT
For example we have a feature reducer like this: // selectCard :: String -> Action String export ...
- Codeforces Round #600 (Div. 2) D题【并查集+思维】
题意:给你n个点,m条边,然后让你使得这个这个图成为一个协和图,需要加几条边.协和图就是,如果两个点之间有一条边,那么左端点与这之间任意一个点之间都要有条边. 思路:通过并查集不断维护连通量的最大编号 ...
- hive表的DDL
查看表 hive> show tables;创建表 hive> create table t1(id int);查看表结构 ...
- 三十三.mysqldump 实时增量备份 、innobackupex
1.数据库备份与恢复 逻辑备份工具 mysqldump 使用mysql 恢复数据库 1.1备份MySQL服务器上的所有库 ]# mysqldump -u root -p123456 --all-d ...
- 二十二. 安装部署Tomcat服务器、使用Tomcat部署虚拟主机、使用Varnish加速Web
web proxy web1 web2 1.安装部署Tomcat服务器 web1 1.1 使用RPM安装JDK环境 ]# yum -y install java-1.8.0-openjdk ]# ...
- 模板 - Codeforces模板
#include<bits/stdc++.h> using namespace std; typedef long long ll; const int MAXN = 2e5; const ...
- 分布式的一致性(分布式事物)-------2PC详述
英文名:Two Phase Commit(2PC) 算法目的:实现分布式事物 算法概述: 有两类节点: -----协调者 -----事务参与者 流程阶段: -----请求阶段 -----提交阶段 算法 ...
- 小程序web-view的使用,跳转到外部链接~
先说一下需求,要点击榜单,跳到我们的移动web的项目的榜单页,这个不是小程序的哦,就是网页版的. 榜单的html代码: <view class="nav" hover-cla ...