Apple的通知

1. 本地通知

//取消原来的通知,可设可不设

[[UIApplication sharedApplication]cancelAllLocalNotifications];

//初始化一个通知

UILocalNotification *noti = [[UILocalNotification alloc]init];

//下面就是设置该通知的各个属性了

//发送通知时,计时的时区,一般是设置为本地默认时区

noti.timeZone = [NSTimeZone defaultTimeZone];

//通知发送后让应用程序的图标上加上一个小图标,就像QQ来短消息一样,但记得在接受了通知后在程序中取消它,只要把他的值设为0就够了

noti.applicationIconBadgeNumber = 1;

//消息的主要内容

noti.alertBody = @"hflewofjwofioaw";

//设置通知到来时播放的声音,但如果通知触发时该程序正在运行,则没有任何反应

NSString *path = [[NSBundle mainBundle]pathForResource:@"sub" ofType:@"caf"];

NSLog(@"%@",path);

noti.soundName = path;

//  noti.soundName = nil;

//设置通知触发的时间

noti.fireDate = [NSDate dateWithTimeIntervalSinceNow:10];

//下面是设置通知是否要重复等,不设置时默认就是发送一次

//noti.repeatInterval= NSSecondCalendarUnit;

//开始发送

[[UIApplication sharedApplication]scheduleLocalNotification:noti];

2. 运程通知,

该通知是通过apple的APNS服务器将消息发送至客户端的

首先来看看客户端

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

{

self.window = [[UIWindow alloc] initWithFrame:[[UIScreen mainScreen] bounds]];

// Override point for customization after application launch.

self.viewController = [[ViewController alloc] initWithNibName:@"ViewController" bundle:nil];

self.window.rootViewController = self.viewController;

[self.window makeKeyAndVisible];

//1.第一步---在该方法中注册该程序可以接受远程推送通知

//注册时要指定该程序可以接受的通知的类型,目前总共就这三种类型,最好全部注册,

//UIRemoteNotificationTypeAlert 指该通知是显示警告试图的

//UIRemoteNotificationTypeBadge|UIRemoteNotificationTypeSound 这两个是指

//在程序图标上显示类似QQ有短消息的红色图标  和到来时会发出声音的通知

//如果要取消用下面的代码

//[[UIApplication sharedApplication]unregisterForRemoteNotifications];

[[UIApplication sharedApplication]registerForRemoteNotificationTypes:UIRemoteNotificationTypeAlert|UIRemoteNotificationTypeBadge|UIRemoteNotificationTypeSound];

//5.这里是第五步,可以先跳过这里,当用户点击通知上的按钮启动了程序时

if (launchOptions!=nil) {

//获得该通知的用户信息

NSDictionary *userInfo = [launchOptions objectForKey:UIApplicationLaunchOptionsRemoteNotificationKey];

//做一些想做的事

}

//但上述的第五步中的方法有时候会有问题,得到的launchOptions可能为空,解决方法为

//    [[NSNotificationCenter defaultCenter]addObserver:self selector:@selector(dealRemoteNotification) name:UIApplicationLaunchOptionsRemoteNotificationKey object:nil];

return YES;

}

//该方法属于第五步

-(void)dealRemoteNotification{

//你可以在该方法中处理程序是因为通知到来而启动的情况

}

//2.如果程序注册成功了,程序运行时会实行这个方法

-(void)application:(UIApplication *)application didRegisterForRemoteNotificationsWithDeviceToken:(NSData *)deviceToken{

//在这个方法中你要将这个(NSData *)deviceToken东西的数据发送给服务器,因为我们的服务器就是靠这个来通过 APNS推送消息到你的设备上的

}

//3.如果程序注册接受远程通知没有成功,则该方法会只是,原因可能是用户禁止接受远程通知

-(void)application:(UIApplication *)application didFailToRegisterForRemoteNotificationsWithError:(NSError *)error{

//你可以在这里给用户发送一个警告视图,当然也可以做点别的

//    UIAlertView *alert = [[UIAlertView alloc]initWithTitle:@"" message:<#(NSString *)#> delegate:<#(id)#> cancelButtonTitle:<#(NSString *)#> otherButtonTitles:<#(NSString *), ...#>, nil]

}

//4.该方法是在程序运行时接到了远程通知时才执行的,此时你可以通过userInfo获得远程通知的信息,然后决定做点什么

-(void)application:(UIApplication *)application didReceiveRemoteNotification:(NSDictionary *)userInfo{

//注意,当程序正在运行时来了通知,则该通知会被默默的忽略掉,所以这里要做一些你想做的事

//当然,如果通知到来时,你的程序处于为运行状态,则如果用户点击了确定功能的键,则此时该程序会被唤醒,它会执行第五步

}

按照步骤一步步看吧

再开看看服务端:

服务器要通过APNS推送通知到用户则首先必需要从apple官网上获得一个用于远程推送的证书

或的证书可以参考

http://mobiforge.com/developing/story/programming-apple-push-notification-services

apple规定通知的大小不能超过256B,而且通知的格式必需满足下面的样式

@"{

//自定义参数

\"userinfo\":

{

\"name\":\"remote notice\"

},

//标准写法

\"aps\":

{

\"alert\":

{

\"action-loc-key\":\"Open\",//支持多语言

\"body\":\"messgae content\"//消息正文

},

\"badge\":1,//为App 的icon  标记 具体数值

\"sound\":\"default\" //播放的音频文fw件,default 表示系统默认的选择列铃声

}

}"

注意:我们的销售终端实现了语言国际化,所以服务器发送的通知主题信息应使用键值获得,而这些键值是在客户端本来定义好了的并且已经国际化了的字符串,

我们的服务器发送给APNS的数据还必须是大端字节对其的

总结出来服务器要做下面这些事

1. 用推送证书采用SSL连接APNS

2. 包装消息,消息必须是复合规则的JSON数据

3. 发送消息到APNS,APNS会等到用户打开了数据连接后就将通知发送到客户端;

Apple的通知的更多相关文章

  1. 蛋疼的Apple IOS Push通知协议

    简单介绍 Apple Push通知机制事实上非常easy,就是Apple的APNsserver做为中间人,把消息推送到相应的设备上. 一张来自Apple文档的图: 当然,示意图看起来简单,可是另一些实 ...

  2. 如何彻底禁止 macOS Monterey 自动更新,去除更新标记和通知

    请访问原文链接:如何彻底禁止 macOS Monterey 自动更新,去除更新标记和通知,查看最新版.原创作品,转载请保留出处. 作者主页:www.sysin.org 随着 macOS Montere ...

  3. 开发者所需要知道的 iOS 10 SDK 新特性

    转自:https://onevcat.com/2016/06/ios-10-sdk/ 写的很好啊.哈哈哈 总览 距离 iPhone 横空出世已经过去了 9 个年头,iOS 的版本号也跨入了两位数.在我 ...

  4. iOS 10.0之前和之后的Local Notification有神马不同

    在iOS 10.0之前apple还没有将通知功能单独拿出来自成一系.而从10.0开始原来的本地通知仍然可用,只是被标记为过时.于是乎我们可以使用10.0全新的通知功能.别急-让我们慢慢来,先从iOS ...

  5. Expo大作战(十四)--expo中消息推送的实现

    简要:本系列文章讲会对expo进行全面的介绍,本人从2017年6月份接触expo以来,对expo的研究断断续续,一路走来将近10个月,废话不多说,接下来你看到内容,讲全部来与官网 我猜去全部机翻+个人 ...

  6. 多线程之美8一 AbstractQueuedSynchronizer源码分析<二>

    目录 AQS的源码分析 该篇主要分析AQS的ConditionObject,是AQS的内部类,实现等待通知机制. 1.条件队列 条件队列与AQS中的同步队列有所不同,结构图如下: 两者区别: 1.链表 ...

  7. 远程通知APNs(Apple Push Notification Server)

    推送通知是由应用服务提供商发起的,通过苹果的APNs(Apple Push Notification Server)发送到应用客户端.下面是苹果官方关于推送通知的过程示意图: 推送通知的过程可以分为以 ...

  8. (转)苹果推送通知服务教程 Apple Push Notification Services Tutorial

    本文译自http://www.raywenderlich.com/.原文由iOS教程团队 Matthijs Hollemans 撰写,经原网站管理员授权本博翻译. 在iOS系统,考虑到手机电池电量,应 ...

  9. Apple watch ,小米微信通知

    Applewatch怎么显示微信通知?iWatch显示微信消息通知设置方法.大家都知道Applewatch上收到微信消息,iWatch是不会显示通知的,需要用户自行设置才行.下面小编来教大家如何设置A ...

随机推荐

  1. javascript权威指南(2)

    JavaScript预定义了一系列全局变量和函数,在自定义变量和函数式要避免使用这些预定义的名称: arguments encodeURI  Infinity  Number  RegExp Arra ...

  2. Metrics监控应用

    使用Metrics监控应用程序的性能   在编写应用程序的时候,通常会记录日志以便事后分析,在很多情况下是产生了问题之后,再去查看日志,是一种事后的静态分析.在很多时候,我们可能需要了解整个系统在当前 ...

  3. Codeforces 442C Artem and Array(stack+贪婪)

    题目连接:Codeforces 442C Artem and Array 题目大意:给出一个数组,每次删除一个数.删除一个数的得分为两边数的最小值,假设左右有一边不存在则算作0分. 问最大得分是多少. ...

  4. [Attila GPU] ATTILA GPU Streamer Unit (D3D Input Assambler) 结构分析

    http://www.opengpu.org/forum.php?mod=viewthread&tid=40&highlight=Attila 查看: 7488|回复: 26    [ ...

  5. python算法题

    python几道简单的算法题   最近看了python的语法,但是总感觉不知道怎么使用它,还是先来敲敲一些简单的程序吧. 1.题目:有1.2.3.4个数字,能组成多少个互不相同且无重复数字的三位数?都 ...

  6. POJ 2724 Purifying Machine(最大独立集)

    POJ 2724 Purifying Machine 题目链接 题意:这题题意有点没看懂.看了别人的题解, 给出m串长度为n的01串. 有些串中可能包括,这种串能够表示两个串,为1 和为0. 反复的算 ...

  7. Swift 制作一个新闻通知中心插件1

    使用 Swift 制作一个新闻通知中心插件(1) 随着 iOS 8 的发布,苹果为开发者们开放了很多新的 API,而在这些开放的接口中 通知中心插件 无疑是最显眼的一个.通知中心就不用过多介绍了,相信 ...

  8. 《MonkeyRunner原理剖析》第九章-MonkeyImage实现原理 - 第一节 - 关键类作用及关系

    MonkeyRunner框架暴露了几个类的大量的API出去给用户编写脚本时候使用,其中最主要的三个就是: MonkeyDevice目标设备操作类,HierarchyViewer窗口界面对象操作类以及M ...

  9. navicat连接oracle数据库报ORA-28547: connection to server failed, probable Oracle Net admin error错误的解决方法

    原文:navicat连接oracle数据库报ORA-28547: connection to server failed, probable Oracle Net admin error错误的解决方法 ...

  10. HEAP CORRUPTION DETECTED

    发生主要是由于这个问题给写入超出预分配的空间,注意检查越界情况 版权声明:本文博客原创文章,博客,未经同意,不得转载.