GCM には特有の問題があります。Android 4.2.2 で実行されている電話にプッシュを送信していないようです。2.2 から 4.2.2 までの 8 台の電話でテストしましたが、4.2.2 を実行している電話はプッシュを受信していませんでした。4.2.2 の電話を使用している一部の連絡先に APK を送信したところ、4.2.2 の電話でのみプッシュが失敗したことを確認できました。全体として、15 を超えるデバイスでアプリをテストしました。そのうちの 5 つは 4.2.2 で、プッシュを受信できなかったのはその 5 だけでした。
プッシュを受信できなかったデバイスは次のとおりです。
- サムスンギャラクシーS4
- サムスン ギャラクシー ネクサス
- 2×LGネクサス4
- Razor M ファミリーの開発用携帯電話
ログを調査した後、電話機は GCM サーバーに正常に登録されており、登録 ID が含まれています。ただし、onMessage がトリガーされることはありません。繰り返しますが、4.2.2 を実行していない他のすべての電話で動作します。この API 固有の動作を引き起こす原因はわかりません。私のターゲット API は 17 に設定されていますが、これは 4.2 だと思います。
私のもう 1 つの疑惑は、4.2.2 を実行しているこれらの電話はすべてまだ市場に出ていないか、出荷時にロック解除されているため、この問題に関係している可能性があるということです。AT&T と T-Mobile はまだ 4.2.2 を展開しておらず、Verizon は昨日 (5 月 21 日) から漸進的な展開を開始したばかりなので、私はこの疑惑をまだ調査できていません。ただし、4.2.2 ストック ROM が GCM が機能しない原因である可能性があるかどうかはよくわかりません。
この問題について調査を試みましたが、誰も問題を抱えていないようです。SO と Google で GCM と android 4.2.2 を検索すると、新しい Bluetooth スタックの問題と、更新によるバッテリ寿命の短縮の問題だけが表示されます。他のアプリは問題なくプッシュを送信しているように見えるため、何か間違ったことをしているに違いないと確信していますが、どこから調査を開始すればよいかわかりません. 誰かが私を正しい方向に向けることができれば、それは大歓迎です。
編集: サーバー側のログを誤ってオフにしたことがわかったので、GCMは実際に送信時にエラーを返します。クライアントでの登録プロセスでエラーがスローされず、登録 ID が返される場合でも、4.2.2 デバイスで「NotRegistered」エラーが返されます。ここでも、Android 4.2.2 以外のデバイスへのプッシュは正常に機能します。