iOS6和iOS7处理push不同之处,解决反复push,-(void) application: didReceiveRemoteNotification: fetchCompletionHandl

Posted cxchanpin

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了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

4. 给iOS程序加入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的主要内容,如果未能解决你的问题,请参考以下文章

UItextView iOS 7 问题

iOS 7 和 iOS 6 同一个 App 的不同版本

自动布局 iOS7 -> 带状态栏的 iOS6

在Xcode 5.0.1(更新的xcode 6)中为3.5,4.0(更新的4.7和5.5)英寸屏幕开发相同的UI,没有风景,没有iPad,没有故事板

iOS6和iOS7环境下微信登录未显示问题&微信IOS的SDK:isWXAppInstalled总是返回NO和nil

如何在 ios 7 和 ios6 中显示启动画面