3

GCM の私の実装は、アプリがバックグラウンドまたはシャットダウンされている場合に正常に動作します。

しかし、「バックグラウンド データ」(デバイスの「アカウントと同期」設定内) が無効になっていると、GCM 通知を受信しなくなりました。

これが「バックグラウンド データ」設定の唯一の理由であるかどうかは 100% わかりませんが、私たちの実験に基づくと、「バックグラウンド データ」はアプリが GCM を受信するかどうかの変数のようです。

私の最初の質問:

これは予期された動作ですか、それとも何か根本的に間違っているのでしょうか?

2 番目の質問:

バックグラウンドで動作し、受信する GCM をリッスンする新しいサービスを作成する人がいると、仲間のプログラマーから聞いたことがあります。

私はまだこの背後にあるロジックを理解しようとしていますが、実行可能なオプションのように聞こえますか?

私の質問で曖昧で申し訳ありません。

私はまだこの問題の解決策の設計に苦労しているので...

4

2 に答える 2

3

Google Play がバックグラウンド データ対応のGoogle Playを必要とするのと同じように、GCM もそうしていると思います。

GCM にアクセスしようとして電話にアカウントが登録されていない場合、GCM サービスからエラー ACCOUNT_MISSING が返されます。これを検出したら、ユーザーが Google メールを追加できるように ACCOUNT_SETTINGS にリダイレクトする必要があります。その後、ConnectivityManager 関数getBackgroundDataSetting()を使用して、そのバックグラウンド データが有効になっているかどうかを検出する必要があります。

>= 14 API では廃止されました。代わりに getActiveNetworkInfo() を使用して、ユーザーがバックグラウンド データを無効にしたために接続が切断されているかどうかを確認する必要があります。

最後のリンクが表示されている場合は、ACTION_BACKGROUND_DATA_SETTING_CHANGED フィルターを使用してリスナーを登録する方法もあります (ただし、API 16 では非推奨です)。

IntentFilter intentFilter = new IntentFilter(); 
intentFilter.addAction(ConnectivityManager.ACTION_BACKGROUND_DATA_SETTING_CHANGED);
于 2013-03-12T16:04:51.443 に答える
1

Androidのマニュアルによると:

バックグラウンド データは、直接操作していないときにアプリケーションやサービスがデータを送信できるかどうかを制御します

バックグラウンド データが GCM であると明示的に述べているわけではありませんが、多くの証拠と多くのスレッドがすべて次のように言っています。

バックグラウンド データが無効になっている場合、GCM メッセージが配信されない

自分で簡単にテストしたり、バックグラウンド データを無効にしたり、ウェブ バージョンの Play ストアにアクセスしてアプリをインストールしたりできます。バックグラウンドデータを再度有効にした場合にのみ受信します。グーグルでさえできないのなら、おそらくあなたもできないでしょう。

バックグラウンド データが無効になっているときにアプリケーションが GCM メッセージを受信して​​いると思われる場合は、次のことが原因である可能性があります。

  • 新しい Android フォンでは、アプリケーションごとにバックグラウンド データを有効にすることができます。おそらく、別のアプリで有効になっていました。
  • おそらく GCM 通知ではなく、GCM が利用できない場合、アプリケーションはサーバーのポーリングにフォールバックします

それでも確信が持てない場合は、お使いのマシンで burp スイートなどのプロキシ サーバーを使用するように電話を設定すると、ネットワーク上で他のアプリが何をしているかを確認できます。

于 2013-03-21T21:12:26.407 に答える