iOS6和iOS7处理push不同之处,解决反复push,-(void) application: didReceiveRemoteNotification: fetchCompletionHandl
如果读者已经知道push的基本知识,本文仅仅是解决一些适配,兼容问题。如果对push 不甚了解,參考以下的文章
1.【iOS push全方位解析】(一) push的概述
2.【iOS push全方位解析】(二) 生成push证书,生成Provisioning Profile
3. 【iOS push全方位解析】(三)一个极简的demo。并測试一下push
======================正文=======================
client须要处理三中情况:
1. client在前台。一般是弹窗
● iOS6 的-(void) application: didReceiveRemoteNotification:被调用
● iOS7 的-(void) application: didReceiveRemoteNotification: fetchCompletionHandler:被调用
所以,为了兼容iOS6.通常的做法是,在-(void) application: didReceiveRemoteNotification: fetchCompletionHandler:中调用-(void) application: didReceiveRemoteNotification: 方法。
● push处理模块,推断一下程序是否是活跃 [UIApplication sharedApplication].applicationState == UIApplicationStateActive。
进而推断是否须要弹出对话框。
2. client在后台。可是还活着
大致原理同第一条,注意处理是否弹框。
3. client被杀死的状态。进来push消息。滑动(点击)push消息调起client。
● iOS 6调用 -(void) application: didFinishLaunchingWithOptions:带有launchDictionary。里面包括了push消息
须要简单处理一下,获取真正的内容[launchOptions objectForKey:UIApplicationLaunchOptionsRemoteNotificationKey]
● iOS 7以后调用两个方法:
-(void) application: didFinishLaunchingWithOptions:
-(void) application: didReceiveRemoteNotification: fetchCompletionHandler:
这样就有一个坑。iOS7以上,可能就反复处理同一个push消息了。
【解决】:因为仅仅有iOS7以上都会调用-(void) application: didReceiveRemoteNotification: fetchCompletionHandler:方法。
那么。为了兼容iOS6:在-(void) application: didFinishLaunchingWithOptions:中仅仅处理iOS6。
4.如今的APP都有一个启动图过程。如果push消息过来。APP正好是被杀死状态,且如果启动后有启动图。
这中push拉起APP后是直接处理push的,不弹框。
【解决】首先想到的方法是:暂存这个push消息。然后等启动图完了再展示push内容。注意,等到启动图完毕,再使用push模块
[UIApplication sharedApplication].applicationState == UIApplicationStateActive就不好用了。由于此时APP应该是活跃的了,就须要弹框了。
所以。须要push模块支持一个强制不弹框的接口。
iOS6和iOS7处理push不同之处,解决反复push,-(void) application: didReceiveRemoteNotification: fetchCompletionHandl的更多相关文章
- 适配iOS6与iOS7
适配屏幕其实很简单,但为了保持兼容性以及写的代码的通用性,以及最小的改动代码,本人按照如下的一种方式来适配,可以一劳永逸. 1. 先定义几个宏,分辨表示应用可以使用区域的高度,屏幕可用区域的高度,屏幕 ...
- ios6和ios7禁止屏幕旋转
ios6和ios7禁止屏幕旋转 - (BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)toInterfaceOr ...
- IOS6和IOS7的屏幕适配问题
自从IOS7出来以后,以前写在IOS6上或者更低版本的程序,跑在IOS7的模拟器上就会出现一些问题.最大的问题就是,所有的UI空间都会统一向上移动20个点(如果空间的y值为0,就会被StatusBar ...
- iOS6和iOS7代码的适配(3)——坐标适配
由于iOS7里面status bar和视图是重叠在一起了,所以应用的y坐标就没法和以前一致了,需要重新计算设定.基本上,你的应用用Xcode5运行一下就能看见这个问题,这里写了一个最简单的例子,一个V ...
- iOS6和iOS7代码的适配(1)
苹果的iOS7推出后,对于所有的应用来说都提出了一个天然的需求--适配不同版本的SDK.目前来说,用iOS6的SDK生成的应用,可以在iOS7的系统上跑,UI上也保持了原来的风格样式,这是苹果做的向下 ...
- 如何解决iOS6、iOS7 3.5寸和4.0寸屏的适配问题?不要写两个xib文件
如何解决iOS6.iOS7 3.5寸和4.0寸屏的适配问题?不要写两个xib文件
- 解决xib布局方式支持ios6,ios7
xcode5 中的界面布局 根据sdk 分成ios7.0 and Later 和 ios6.1 and Earlier 两种,那如何xib同时支持 ios6 和ios7 的界面呢 方法如下: 在xco ...
- iOS6和iOS7代码的适配(5)——popOver
popOver这个空间本身是iPad only的,所以iPhone上见不到,我记得微信上有个这样的弹出框,有扫一扫等几个菜单项,估计这是腾讯自己实现的,用于菜单的扩展. popOver从iOS6到iO ...
- 如何解决git====push 过程中出现的。error: failed to push some refs
当我们在利用git push 文件到仓库时出现了一下问题: ! [rejected] master -> master (fetch first)error: failed to push s ...
随机推荐
- JavaScript变量提升(Hoisting)的小案例
变量提升(Hoisting)的小案例 执行以下代码的结果是什么?为什么? 答案 这段代码的执行结果是undefined 和 2. 这个结果的原因是,变量和函数都被提升(hoisted) 到了函数体的顶 ...
- js实现点击复制网页内容(基于clipboard.js)
浏览网页过程中会遇到点击复制链接地址的情况,下面就介绍一种实现方法,该方法是基于clipboard.js: 官网地址:https://clipboardjs.com/: clipboard.js使用比 ...
- COGS——T 886. [USACO 4.2] 完美的牛栏
http://www.cogs.pro/cogs/problem/problem.php?pid=886 ★★☆ 输入文件:stall4.in 输出文件:stall4.out 简单对比时间 ...
- kqueue演示样例
网络server通常都使用epoll进行异步IO处理,而开发人员通常使用mac,为了方便开发.我把自己的handy库移植到了mac平台上. 移植过程中,网上竟然没有搜到kqueue的使用样例.让我吃惊 ...
- Xamarin部署时遇到错误: Failure [INSTALL_FAILED_UPDATE_INCOMPATIBLE]
1 把adb命令加入到环境变量. ADB 的位置:C:\Users\USER\AppData\Local\Android\android-sdk\platform-tools 2. 卸载包,执行(是a ...
- hdu 2032 一维数组实现杨辉三角
杨辉三角 Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others) Total Submi ...
- Android 6.0 开发人员对系统权限的使用与练习(Permissions Best Practices)
Permissions Best Practices 在安装的过程中,用户非常easy忽略权限请求. 假设一个用户相应用感觉沮丧或者操心泄漏个人信息,那么这些用户就会不用他或者卸载它. 怎样规避这个问 ...
- HTML5客户端数据存储机制Web Storage和Web SQL Database
引言 html5本地存储可以选择两种方式,一种是本地存储,一种是sqlite. 比如开发html5的购物车功能,就可以考虑选择其中之一,进行本地存储与操作. 又或者保存用户登录信息,可以使用local ...
- iOS学习必须了解的七大手势
文章只要你有一点点基础应该就可以看的懂,文章只为学习交流 #import "ViewController.h" @interface ViewController () @prop ...
- DGA ngram kmeans+TSNE用于绘图
# -*- coding:utf-8 -*- import sys import re import numpy as np from sklearn.externals import joblib ...