色々なことができるけど、現状では「各種APIとデータベースを兼ね備えたサーバーアプリケーション」という風に認識され、使われていることが多いみたい。
今回はそんなParseの機能の一つであるNotification(Push 通知)を使って、サーバーサイドの開発無しにPush通知を実装してみる。
ちなみに100万リクエスト/月、1GBストレージまでは無料で使える。
ユーザー登録
www.parse.comへアクセスし、Try it freeボタンからサクっとユーザー登録を行う。
Quick Start
登録が済んだらログインする。自動生成とかスケルトンとかに抵抗がなければそのままQuick Start Guideへ進むと下記のページになる。
Choose your platformでAndroidを選択し、未作成であればCreate an Appあたりからアプリケーション作成を行う。
さらにBlank Android project with Parse SDK(.zip)というリンクから空のAndroidプロジェクトファイルをダウンロードする。Eclipseでダウンロードしたzipファイルを既存のプロジェクトとしてインポートする。
Quick Startの中身
自動生成とかスケルトンとかに抵抗がある場合、何を自動生成しているのか不安でいっぱいになるので、何が起きているのかを簡単にまとめておく。
- 空のAndroidプロジェクトを作成
- SDK(zipファイル)をlibsディレクトリへ設置
- プロジェクトのライブラリエクスポート設定に上記SDKを追加
- Applicationクラスを継承した新規クラスを作成し、onCreateメソッドをオーバーライド。さらにParse.initialize()メソッドの呼び出しを追加
- AndroidManifest.xmlのapplicationタグにandroid:name="作成したAppicationクラス名"を追記
といったことをやったのと同じ。
AndroidManifest.xmlの設定
AndroidManifest.xmlにサービスとブロードキャストレシーバの設定を追加する。
<!-- サービスを登録 --> <service android:name="com.parse.PushService" /> <!-- ブロードキャストレシーバを登録 --> <receiver android:name="com.parse.ParseBroadcastReceiver"> <intent-filter> <action android:name="android.intent.action.BOOT_COMPLETED" /> <action android:name="android.intent.action.USER_PRESENT" /> </intent-filter> </receiver>パーミッションの利用設定を追加する。 ※必要最低限のみなので公式ドキュメントのチュートリアルとは少し異なる ※公式ドキュメントには書いていなかったけど、ACCESS_NETWORK_STATEも必要だった
<uses-permission android:name="android.permission.INTERNET" /> <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE"/>
参考 : Push Notifications - Parse.com
Application IDとClient Keyの設定
Parseサイトにログインした状態で、アプリケーションのOverviewページを開くと、Application IDとClient Keyが表示されるのでこれをメモしておく。
ParseApplicationクラスのonCreateメソッドに記載されている、Parse.initializeの引数を上記の内容に書き換える。Push通知を受け取るためのコードの追加
前項同様ParseApplicationクラスのonCreateメソッドに下記のコードを追加する。
PushService.subscribe(this, "", ParseStarterProjectActivity.class);
Push通知送信
Parseサイトにログインした状態で、アプリケーションのPush Notificationsページを開くと簡単なPush通知送信管理画面が開くので、適当なメッセージを記入してボタンを押すだけ。
REST APIでPush通知を行う
ParseサイトでのPush通知は、REST APIで以下のリクエストを送信しているっぽい。
送信する内容と受け側のアプリをカスタマイズすれば「Push通知をステータスバーに表示する」というデフォルト動作を変更することができる。
Header
項目 | 値 |
URL | https://api.parse.com/1/push |
Method | POST |
X-Parse-Application-Id | アプリケーションID |
X-Parse-REST-API-Key | REST APIキー |
Content-Type | application/json |
Body
{ "channels": [ "" ], "type": "android", "data": { "alert": "This is test message." } }
Push通知で独自の動作を実装する
配信側
REST APIへ送信するJSONデータのalertをactionに変更する。(以下例)
{ "channels": [ "" ], "type": "android", "data": { "action": "jp.blogspot.tomokey.action.SAMPLE", "msg": "This is test message." } }
受信側
ブロードキャストレシーバを作成し、インテントフィルタのactionに上記のjp.blogspot.tomokey.action.SAMPLEを指定する。ブロードキャストレシーバの実装は、以下のようにcom.parse.DataをキーとしてJSONデータを取得すれば、あとはお好みの処理を。
public class MyReceiver extends BroadcastReceiver { public void onReceive(Context ctx, Intent intent) { try { // データを取得 Bundle extra = intent.getExtras(); String data = extra.getString("com.parse.Data"); // jsonオブジェクトへパース JSONObject json = new JSONObject(data); String msg = json.getString("msg"); Toast.makeText(ctx, msg, Toast.LENGTH_LONG).show(); } catch (JSONException e) { e.printStackTrace(); } }
念のためブロードキャストレシーバの定義も。
<receiver android:name="MyReceiver"> <intent-filter> <action android:name="jp.blogspot.tomokey.action.SAMPLE"/> </intent-filter> </receiver>
0 件のコメント:
コメントを投稿