歴史的経緯?GCMで送信したデータが文字列化される件について。歴史的経緯?GCMで送信したデータが文字列化される件について。Androidアプリ2013.11.05GCMで少し変わった挙動を観測しましたのでご報告。PushのGCMの送信データの取り扱いGCMへの送信データはJSONで型の制約はない。SDKにも反映しておきました。Pushでは、GCMの送信データを、たとえば次のような形式で送信することにしました。{"message":"message","sound":true}しかし、このsoundのtrueが、正しく扱えておらず調査をしていました。GCMへの送信データはJSONで型の制約はない。GCMのリクエストボディはJSONなので、文字列、数値、bool値は厳密に区別されているのかと考えていました。次のようなリクエストをGCMに対して送ります。{"data":{"message":"お知らせがあります!","growthpush":{"notificationId":1234},"badge":1,"sound":true},"dry_run":false,"registration_ids":["APA91bHxxxxxxxxxxxxxxxxxxx"]}これを受信するクライアントは、dataキー内のオブジェクトを、Bundleオブジェクトとして受け取ることができます。このBundleオブジェクトは、直感的には次のような構造になっていると考えます。true}・・・が、違いました。GCMから受信されるデータは全て文字列扱いドキュメントを読み、ちゃんと検証してみると、GCM経由で受信されたデータは全て文字列に丸められることを知りました。現実には、次のような形です。'true'}オブジェクトの部分は、Bundleで扱っている以上、構造を維持できないのは仕方ないのかもしれません。BundleクラスはgetIntやgetBooleanというメソッドもあるにも関わらず、integerやbooleanも文字列に丸められてしまいます。この件はしっかりドキュメントにも記述されています。Developersbool値を送信してもBundle#getBooleanで受け取れない注意すべきは、soundキーに対して送ったbool値を、BundleのgetBooleanメソッドで受け取ろうと思っても受け取ることができないということです。intent.getExtras().getBoolean("sound")次のような感じで警告が出ます。...実際には、bool値ではなく文字列として受け取ってしまっているので、文字列をパースさせる必要があります。"false"))その他整数値なども同様です。JSONで型を意識しながら送っているのに文字列化されてしまうのかなと考えてみると、C2DM時代からの歴史的経緯なのかなと思います。GCMのリクエストボディは、application/jsonですが、C2DMのリクエスト形式は、確かapplication/x-www-form-urlencodedで、これは値を文字列として扱う他ないためです。SDKにも反映しておきました。SDKにも修正を反映させておきました。SDKを拡張性高く使えるような設計の変更を入れました。Push細かい修正しながら安定的かつ高速に動作するように改善を繰り返しています。コピーkatty0324三度の飯とエレクトロン価格をこれまでの2倍にしても大丈夫なブランドの作り方。本は最も効率的な情報収集源で、最も効率的な自分への投資。関連記事Handlebars.jsHandlebars.jsで長すぎる文字列を縮めるヘルパーを作る。Handlebars.jsは、JavaScriptを用いてクライアントサイドでHTMLを生成するテンプレートエンジンです。このステップをベースに、サービスごとの具体的に処理方法を考えていくのが良いです。tmuxで複数サーバに一気に接続して一気にコマンドを投げられるのが便利だと書きました。それを早速やってみます。Sparkは、HDFS、Cassandra、HBase、S3など、様々なデータソースを元に分析を実行することができます。以前、Cassandraについてブログ...HTMLJavascriptからsubmit()関数でフォーム送信できない問題Mixpanelをセットアップ中のエンジニアからのヘルプでハマりこんだ問題について。Mixpanelには、フォーム送信をフックして、ユーザーがフォーム送信したこと...CassandrasstableloaderでCassandraにデータをバルクインポートする。サービスのデータの一部を、Cassandraへ移行することを検討しています。そんな時問題になるのが、どうやってデータを移動させるか、です。Cassandraへのデータの移行方法として候補に上...WEB開発ソースコードの見通しを良くするには、データとロジックを一体にする「同じ処理を何度も書いている気がする・・・」というのは、ソースコードの見通しが悪くなってくる前兆ですよね。同じ処理を何度も書くというのは、2つの理由で問題があります。単純な繰り返し作業...JavaJavaで正規表現で文字列抽出すぐに忘れてしまうJavaの正規表現の使い方。こんなユーザーエージェントがあったとします。O...ホームWEB開発アプリ開発Androidアプリkatty0324経営半分、エンジニアリング半分でやってます。ECSのサービスを複数のロードバランサに追加する2022.01.10Railsプロジェクトにfactory_botの導入2021.12.26ビジネス文書は、読まないで済むほうがいい2021.09.26人気記事mkdirでディレクトリが存在しない時だけディレクトリを作成する。InnoDBの行ロックとテーブルロックの挙動2013.07.122021.02.18Tomcatのログをローテートさせて一定期間で削除する。2014.07.042021.03.07Linuxで共有ライブラリsoを作ったり使ったりする方法。2013.10.242021.02.11UUIDはなぜ、分散環境で好き勝手に生成しても衝突しないのか。RFC4122規格とUUIDの性質。2014.03.282021.02.188年乗ったクロスバイクのボロボロになったパーツをまとめて交換した。2016.11.282021.03.07PHPでnullとfalseと空文字と0は同じ?2011.03.262021.03.07階層化されたデータをHTTPのGETリクエストのパラメータに含める方法。2013.07.27IP制限されているWEBサイトをSSH経由でブラウザに表示する。2014.03.142021.02.11自作ツールテキスト一括変換ツールブラウザ上でリアルタイムにテキストの変換ができるツールです。日記その他ホーム検索トップサイドバーkatty0324経営半分、エンジニアリング半分でやってます。ECSのサービスを複数のロードバランサに追加する2022.01.10Railsプロジェクトにfactory_botの導入2021.12.26ビジネス文書は、読まないで済むほうがいい2021.09.26人気記事mkdirでディレクトリが存在しない時だけディレクトリを作成する。InnoDBの行ロックとテーブルロックの挙動2013.07.122021.02.18Tomcatのログをローテートさせて一定期間で削除する。2014.07.042021.03.07Linuxで共有ライブラリsoを作ったり使ったりする方法。2013.10.242021.02.11UUIDはなぜ、分散環境で好き勝手に生成しても衝突しないのか。RFC4122規格とUUIDの性質。2014.03.282021.02.188年乗ったクロスバイクのボロボロになったパーツをまとめて交換した。2016.11.282021.03.07PHPでnullとfalseと空文字と0は同じ?2011.03.262021.03.07階層化されたデータをHTTPのGETリクエストのパラメータに含める方法。2013.07.27IP制限されているWEBサイトをSSH経由でブラウザに表示する。2014.03.142021.02.11自作ツールテキスト一括変換ツールブラウザ上でリアルタイムにテキストの変換ができるツールです。Handlebars.js2タイトルとURLをコピーしました。