※ 本件、結論から言うと未解決です。

Remote Notificationをバックグラウンド受信したときに以下のメソッドが呼ばれます。俗に言うSilent Notificationです。

application(_ application: UIApplication,
didReceiveRemoteNotification userInfo: [NSObject : AnyObject],
      fetchCompletionHandler handler: (UIBackgroundFetchResult) -> Void)

iOS 7 + iPhone 5で呼ばれていましたが、iOS 8 + iPhone 6では、ほとんどの呼ばれなくなりました。PUSH通知自体は届いていて表示されますが、上記のメソッドが呼ばれません。不思議なのはXcodeから起動した場合は呼ばれることです。

Stackoverflowでも同様の現象で困っている方がいました。

IOS 8 Silent push notification not working without Xcode – Stack Overflow

このスレッドの中にXcodeではなく、電源に接続している時のみバックグラウンド受信メソッドが呼ばれるという話だったので、実際に試してみたところ呼ばれました。なんとも不思議な現象です。iOS 8 SDKのバグだと思います。

いろいろ検索しましたが、この問題に言及しているのはStackoverflowの上記スレッドしか見つけられませんでした。問題が起きたアプリはそれなりのボリュームのものだったので、特殊なケースかもしれないと思い以下のことを試しました。

  • 新しくアプリを作り直し
  • Bundle Identifierを変更
  • PUSH用の証明書、プロビジョニングファイルを作り直し

しかし結果は同様でした。iOS 8ではどの環境でも起きるか、もしくは特定の端末で起きるのかだと思います。

【iOS7】プッシュ通知のバックグラウンド処理でハマったメモ – Over&Out その後

上記記事を参考に

  • register~ の前に unregisterForRemoteNotifications を呼ぶ
  • setMinimumBackgroundFetchIntervalにUIApplicationBackgroundFetchIntervalMinimumをセット

も試しましたが結果は同様でした。