iOSのプッシュ通知では、デバイスにはバナーを出さずにプッシュ通知を送る、サイレントプッシュという機能があります。mBaaSであれば、その実装もとても簡単です。今回はその解説になります。
プッシュ通知の実装は同じ
プッシュ通知の実装自体は通常通りです。Swift SDKでプッシュ通知を送ってみようなどを確認の上、実装してください。
プッシュ通知の受信メソッド
プッシュ通知が届くと 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
は有効にします。
プッシュ通知を送信する
このプッシュ通知を送信すると、userInfoに管理画面で指定したJSONが入り、さらにバックグラウンドでデータストアへの登録なども可能になります。 completionHandler
はメッセージが入ったプッシュ通知の時に呼んだとしても特に問題ないようです。
まとめ
サイレントプッシュの使い方としては、デバイスに何も表示しないようにしつつ位置情報を取得(そういったアプリであれば)したり、アプリの設定をアップデートすると言った使い方が考えられます。30秒程度の短い時間しか動かせないので、データストアから巨大なデータを取得するのは難しいですが、情報を保存したりするのは簡単に実現できるでしょう。