はじめまして、Androidエンジニアになってしまったちくりんです。
Androidの研修という名の自主学習が終了し、最近やっと業務に関わることになりました。
先日、比較的最近更新されたParseのPush通知を調べる機会があったので、この場を借りて発信させていただきます。
概要
本記事は、AndroidでParseを用いてPush通知を行う場合の手順になります。
ほぼ10月に公開された1.7.1より、使い方が多少変わり、盛大にはまったので、その辺りをメインに記述します。
要点をまとめると以下のとおりです。
- 1.7.1以前は、通知タップ後の処理について気にする必要が無かった
- 従来の実装のまま通知をタップするとActivityNotFoundExceptionが発生する
今回説明する方法では、Parseの使い方を調べている際にGoogle先生が教えてくれた
- PushService.setDefaultPushCallbackを使う〜
- BroadcastReceiverを拡張してonReceiveする〜
は使いません。というか、使わなくなりました。
では、本題に入ります。
Pushの変更について
これまで使用していたPushService.setDefaultPushCallbackメソッドが非推奨になりました。
(厳密にはPushService.setDefaultPushCallbackの機能はParsePushBroadcastReceiverに移されました)
これに伴い、実装方法をいくつか変える必要があります。
また、非推奨になったメソッドが知りたい場合は、公式のAPIリファレンスを参照してください。
Deprecated List
新しいバージョンでPush通知を送る方法について
まず、これまで使用していたPushService.setDefaultPushCallbackが使えなくなったため、通知をタップした後のActivity遷移が出来なくなっています。これまでParseを使用した場合、通知センターへの表示やタップ後の遷移も宜しくやってくれたそうですが、それらを実装する必要があります(今でも通知センターへの表示はParseがやってくれます)。
基本的にはParseの公開しているスタートアップに従えば大丈夫です。公式の内容でも、更新されていない情報も見受けられたので、見るページには注意したほうが良さそうですが…
Android Push Notifications | Parse
スタートアップの手順を進めた後、通知タップによるActivityの遷移についてです。
次の3つを行う必要があります。
- ParsePushBroadcastReceiverを拡張した独自レシーバの実装
- マニフェストファイルに該当するレシーバを登録
- 独自レシーバで通知をキャッチした後に、目的のActivityに対してIntentを発行
ParsePushBroadcastReceiverについて
このクラスを拡張することで、ParseからのPush通知をハンドルするメソッドをオーバーライドすることが出来ます。ハンドルしたいタイミングによって、いくつかメソッドが用意されているので、アプリに合わせて必要なメソッドをオーバーライドします。
それぞれのタイミングは次のようになっています。
- getNotification … 通知の表示そのものをカスタマイズしたい場合
- onPushReceive … 通知を受信した
- onPushOpen … 通知をタップした
- onPushDismiss … 通知を解放した
通知をタップしてアプリを起動する場合、onPushOpenをオーバーライドすればよいでしょう。
一つ注意すべき点は、1.7.1以前に使用していたonReceiveを実装すると、それ以外のメソッドが呼ばれなくなるようです。
関連する質問がstack overflowに存在するので、以下も参照。
android – Exception when opening Parse push notification – Stack Overflow
以上です。
最後に
今回、AndroidにParseを用いてPush通知を送る際の、SDK 1.7.1以降での実装法について紹介しました。
SDKの更新以外にも、Pushを送る際にA/Bテストが行える機能などが追加され、対応がいっぱいいっぱいな所ですが、魅力的なサービスなのでちょいちょい追いかけて行きたいと思います。
多少道草を食っていたため、3年遅れの2014年新卒ですが無害です。 はじめてのWeb系と思いきや、いつの間にかAndroidに関わることになりました。Android初心者ですがご容赦を。