プッシュ通知はアプリを起動させる動線につなげるのが基本ですが、ユーザには知らせずにアプリ側で何らかの処理を行うと言った際にも利用できます。今回はその一つ、Silent Remote Push Notificationを使ってみます。なお、通常のプッシュ通知は受け取れるようになっていることとします。
Silent Remote Push Notificationとは?
Silent Remote Push NotificationはiOS8から利用できるようになったプッシュ通知の種類で、スマートフォンには一切表示されずに配信できるプッシュ通知です。数十秒間アプリ内のコードを動作させられるので、その間で処理判定を行うことができます。
利用するには
通常のプッシュ通知の設定に加えて、Xcode側のプロジェクト設定で、Background Modesの中のRemote notificationsを有効にします。
また、コードを次のように記述します(Swift)。
func application(application: UIApplication, didReceiveRemoteNotification userInfo: [NSObject : AnyObject], fetchCompletionHandler completionHandler: (UIBackgroundFetchResult) -> Void) { print("userInfo = \(userInfo)") // 何かの処理 // 結果による処理判定 var result = UIBackgroundFetchResult.NewData switch result { case UIBackgroundFetchResult.NewData: print("NewData") case UIBackgroundFetchResult.Failed: print("Faild") case UIBackgroundFetchResult.NoData: print("NoData") } completionHandler(result) }
後は通常通りコンパイルしてスマートフォンにインストールしてください。
プッシュ通知を作成する
mBaaSでプッシュ通知を作る際のコツとして、 content-available
を有効にしてプッシュ通知を作成してください。後は通常のプッシュ通知と変わりません。
プッシュ通知を受け取ると次のようにメッセージが入ってきます。
userInfo = [aps: { alert = { body = Silent; title = "<null>"; }; "content-available" = 1; sound = default; }, a: b, com.nifty.PushId: 9sjptgLyknKMKzRk]
このように Payload が入ってきますので(a: b が独自のJSONです)、処理判定に使ったりすることができます。なお、スマートフォン側には何も通知されません。
Silent Remote Push Notificationの利点として、ユーザ側に何らかの通知を出すことなくアプリ内のデータをアップデートしたり、現在位置の取得もできます。ぜひ活用してください。