最近在做iOS推送相关需求的时候踩了一些坑。 大概的需求是这样的:推送分2个类型,1.紧急推送 2.普通推送。

  1. 紧急推送:App在前台,需要有个警告框;App在后台,点击推送唤起App,需要警告框。
  2. 普通推送:App在前台,无反应;App在后台,需要进入详情页面。

首先看下iOS相关的大概生命周期

正常打开App

  1. didFinishLaunchingWithOptions(如果是杀死进程,点击消息打开,这里会包含推送消息的字典)
  2. 默认加载第一个ViewController的viewDidLoad函数
  3. applicationDidBecomeActive

进入后台

  1. applicationWillResignActive
  2. applicationDidEnterBackground

后台进入前台

  1. applicationWillEnterForeground
  2. applicationDidBecomeActive

点击推送进入前台

  1. applicationWillEnterForeground
  2. didReceive
  3. applicationDidBecomeActive

我们需要考虑2个情况

  1. 点击推送 App后台唤起
  2. 点击消息 App正常启动

第一个情况:我们可以判断当前状态是applicationWillEnterForeground,然后处理消息 第二个情况:我是这么处理的,第一个加载的ViewController的didLoad函数中,处理didFinishLaunchingWithOptions的消息字典。(暂时没有想到其他方式)

推送工具可以用我的PushMeGod