ニフクラ mobile backend(mBaaS)お役立ちブログ

スマホアプリ開発にニフクラ mobile backend(mBaaS)。アプリ開発に役立つ情報をおとどけ!

Swiftでサイレントプッシュを送る

f:id:mbaasdevrel:20181006073812p:plain

iOSのプッシュ通知では、デバイスにはバナーを出さずにプッシュ通知を送る、サイレントプッシュという機能があります。mBaaSであれば、その実装もとても簡単です。今回はその解説になります。

プッシュ通知の実装は同じ

プッシュ通知の実装自体は通常通りです。2018年10月版:Xcode 9.4.1 + Swift 4.1.2 + NCMB iOS SDK 3.0.0でのプッシュ通知実装 - ニフクラ mobile backend(mBaaS)お役立ちブログなどを確認の上、実装してください。

プッシュ通知の受信メソッド

プッシュ通知が届くと didReceiveRemoteNotification が呼ばれます。サイレントプッシュの場合、ここで completionHandler を実行するだけです。

func application(_ application: UIApplication, didReceiveRemoteNotification userInfo: [AnyHashable : Any], fetchCompletionHandler completionHandler: @escaping (UIBackgroundFetchResult) -> Void) {
  if userInfo.count > 0 {
    print(userInfo)
  }
  let obj = NCMBObject(className: "RemotePush")
  obj?.setObject("Hello", forKey: "message")
  obj?.save(nil)
  // サイレントプッシュ用
  completionHandler(.noData)
}

プッシュ通知作成時にはメッセージを指定しない

mBaaSでプッシュ通知を作成する際には、メッセージを何も指定しないようにしましょう。その代わりにペイロードの設定と、content-availableは有効にします。

f:id:mbaasdevrel:20181006073928p:plain

プッシュ通知を送信する

このプッシュ通知を送信すると、userInfoに管理画面で指定したJSONが入り、さらにバックグラウンドでデータストアへの登録なども可能になります。 completionHandler はメッセージが入ったプッシュ通知の時に呼んだとしても特に問題ないようです。

まとめ

サイレントプッシュの使い方としては、デバイスに何も表示しないようにしつつ位置情報を取得(そういったアプリであれば)したり、アプリの設定をアップデートすると言った使い方が考えられます。30秒程度の短い時間しか動かせないので、データストアから巨大なデータを取得するのは難しいですが、情報を保存したりするのは簡単に実現できるでしょう。

プッシュ通知 (iOS) : 基本的な使い方 | ニフクラ mobile backend

中津川 篤司

中津川 篤司

NCMBエヴァンジェリスト。プログラマ、エンジニアとしていくつかの企業で働き、28歳のときに独立。 2004年、まだ情報が少なかったオープンソースソフトの技術ブログ「MOONGIFT」を開設し、毎日情報を発信している。2013年に法人化、ビジネスとエンジニアを結ぶDXエージェンシー「DevRel」活動をスタート。