【parse】ParseのAndroid Guideを勝手に日本語訳 ~Push Notifications~
公開日:
:
parse
Parseのドキュメントの日本語訳です。
プッシュ通知
アプリケーションへのプッシュ通知の追加
プッシュ通知は、ユーザーがアプリケーションを活動させてない時でさえも新しいメッセージやイベントをユーザーに知らせることができます。Android端末で、端末がプッシュ通知を受け取った時、あなたのアプリケーションとメッセージがステータスバーに表示されます。ユーザーが通知をタップすると、これらはあなたのアプリケーションに通知されます。通知は、マーケティングキャンペーンの様に全ユーザーに対してブロードキャストすることもできますし、個別のお知らせの様に一部のユーザーに対して行うこともできます。
Parseライブラリはプッシュ通知を、バックグランドサービスの実行で提供しており、これがParseのプッシュサーバーとインターネットで接続された状態になります。このプッシュ通知はAndroid1.5以降で互換性があり、Googleのアカウントを必要としていません。
プッシュ通知を使うために、このバックグラウンドサービスを登録しなければなりません。AndroidManifest.xmlのタグの直前に以下の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>
次に、ノーティフィケーションを表示するパーミッションが必要です。AndroidManifest.xmlファイルにこれらのパーミッションの表記があるか確認して下さい。一般にタグの直前にあります。
<uses-permission android:name="android.permission.INTERNET" /> <uses-permission android:name="android.permission.RECEIVE_BOOT_COMPLETED" /> <uses-permission android:name="android.permission.VIBRATE" />
最後に、あなたのアプリケーションはparseサーバーに通知の準備が出来たことを知らせます。始めるのに最も簡単な方法は、アプリケーションに、空の文字列で表されるグローバルブロードキャストチャネルを登録することです。メインアクティビティのonCreateメソッドなどの、有効なアクティビティ内のどこかにこの行を追加して下さい。
PushService.subscribe(this, "", YourActivity.class);
この時点で、プッシュ通知の準備が整いました。(アカウントのダッシュボードにある)”Push Notifications”タブで、あなたのアプリの全ユーザーに対するテキストボックスが提供されています。iOSと違ってAndroidのプッシュ通知はエミュレータで動作するのでエミュレータでテストすることができます。
チャネル
チャネルはユーザーの一部にプッシュ通知を送るのに柔軟な方法です。チャネルは文字で始まり、アルファベット、アンダースコア、ダッシュを含む文字列で識別されます。チャネルは使用される前に明示的に作成される必要はありません。あなたのアプリケーションの各インスタンスが一度にいくつもにチャネルを登録することができます。チャネルの登録は1つのメソッドで行えます。
PushService.subscribe(context, "yourChannelName", YourActivity.class);
与えられたActivityクラスはこのチャネルの通知にユーザーが応えた時に実行されるActivityを指定します。
これは、異なる方法で異なるチャネルのプッシュ通知を処理することができることを意味します。
チャネルの非登録も1つのメソッドで行います。
PushService.unsubscribe(context, "yourChannelName");
登録メソッドも非登録メソッドもそれらが呼ばれたスレッドをブロックしません。ネットワークにアクセスできない場合、登録情報は端末のディスクにキャッシュされネットワークが有効になり次第、Parseサーバーに送信されます。これは登録を管理している間に、スレッドやコールバックを気にする必要がないことを意味しています。
チャネルを様々な方法で使用することができます。例えば、
- スポーツスコアアプリは、ゲーム終了時に各チームのファンにスコア送信するように、チーム毎のチャネルを持つかもしれません(例えば、’giants_scores’, ‘yankees_scores’)。
- グループチャットアプリは、グループ内で誰かがチャットしたときにメッセージが送れるように、各グループ毎にチャネルを持ちます(例:’group_1′, ‘group_2′)。
- 旅行アプリは、ユーザーが乗るフライトの遅延を知らせるために、フライト毎のチャネルを持ちます。(例:’united_256′, ‘delta_30’)
- チェスゲームアプリは、駒の移動した時にメッセージを送るために、対戦毎にチャネルを作成します。(例:’match_1′, ‘amtch_2′)
- An app with user accounts might have a channel for each user (e.g. ‘user_1′, ‘user_2′) so that it can send messages to a user across all their devices and have users follow others in the app.
慣例によって、全てのユーザーにブロードキャストメッセージを送信するアプリは、各ユーザーに空の文字列チャネルを登録するユーザーを持ち、ブロードキャストとみなされる。
チャネルを処理するためのインターフェイスをユーザーに提供するために、有効なチャネルの集合にアクセスすることはしばしば有効です。
Set<String> setOfAllSubscriptions = PushService.getSubscriptions();
通知の送信
Parseを使ったプッシュ通知の送信するたくさんの方法があります。
webインターフェイス
プッシュ通知を送信する最も簡単な方法はParseアプリケーションのコンソールから送信する方法です。”Push Notifications”タブを表示して、1つ以上のアプリのチャネルにメッセージを送るために与えられたフィールドを使って下さい。REST docsではwebインターフェイスの各フィールドの振る舞いについて説明しています。
アプリケーションから
“Push Ntifications”タブの”Client push enabled?”にYesを設定すれば、クライアントSDKのParsePushオブジェクトを使って、アプリから直接プッシュ通知を送信することが出来ます。より細かいセキュリティの設定は次回のリリースで予定しています。
システムトレイ通知として表示されるアラートを、全てのAndroid端末へグローバルブロードキャストで送信するには、次のようにします。
ParsePush push = new ParsePush(); push.setMessage("Red Sox win 7-0!"); push.sendInBackground();
デフォルトでは、Androidクライアントから送信されたプッシュ通知はAndroid端末にのみ向けられます。なぜなら、iOSのプッシュ通知はAppleの証明書が必要だからです。もし既にiOSのプッシュ通知を設定し、iOSとAndroid端末にアラートを送信したいのであれば、土のようにします。
ParsePush push = new ParsePush(); push.setPushToIOS(true); push.setMessage("Red Sox win 7-0!"); push.sendInBackground();
Androidの”REDSOX”と”YANKEES”チャネルのみを対象とし、Androidのカスタムデータを使ったIntent、今から1日の有効期限、のような、より複雑な通知を送るには次のようにします。
LinkedList<String> channels = new LinkedList<String>(); channels.add("REDSOX"); channels.add("YANKEES"); ParsePush push = new ParsePush(); push.setChannels(channels); push.setExpirationTimeInterval(86400); push.setData(new JSONObject("{\"action\": \"com.example.UPDATE_SCORE\", \"inning\": \"4th\", \"score_REDSOX\": \"5\", \"score_YANKEES\": \"0\"")); push.sendInBackground(); [\java] 詳細とプッシュ送信メソッドの他の方法については<a href="variants " target="_blank">Android Javadoc</a>をご確認下さい。 </p> <h4>REST API</h4> <p> <a href="https://www.parse.com/docs/rest#push" target="_blank">REST API</a>を使ってどの端末からでもプッシュ通知を送信することができます。 </p> <h3>通知の受信</h3> <p> 登録したチャネルのプッシュ通知を受取るユーザーのシステムトレイメッセージを簡単に表示することができます。これはweb UI経由でのメッセージ送信のデフォルト動作で、クライアントSDKのsetMessageメソッドを呼ぶか、REST APIで説明されている"data"ディクショナリに"alert"か"title"エントリを設定することでも行えます。 クライアントSDKかREST API経由でプッシュ通知を送信する場合、(プッシュ通知をタップした時ではなく、)プッシュ通知を受信した時に発行されるIntentを指定することも出来ます。これは通知時の処理をカスタムすることを可能にするし、また、システムトレイに表示するかどうかにも使用されます。通知処理のカスタマイズの実装するには、プッシュ通知データディクショナリに"action"エントリに発行したいIntentアクションを設定します。これはREST APIドキュメントで説明されています。Androidガイドラインでは他の実行中のアプリとの間で名前空間の衝突を避けるためにアクションのプレフィックスにアプリのパッケージ名を付加することを勧めています。 もしあなたのコードがcom.exampleパッケージにあって、レシーバをcom.example.UPDATE_SCOREアクションに登録する場合、AndroidManifest.xmlファイルの既存のParseBroadcastReceiverブロックに次のXMLを追記します。 1 このカスタムレシーバはactionパラメータにcom.example.UPDATE_SCOREが設定されたプッシュ通知を受信したときに呼び出されます。レシーバから渡されたIntentオブジェクトは2つの便利はマップを持ったBundleを含んでいます。"com.parse.Channel"キーはメッセージが送信されたチャネルを表す文字列を指し示します(このキーは既に紹介した複数チャネルを対象としたプッシュ通知として廃止予定ですが、単一チャネル通知のために機能し続けます)。"com.parse.Data"キーは、プッシュ通知に設定された"data"ディクショナリをJSONにエンコードした文字列を示しています。例として、次のコードではJSONプッシュ通知を解析してAndroidエミュレータコンソールにそれをロギングします。 1 public class MyCustomReceiver extends BroadcastReceiver { private static final String TAG = "MyCustomReceiver"; @Override public void onReceive(Context context, Intent intent) { try { String action = intent.getAction(); String channel = intent.getExtras().getString("com.parse.Channel"); JSONObject json = new JSONObject(intent.getExtras().getString("com.parse.Data")); Log.d(TAG, "received action " + action + " on channel " + channel + " with extras:"); Iterator itr = json.keys(); while (itr.hasNext()) { String key = (String) itr.next(); Log.d(TAG, "..." + key + " => " + json.getString(key)); } } catch (JSONException e) { Log.d(TAG, "JSONException: " + e.getMessage()); } } }
トラブルシューティング
もしプッシュ通知が機能しない場合、以下をお試しください。
- AndroidManifest.xmlファイルにサービスとパーミッションを適切な場所に記述したか確認して下さい。フォーマットを間違えると警告がないエラーとなり得ます。
- 有益なエラーメッセージがあれば、adb logcat | grep -i parseの出力結果を確認して下さい。
- feedback@parse.comまでご連絡下さい!
関連記事
-
-
【parse】ParseのAndroid Guideを勝手に日本語訳 ~Objects~
Parseのドキュメントの日本語訳です。 初めての翻訳に挑戦です。ウェルカム添削 目次
- PREV
- デザインパターンを学ぶ
- NEXT
- なんか色々webのサービス・技術を集めてみる