iOSを使用している場合、Google Playサービス8.4.0はAndroid用Google Cloud Messagingを壊します


Answers

今日私は最終的に、これが実際にバグであったことをGoogleから確認し、この修正が今週行われました。 また、私が8.3.0で見ていた振る舞いが8.4.0で同じよ​​うに動作することを確認できます。そのため、修正はサーバー側で完全に行われたようです。

実際には、サーバー側でGCMメッセージを分割する方法は、iOSデバイスとAndroid搭載デバイスとの間で分割することが推奨されています。異なるタイミングで異なるペイロードが必要になる可能性があるためですプラットフォーム。

Question

この問題の側面を説明するいくつかの記事がありますが、まだ満足のいく答えはありません。これらの問題のすべてに対処できる正式な回答を得るために、ここでそれらをすべて照合しようとしています。

Google Playサービスを8.4.0プッシュ通知に更新した

アプリが実行されていないときにAndroidの通知でコンテンツが表示されない

gcm.notification.e = 1はAndroidのプッシュ通知ペイロードに何を表しますか?

問題の要点は、データのみのGCMメッセージを作成する(つまり、通知フィールドを使用せず、通知を生成しない)場合、content_available = Trueを含めることです(必要な動作を得るために必要ですiOSクライアントから)、8.4.0以降は、Androidで望ましくない空白の通知が生成されます。 8.4.0より前はすべてうまくいった。

問題の詳細は、AndroidクライアントがGCMフィールドを受け取った場合、それを無視するのではなく、「e = 1」フィールド(おそらく「e」はエラーを意味する)を通知として追加するということです前のメッセージに通知がなくても、アプリケーションに処理を指示するコードではなく、通知を出すコードをトリガーするようにしています。

考えられる回避策:クライアントがiOSであり、どのクライアントがAndroidだったのかを追跡し、iOSクライアントのcontent_availableタグのみを含めることができ、この問題は解決されると思います。 しかし、過去にこれを行う必要はなかったし、私のシステムは、意図していたように、クライアントの種類に無関心であるという考えで構築された。

content_availableフラグが突然Android上でこれらの空白の通知を引き起こすという事実は、新しく導入されたバグのようですが、それが実際に8.5.0で修正される可能性のあるバグであるかどうかを知ることは非常に便利です8.5.0が出てくるまで8.3.0でビルドすることができます)、または永続的な解決策を意図している場合は、 これが変更されない場合は、どのGCM登録IDがiOSデバイスに属し、どのデバイスがAndroidデバイスに属しているかを把握し、毎回2つのGCMリクエストを送信する正しい解決策ですか?

Googleチームからこの質問への正式な回答をお寄せいただきありがとうございます。