原来以为收到PushKit推送的时候, 程序只是执行PushKit回调中的方法实现的方法 就是:
- (void)pushRegistry:(PKPushRegistry *)registry didReceiveIncomingPushWithPayload:(PKPushPayload *)payload forType:(NSString *)type; 中实现的方法, 结果测试发现, 如果程序在后台的情况确实是这样, 但是如果整个进程都被干掉的时候,就不是只执行回调中的方法,而是系统在某个区域会启动我们的应用,但是我们在前台和后台都看不到。但是执行的效果跟我们主动点击应用图标启动应用一样。我是这样验证的, 我在 - (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions 和我主界面的 -  (void)viewDidAppear:(BOOL)animated; 方法中各发送一个本地推送通知, 发现我都能收到这个通知。
那么问题来了, 我想要知道我该如何区分我的应用是我主动启动的还是被PushKit推送启动的?因为PushKit启动的情况下有些代码我不想执行。  我发现不管哪种情况启动的程序 launchOptions 参数都是nil。 跪求高手指点。

解决方案 »

  1.   

    应用收到通知启动,会调用:- (void)application:(UIApplication *)application didReceiveRemoteNotification:(NSDictionary *)userInfo
    {
          //Application did receive push notification. Do whatever you want to do
    }
      

  2.   

    PushKit 应该收到这个通知- (void)pushRegistry:(PKPushRegistry *)registry didReceiveIncomingPushWithPayload:
    但是这是在应用启动之后了, 而且不管是应用在后台还是说它启动了应用都能收到这个通知