2012年10月15日月曜日

AndroidでParse(Baas)を使ってPush通知する

巷で流行のBaaS(Backend as as Service)に、Parseというのがある。
色々なことができるけど、現状では「各種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の中身

自動生成とかスケルトンとかに抵抗がある場合、何を自動生成しているのか不安でいっぱいになるので、何が起きているのかを簡単にまとめておく。

  1. 空のAndroidプロジェクトを作成
  2. SDK(zipファイル)をlibsディレクトリへ設置
  3. プロジェクトのライブラリエクスポート設定に上記SDKを追加
  4. Applicationクラスを継承した新規クラスを作成し、onCreateメソッドをオーバーライド。さらにParse.initialize()メソッドの呼び出しを追加
  5. AndroidManifest.xmlのapplicationタグにandroid:name="作成したAppicationクラス名"を追記

といったことをやったのと同じ。


AndroidManifest.xmlの設定

AndroidManifest.xmlにサービスとブロードキャストレシーバの設定を追加する。

  1. <!-- サービスを登録 -->  
  2. <service android:name="com.parse.PushService" />  
  3.   
  4. <!-- ブロードキャストレシーバを登録 -->  
  5. <receiver android:name="com.parse.ParseBroadcastReceiver">  
  6.   <intent-filter>  
  7.     <action android:name="android.intent.action.BOOT_COMPLETED" />  
  8.     <action android:name="android.intent.action.USER_PRESENT" />  
  9.   </intent-filter>  
  10. </receiver>  
パーミッションの利用設定を追加する。 ※必要最低限のみなので公式ドキュメントのチュートリアルとは少し異なる ※公式ドキュメントには書いていなかったけど、ACCESS_NETWORK_STATEも必要だった
  1. <uses-permission  
  2.   android:name="android.permission.INTERNET" />  
  3. <uses-permission  
  4.   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メソッドに下記のコードを追加する。

  1. PushService.subscribe(this"", ParseStarterProjectActivity.class);  

Push通知送信

Parseサイトにログインした状態で、アプリケーションのPush Notificationsページを開くと簡単なPush通知送信管理画面が開くので、適当なメッセージを記入してボタンを押すだけ。


REST APIでPush通知を行う

ParseサイトでのPush通知は、REST APIで以下のリクエストを送信しているっぽい。
送信する内容と受け側のアプリをカスタマイズすれば「Push通知をステータスバーに表示する」というデフォルト動作を変更することができる。

Header

項目
URLhttps://api.parse.com/1/push
MethodPOST
X-Parse-Application-IdアプリケーションID
X-Parse-REST-API-KeyREST APIキー
Content-Typeapplication/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データを取得すれば、あとはお好みの処理を。

  1. public class MyReceiver extends BroadcastReceiver  
  2. {  
  3.   public void onReceive(Context ctx, Intent intent)  
  4.   {  
  5.     try  
  6.     {  
  7.       // データを取得  
  8.       Bundle extra = intent.getExtras();  
  9.       String data = extra.getString("com.parse.Data");  
  10.         
  11.       // jsonオブジェクトへパース  
  12.       JSONObject json = new JSONObject(data);  
  13.         
  14.       String msg = json.getString("msg");  
  15.       Toast.makeText(ctx, msg, Toast.LENGTH_LONG).show();  
  16.     }  
  17.     catch (JSONException e)  
  18.     {  
  19.       e.printStackTrace();  
  20.     }  
  21. }  

念のためブロードキャストレシーバの定義も。

  1. <receiver android:name="MyReceiver">  
  2.   <intent-filter>  
  3.     <action android:name="jp.blogspot.tomokey.action.SAMPLE"/>  
  4.   </intent-filter>  
  5. </receiver>  

0 件のコメント:

コメントを投稿