不要再说什么苹果git 强制推送送iOS7了

baby发型  Baby的这款时尚造型可是出自即将上映的微微一笑很倾城呢!是不是充满了青春气息呢?露额的设计毫无保留的展露出女生的小
再详细的教程可能也只会教你深浅不同的遮瑕膏的运用技巧。其实专业的遮瑕膏颜色远多于“深”、“浅”两色,甚至比隔离霜的颜色还要
育儿亲子早教经,检讨100件育儿蠢事,分享育儿经验,亲子教育,早教知识等内容。
妙招一:挤球操1、坐在椅子上,踮起脚后跟,双臂弯曲于胸前,在两掌之间放一个网球,用力挤压网球。2、保持挤压动作,慢慢向前伸展双臂,伸直后
近日,娱乐圈艺人纷纷在2015传来喜讯,先是周杰伦与昆凌,随后吴奇隆也晒出了与女友刘诗诗领证结婚的照片。这么急促,网友怀疑刘诗诗是奉
这款雪纺衫很有复古的感觉,花纹的设计融入了一些青花瓷的元素,很清丽脱俗的感觉,袖子的松紧设计,飘逸而又充满女人味,收腰的设计搭配上
陈晓陈妍希将于7月大婚,而两人的一举一动也备受粉丝关注,近日两人筹备婚礼率先拍摄了婚纱照,而拍摄婚纱照的花絮也曝光,不少网友看到
时尚是什么?潮流是什么?自己才是真正的主宰者,就算缺席时装周,杂志中的模特也是你很好的学习榜样。掌握要领,你也能够像她们一样成为今
婚纱总是能美到一种极致,算的上是一种幸福的象征。小编请你欣赏2013最新款唯美婚纱礼服,除了是幸福的象征以外,还能给你仙气飘飘的感
今日热门阅读排行
大家都在看
看过本文的人还看过理解并总结iOS7-10推送通知流程 - 简书
理解并总结iOS7-10推送通知流程
一、为什么会有这篇文章?
推送通知苹果几乎每年都改,但都是缝缝补补的功效,直到iOS10的出现,可能苹果觉得之前的代码架构已经无法满足他们的功能需求了,于是也就出现了代码重构。多版本的修改多少有点让人混淆,而此文仅在对iOS7-10通知有一定了解的基础上进行流程总结。。
二、iOS推送通知各版本到底改了些啥?
在回答之前,我先上一段代码:看看iOS10出来之后,兼容到iOS7最一般的推送通知代码该如何写。
#define IS_IOS_10 [[UIDevice currentDevice].systemVersion floatValue] &= 10.0
#define IS_IOS_9 [[UIDevice currentDevice].systemVersion floatValue] &= 9.0
#define IS_IOS_8 [[UIDevice currentDevice].systemVersion floatValue] &= 8.0
- (void)registerNotification{
if (IS_IOS_10) {
UNUserNotificationCenter *center = [UNUserNotificationCenter currentNotificationCenter];
[center requestAuthorizationWithOptions:(UNAuthorizationOptionBadge | UNAuthorizationOptionSound | UNAuthorizationOptionAlert) completionHandler:^(BOOL granted, NSError * _Nullable error) {
if (granted) {
[[UIApplication sharedApplication] registerForRemoteNotifications];
//设置代理
[UNUserNotificationCenter currentNotificationCenter].delegate =
else if (IS_IOS_8){
//ios8注册通知
UIUserNotificationType type = UIUserNotificationTypeAlert | UIUserNotificationTypeBadge | UIUserNotificationTypeS
UIUserNotificationSettings *setting = [UIUserNotificationSettings settingsForTypes:type categories:nil];
[[UIApplication sharedApplication]registerUserNotificationSettings:setting];
[[UIApplication sharedApplication] registerForRemoteNotifications];
//ios7及之前注册通知
UIRemoteNotificationType type = UIRemoteNotificationTypeBadge | UIRemoteNotificationTypeAlert | UIRemoteNotificationTypeS
[[UIApplication sharedApplication]registerForRemoteNotificationTypes:type];
随着版本的更替,远程通知和本地通知两个概念是越来越一体了,到iOS10已经无法从方法名直接区分远程通知还是本地通知了,而是通过UNNotificationTrigger这个类的子类来区分。需求决定功能,再怎么一体,远程和本地毕竟两个不同的需求,只是代码规范不同了而已。回到前面,先看看通知各版本到底都改了些啥?
太老的版本我也就不列了,截至2017年1月初,iOS9以下(不包括iOS9)的系统覆盖率为6%,应用撑死兼容到iOS7,iOS7以下的那些覆盖率,基本可以忽略。
iOS7 后台静默通知。需要开启Background Modes中的Remote notifications。
iOS8 通知请求权限修改。即UIRemoteNotificationType由UIUserNotificationType代替,并加入了UIUserNotificationSettings。
iOS9 通知加入可输入操作。
iOS10 通知重构,全新框架UserNotifications。
三、远程通知,本地通知,iOS7到iOS10等那么多的代理方法,怎么区分?又什么时候调用和触发?
对于概念多、各自又有分支和联系的时候,是时候来一张图表了。表中列举了各版本中通知使用相关的类或类库。
通知理解逻辑图.png
1、普通本地通知
怎么发送本地通知这个不多说,Demo里面也有,由于真机系统有限,仅在iOS8-9下分应用状态测试了本地通知的流程,iOS7同样适用。主要理清各版本通知的代理方法具体怎么走。
程序杀死状态。
所有版本,本地通知在- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchO方法中获取。[launchOptions objectForKey:UIApplicationLaunchOptionsLocalNotificationKey]即为我们需要的通知对象。没有通知时launchOptions为空。
程序后台状态。
iOS10以下,在点击通知会调用- (void)application:(UIApplication *)application didReceiveLocalNotification:(UILocalNotification *)方法。
iOS10会调用- (void)userNotificationCenter:(UNUserNotificationCenter *)center didReceiveNotificationResponse:(UNNotificationResponse *)response withCompletionHandler:(void (^)())completionHandler方法。
程序前台状态下,iOS10以下不会触发通知栏,并且还是调用- (void)application:(UIApplication *)application didReceiveLocalNotification:(UILocalNotification *)方法。
iOS10会立马触发- (void)userNotificationCenter:(UNUserNotificationCenter *)center willPresentNotification:(UNNotification *)notification withCompletionHandler:(void (^)(UNNotificationPresentationOptions))completionH方法,并且能根据completionHandler回调配置通知的显示样式。点击通知后同样会触发- (void)userNotificationCenter:(UNUserNotificationCenter *)center didReceiveNotificationResponse:(UNNotificationResponse *)response withCompletionHandler:(void (^)())completionH方法。
值得注意的是,程序后台状态下,代理方法都是在用户点击通知后才会执行,收到通知点击应用图标启动是不会走代理方法的。
程序杀死状态下启动应用只会触发- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchO方法。
2、注册了category的可操作本地通知
先上个通知具体样式图,方便理解。具体代码直接看Demo。
iOS8-9可操作通知
这是iOS8-9上的通知截图,iOS8-9上可操作通知共分为两种,即图中的按钮1和按钮2,点击按钮1会激活应用程序到前台,按钮2后台触发,不会激活应用。点击这两个按钮都会走如下代理方法:
//本地通知category属性使用,iOS8引入,点击按钮触发。
- (void)application:(UIApplication *)application handleActionWithIdentifier:(NSString *)identifier forLocalNotification:(UILocalNotification *)notification completionHandler:(void (^)())completionHandler{
//业务逻辑代码写在这。
completionHandler();
//本地通知category属性使用,iOS9引入,点击按钮或输入文字触发(当实现了此代理方法时,上面的方法失效)。
- (void)application:(UIApplication *)application handleActionWithIdentifier:(NSString *)identifier forLocalNotification:(UILocalNotification *)notification withResponseInfo:(NSDictionary *)responseInfo completionHandler:(void (^)())completionHandler{
NSLog(@"用户输入的信息为:%@",[responseInfo objectForKey:UIUserNotificationActionResponseTypedTextKey]);
//业务逻辑代码写在这。
completionHandler();
下面是iOS10的通知截图。
iOS10可操作通知
iOS10上可操作通知共分为三种:
UNNotificationActionOptionForeground //点击通知会激活应用到前台,需要解锁。
UNNotificationActionOptionAuthenticationRequired //点击通知需要解锁但不会激活应用到前台。
UNNotificationActionOptionDestructive //显示为红色字体,不需要解锁。
iOS10所有的通知,即远程推送,本地推送,都只会触发下面两个方法。而区分远程还是本地通知,就是前面提到的UNNotificationTrigger的子类,当UNNotificationRequest的trigger为UNPushNotificationTrigger时,说明此通知为远程通知,否则为本地通知。下面为代理方法:
//MARK: iOS10通知代理方法,程序在前台时收到通知调用
- (void)userNotificationCenter:(UNUserNotificationCenter *)center willPresentNotification:(UNNotification *)notification withCompletionHandler:(void (^)(UNNotificationPresentationOptions))completionHandler{
UNNotificationRequest *request = notification.
NSDictionary *userInfo = request.content.userI
if ([request.trigger isKindOfClass:[UNPushNotificationTrigger class]]) {
NSLog(@"收到了一个远程推送:%@",userInfo);
NSLog(@"收到了一个本地推送:%@",userInfo);
//此方法回调,设置程序前台是,banner提示框的显示选项,
completionHandler(UNNotificationPresentationOptionBadge|UNNotificationPresentationOptionSound|UNNotificationPresentationOptionAlert);
//MARK: iOS10通知代理方法,通知前后台点击时会触发。
- (void)userNotificationCenter:(UNUserNotificationCenter *)center didReceiveNotificationResponse:(UNNotificationResponse *)response withCompletionHandler:(void (^)())completionHandler{
NSDictionary *userInfo = response.notification.request.content.userI
NSLog(@"userInfo:%@",userInfo);
completionHandler();
远程通知和本地通知之所以能统一规范,就是因为其原理类似,唯一的区别在于远程通知需要获取用户的token,通过苹果的APNS将通知发送给对应用户,而具体通知的内容则由后台配置的那个aps字典决定了。
3、普通远程通知
远程通知测试的软件我用的,选择好证书,输入从- (void)application:(UIApplication *)application didRegisterForRemoteNotificationsWithDeviceToken:(NSData *)deviceToken方法中获取的deviceToken,等连接完毕就可以推送一般的远程的通知了。下面是iOS7-9远程通知相关的代理方法(iOS10所有通知只走前面提及的两个方法,不再赘述)。
已经收到远程推送消息
@param userInfo 收到的userInfo信息
- (void)application:(UIApplication *)application didReceiveRemoteNotification:(NSDictionary *)userInfo{
NSLog(@"userInfo:%@",userInfo);
if (application.applicationState == UIApplicationStateActive) {
NSLog(@"程序运行中收到通知");
NSLog(@"程序不活跃中收到通知");
后台模式收到的远程推送信息,需要开启后台模式的远程推送,实现了此方法,上面的方法就失效。
- (void)application:(UIApplication *)application didReceiveRemoteNotification:(NSDictionary *)userInfo fetchCompletionHandler:(void (^)(UIBackgroundFetchResult))completionHandler{
NSLog(@"userInfo:%@",userInfo);
if (application.applicationState == UIApplicationStateActive) {
NSLog(@"程序运行中收到通知");
NSLog(@"程序不活跃中收到通知");
completionHandler(UIBackgroundFetchResultNewData);
远程推送需要后台配置title等参数,也就是在本地通知中设置的那些什么alertTitle,alertBody啥子的。基本格式如下:
"alert" : {
"title" : "主标题",
"subtitle" : "子标题",
"body" : "通知内容"
"badge" : 2,
"sound" : "alert.wav"
"custom" : "something"
其中aps为固定对象,后台需要传输自己的参数可以自行添加与aps并列的键值对。
subtitle是iOS10才有的,iOS10之前加不加无所谓。
sound为提示音,默认为default,自定义时别忘了后缀。
custom为自扩展字段,比如iOS10中图片和视频的连接地址就可以放这里。
4、高级远程通知
所谓高级,无非就是iOS10以下的可操作通知、iOS10中通知的增删改,以及UNNotificationServiceExtension和UNNotificationContentExtension这两个通知扩展了。由于是远程通知,这里仅附上测试aps格式,方便测试。
"alert" : {
"title" : "这是title",
"subtitle" : "这是subtitle",
"body" : "这是body"
"mutable-content" : "1",
"category" : "myNotificationCategory"
此aps可以用来测试上述所有高级远程通知。
category中的值必须与测试可操作通知时的category值一样。
测试UNNotificationContentExtension时,必须和plist文件中的UNNotificationExtensionCategory所对应的值保持一致,编译对应的Scheme即可。
凡是需要对通知内容做修改的都要加上mutable-content字段,UNNotificationServiceExtension中需要使用。例如下载通知中传来的图片或视频,先下载后再通知。
通知的增删改都是根据request中的identifier进行查找和区分的。
通知其实也就这些,只是改的多,显得乱而已。理解了通知的流程与原理,处理这一模块的问题也就能得心应手。
一个喜欢文字却不擅长的理工男,一个专注编程却偶尔煽情的程序员。我想着有一天回头,能看着自己的文字,从华丽到豪放,到简练,到淡远。
推送通知注意:这里说的推送通知跟NSNotification有所区别NSNotification是抽象的,不可见的推送通知是可见的(能用肉眼看到) iOS中提供了2种推送通知 本地推送通知(Local Notification)远程推送通知(Remote Notificat...
WWDC session - Notifications 学习总结,如有不妥之处,望请指正?? 先给一些用得着的链接:session 707 Introduction to Notifications--2016session 708 Advanced Notificati...
不同版本极光推送SDK集成各有差异,集成时一定要注意版本号,楼主已将博文更新成最新的SDK JPush v3.0.2. 各位童鞋先阅读下JPush v3.0.2的升级指南吧!极光的最近更新极光资源下载 JPush
SDK v3.0.2 升级指南 更新时间...
推送通知 注意:这里说的推送通知跟NSNotification有所区别 NSNotification是抽象的,不可见的 推送通知是可见的(能用肉眼看到) iOS中提供了2种推送通知 本地推送通知(Local Notification) 远程推送通知(Remote Notif...
极光推送: 1.JPush当前版本是1.8.2,其SDK的开发除了正常的功能完善和扩展外也紧随苹果官方的步伐,SDK在iOS8刚推出的时候跟进更新。在一定程度上来讲,能够体现极光推送的技术力量是比较强大的; 2.应用内消息提高了推送服务的及时性和可靠性,在、紧随当下追求应用...
高中三年,我们不在同一个学校,只有周日下午才有时间在一起,我自私的占有她的周末,偶尔还会有意外。然后今年毕业。 距离又被拉长,我想远离东北,可她只想留在黑龙江。青春的爱情没有妥协,我们彼此固执。 还有三个小时,我在网吧一直犹豫。最终,我没有改变选择。 然后,我看到故事结尾。...
“一、二、三、四、五!” 小甜转过身,把手伸的高高的,“猜—丁—壳—哈哈又是我赢了!一、二、三、四、五……” 小宁看着越走越远的小甜,开始琢磨对策。 “下一次我会出布的!”她喊道。“那我会出剪刀!”小甜笑着说。 小宁的眉头皱皱的,思考到底要不要出布。“这样不是更复杂了吗?”...
日 天气: 晴 心情指数:7.5 小确幸: 每日金句?压力才有冻力【觉察生活的点滴】 Objective 你对今天学的记得什么? 压力就像地心引力之于人一样,一个健康的社会人,他无法逃避压力,只有勇于拼搏,战胜压力,才有灿烂的人生。喷泉之所以美丽,是因为...
“突然觉得自己已经老了”,阿曼这样说。 阿曼今年二十九岁,她说这话的时候, 颓着背,耷着肩,有那么一瞬的错觉,她就是一个年过半百历尽沧桑的小老太太。我问她为什么,她只笑笑将头转向别处,并不作答。过了半晌,却又冒出一句,“你还做梦吗?” “做梦?”我疑惑地望向她,她正盯着我,...
昨天后台收到一留言,看完很是心疼她。遇上这类人也真是苦了这位宝宝了。 一读者说:最近和闺蜜闹掰了,很苦恼。我心里想,不会是男朋友爱上闺蜜了吧,又或者是闺蜜勾搭上司成功上位,哈哈,原谅我这段时间一直在钻研宫斗,言情小说。职业病犯了。答案确实不是我想的那样。 她说:“她和闺蜜闺...比特客户端
您的位置:
详解大数据
详解大数据
详解大数据
详解大数据
苹果悄悄推送iOS7正式版iOS6用户进退两难
关键字:iOS7
发布iOS7之后,全新的设计风格一直是许多用户吐槽的焦点。而且iOS7目前没有越狱也是许多用户犹豫的原因。
  不过目前这些停留在iOS6犹豫的用户貌似要结束这种日子了,因为苹果已经开始悄悄的强制推送iOS7更新包。
  根据国外用户反映,当设备在iOS7支持列表内,并且有足够储存空间的情况下,系统将会自动进行iOS7的下载。并不会请求用户的许可。甚至一些用户一觉醒来就发现iOS7已经下载完毕。
  经过测试,下载会在设备接入网络并且连接电源后的数分钟内开始。iOS7升级包下载完成后并不会自动进行系统升级,需要用户许可。但是新固件安装连带补丁一共将近3GB的空间就搭进去了,所以许多用户无奈之下选择了升级iOS7.
  但实际上这并不是苹果第一次进行强制推送,当年iOS6的升级也发生过类似事件,引起了一部分用户的不满。
  但是换个角度看,升级到iOS7能够体验到多种全新功能,并且各方面效能提升。所以升级未尝不是一个择。
[ 责任编辑:尹红斌 ]
去年,手机江湖里的竞争格局还是…
甲骨文的云战略已经完成第一阶段…
软件信息化周刊
比特软件信息化周刊提供以数据库、操作系统和管理软件为重点的全面软件信息化产业热点、应用方案推荐、实用技巧分享等。以最新的软件资讯,最新的软件技巧,最新的软件与服务业内动态来为IT用户找到软捷径。
商务办公周刊
比特商务周刊是一个及行业资讯、深度分析、企业导购等为一体的综合性周刊。其中,与中国计量科学研究院合力打造的比特实验室可以为商业用户提供最权威的采购指南。是企业用户不可缺少的智选周刊!
比特网络周刊向企业网管员以及网络技术和产品使用者提供关于网络产业动态、技术热点、组网、建网、网络管理、网络运维等最新技术和实用技巧,帮助网管答疑解惑,成为网管好帮手。
服务器周刊
比特服务器周刊作为比特网的重点频道之一,主要关注x86服务器,RISC架构服务器以及高性能计算机行业的产品及发展动态。通过最独到的编辑观点和业界动态分析,让您第一时间了解服务器行业的趋势。
比特存储周刊长期以来,为读者提供企业存储领域高质量的原创内容,及时、全面的资讯、技术、方案以及案例文章,力求成为业界领先的存储媒体。比特存储周刊始终致力于用户的企业信息化建设、存储业务、数据保护与容灾构建以及数据管理部署等方面服务。
比特安全周刊通过专业的信息安全内容建设,为企业级用户打造最具商业价值的信息沟通平台,并为安全厂商提供多层面、多维度的媒体宣传手段。与其他同类网站信息安全内容相比,比特安全周刊运作模式更加独立,对信息安全界的动态新闻更新更快。
新闻中心热点推荐
新闻中心以独特视角精选一周内最具影响力的行业重大事件或圈内精彩故事,为企业级用户打造重点突出,可读性强,商业价值高的信息共享平台;同时为互联网、IT业界及通信厂商提供一条精准快捷,渗透力强,覆盖面广的媒体传播途径。
云计算周刊
比特云计算周刊关注云计算产业热点技术应用与趋势发展,全方位报道云计算领域最新动态。为用户与企业架设起沟通交流平台。包括IaaS、PaaS、SaaS各种不同的服务类型以及相关的安全与管理内容介绍。
CIO俱乐部周刊
比特CIO俱乐部周刊以大量高端CIO沙龙或专题研讨会以及对明星CIO的深入采访为依托,汇聚中国500强CIO的集体智慧。旨为中国杰出的CIO提供一个良好的互融互通 、促进交流的平台,并持续提供丰富的资讯和服务,探讨信息化建设,推动中国信息化发展引领CIO未来职业发展。
IT专家新闻邮件长期以来,以定向、分众、整合的商业模式,为企业IT专业人士以及IT系统采购决策者提供高质量的原创内容,包括IT新闻、评论、专家答疑、技巧和白皮书。此外,IT专家网还为读者提供包括咨询、社区、论坛、线下会议、读者沙龙等多种服务。
X周刊是一份IT人的技术娱乐周刊,给用户实时传递I最新T资讯、IT段子、技术技巧、畅销书籍,同时用户还能参与我们推荐的互动游戏,给广大的IT技术人士忙碌工作之余带来轻松休闲一刻。
微信扫一扫
关注Chinabyte内容字号:
段落设置:
字体设置:
精准搜索请尝试:
还想死守iOS6?苹果开始强制推送iOS7了
来源:威锋网作者:TangoDown责编:木木
致那些还停留在iOS6系统的朋友们,大家犹豫纠结的时光似乎就要结束了。根据国外不少网友的反馈,苹果似乎已经开始强制推行iOS 7系统。
据了解,当一部设备满足兼容iOS 7和还未升级这两个条件后,它就有可能会在没有机主许可的情况下自动接收新系统的推送。一位名叫Kara Nicole的网友不久前在Twitter上惊呼:“什么情况……我刚睡醒就发现iOS 7下好了。”
外站CNET经过测试,认定下载发生于“设备开机并连接上A/C电源的几分钟后”。iOS 7下载完成之后系统不会自动进行安装,这个步骤需要用户本人的许可。
事实上,这不是苹果第一次强制推行新的iOS系统。早在2012年,iOS 6就通过自动下载的手段悄然进驻iOS 5设备之中。不过,此举还是引起了部分用户的不满,因为iOS 7的大小对于不少人那16GB的空间来说还是显得有些大了,尤其是在安装文件无法删除的情况下。
软媒旗下软件:
IT之家,软媒旗下科技门户网站 - 爱科技,爱这里。
Copyright (C) , All Rights Reserved.

我要回帖

更多关于 微信强制推送 的文章

 

随机推荐