chikurin

2014.11.12

ParseのAndroid SDK 1.7.1によるPush通知について

はじめまして、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テストが行える機能などが追加され、対応がいっぱいいっぱいな所ですが、魅力的なサービスなのでちょいちょい追いかけて行きたいと思います。