7か国(ローカリゼーションと国際化)をサポートする単一のAndroidアプリケーションがあります。アプリケーションの機能と言語は、デバイスのロケールに基づいて変更されました。このアプリケーションの GCM プッシュ通知を実装する必要があります。要件:
- 単一の GCM アカウントで 7 つの異なる言語でプッシュ通知を送信できますか?
- デバイスのローカル言語でプッシュ通知を表示する方法はありますか?
7か国(ローカリゼーションと国際化)をサポートする単一のAndroidアプリケーションがあります。アプリケーションの機能と言語は、デバイスのロケールに基づいて変更されました。このアプリケーションの GCM プッシュ通知を実装する必要があります。要件:
Ascorbinによって提案されたアプローチを取るか、Appleがプッシュ通知に持っているものと同様のものを実装することができます。
サーバーは、メッセージのキーとなるパラメーターを使用してGCMメッセージを送信できます。Yout Androidアプリには、可能なキーごとに、7つの言語のそれぞれで表示される文字列が含まれている必要があります(strings.xmlの複数のコピーを使用)。次に、アプリのGCM受信者はサーバーからキーを取得し、それに一致するリソース文字列を取得します(デバイスのロケールに一致する文字列を自動的に取得します)。このようにして、サーバーでのローカリゼーションについて心配する必要はありません。このアプローチの欠点は、すべてのメッセージをアプリで事前定義する必要があることです。
Appleのように、メッセージキーにパラメータを追加することもできます。たとえば、サーバーはkey="NEW_MAIL_FROM"およびparam1="John"を送信します。アプリはそのキーの文字列リソースを見つけます(デバイスが英語ロケールを使用していると仮定します)-「あなたは{0}"からのメッセージがあります-そしてparamをJohnに置き換え、メッセージ「You have amessagefromJohn」を表示します。ロケールが異なるデバイスは、異なる言語でメッセージを表示します。
そのサーバー側を実装できます。トークンの送信でGCMを登録した後、デバイスのロケールも送信します。そして、ローカライズされたメッセージで即座にユーザーに通知します。
ペイロードは「ソート」するものであり、多くの情報を渡すのは得策ではありません。
一方、固定メッセージがある場合は、次を使用できます。
private void handleMessage(Intent intent) {
// server sent key-value pairs
String name_of_resource = intent.getExtra("message_id");
int id = getResources().getIdentifier(name_of_resource, "string", getPackageName());
if (id != 0) {
String text = getString(id); // the text to display
// generates a system notification to display here
}
}
受信データの処理については、 http://developer.android.com/google/gcm/gcm.html#received_dataを参照してください。
デバイスがサーバーに登録されると、ロケールが送信されます。したがって、デバイスのロケール グループを作成し、対応する言語でメッセージを送信できます。