2013-07-20 7 views
14

Google Playサービスの一部で、Androidとサーバーの両方でJARを使用しない「新しい」GCMを使用しています。 AndroidはGoogle Playのapkを使用してメッセージの登録、受信、さらにメッセージの送信を行います。サーバー側では、GCMと通信するために必要なのは、サーバーへのPOST(XMPPを使用しない場合)です。私はすべて設定しました:私のAndroidアプリは登録し、GCMからのメッセージを待ちます。私のサーバーはGCMと通信でき、メッセージをAndroidアプリに配信できます。(新)GCMメッセージを受信しましたが、解析する方法は?

問題:私はJSONと変換するPOJOオブジェクトと共通のjar(Androidとサーバー)を使用しています。サーバーからのGCMへのPOSTはJSONを使用していて、Androidでもメッセージを受信して​​います(少なくとも私はそう信じています)、私は自分の人生を楽にすると思っていました。しかし、AndroidのGCMからメッセージを受信すると、メッセージのペイロードを取得してオブジェクトに変換する方法がわかりません。私はそこに情報を見ることができますが、それは私の目的ではありません(GCMがそれに押し込む情報があります)。

私の質問は、Androidの最後にペイロード情報をGCMサーバーに送信する方法がありますか? JSONなしで受信したデータをAndroidで解析する必要がありますか?私は送信

メッセージ( "データ" ペイロードである)

{ "registration_ids":[ "APA91bFdV ..."]、 "collapse_keyが" NULL "delay_while_idle" 偽 "time_to_live ":2419200、" データ ":{" タイプ ":10、" targetVersion " - 1" メッセージ ":" テストMSG」、 "URL": "テストURL"}}

私Android intent.getExtras()。toString()

バンドル[{メッセージ=テストMSG、collapse_keyが= do_not_collapse、 targetVersion = -1、= 483833987130、タイプ= 10、URL =テストのURLから}]

私はあなたの助けをいただければと思います。ありがとう!

答えて

25

Androidエンドで、GCMサーバーに送信した方法でペイロード情報を取得する方法はありますか?

"JSON"というより、 "キーと値のペア"を考えてください。サーバーはキー/値のペアでデータを送信します。あなたのアプリは、そのデータをIntentの追加情報のキーと値のペアとして受け取ります。あなたはあなたのキーが何であるかを知っているので、それらのキーに結び付けられているエクストラから値を取り出すだけです(例えば、getStringExtra("message")getStringExtra("url"))。

また、受信したデータをJSONなしでAndroidで解析する必要がありますか?

受信したデータはJSONにありません。

+0

JavaでAppleとAndroidのモデルクラスを定義するにはどうすればよいですか? –

10

jsonデータに別のレベルを追加する必要があります.Jsonデータを再帰的に解析しないことは明らかです。 送信:コード内で次に

{...., "data":{"payload":{"id":5,"a":5}}} 

String json = intent.getExtras().getString("payload"); 
// json = {"id":5,"a":5} 

これは、簡単にあなたがすでにクラスを持っている(あるいは単に代わりのオブジェクトを操作したい場合は私にとって、このアプローチが優れている、POJOに変換することができますこれは私がUrbanAirshipから取得しています応答..です

+0

この小さなお仕事をありがとうございます。 Googleはペイロードのために4kbを提供しています。そのため、私は、背中に別のAPIコールを使用する 'くすぐり'の代わりにそれを使用したいと思います。乾杯! – ajwest

1

これは、私は、これはあなたを助けると思う...私は、データを取得するためにやったことある...(「XYZ」)を取得します プッシュ通知。

バンドル[{com.urbanairship.push.ALERT =、content-available = 1、newscategorycode = O21R97、priority = 5、com.urbanairship.push.PUSH_ID = afc9e690-f308-11e4-af8c-001018957618、id = 6534.0、from = 966150816212、func =ニュース、newscategory = HR、com.urbanairship.push.APID = 28e48c60-324b-456c-95b5-8fde9ab1a956、collapse_key = do_not_collapse、com.urbanairship.push.CANONICAL_PUSH_ID = 7641453d-9207-4213- 81c0-404387583de7}]

ソリューション:

あなたのケースのように使用し、その後、バンドルオブジェクトを取得中
Bundle bundle = message.getPushBundle(); 

...

String func = bundle.getString("func"); 
    String newscategory = bundle.getString("newscategory"); 
    String sinceId = bundle.getString("id"); 

あなたはデータを取得します。

ハッピーコーディング!

関連する問題