1

DOZE モードのテストのために、Android 6.0 でサンプル GCM アプリを開発しています。

言われているように、DOZE モードでは、デバイスは通常の優先度の GCM ではウェイクアップしません。これを確認したかったのです。

ドキュメントに従って(https://developers.google.com/cloud-messaging/concept-options#setting-the-priority-of-a-message

通常の優先度。これは、メッセージ配信のデフォルトの優先度です。通常の優先度のメッセージは、スリープ状態のデバイスでネットワーク接続を開くことはなく、バッテリーを節約するために配信が遅れる場合があります。新しい電子メールの通知や同期するその他のデータなど、時間的制約の少ないメッセージの場合は、通常の配信優先度を選択します。

このリンクからいくつかのサーバー コードを使用してアプリをテストしました。 https://stackoverflow.com/a/22169411/4242382

サーバーから送信するメッセージは次のようなものです。

$msg = array
(
    'message'       => 'here is a message. message',
    'title'         => 'This is a title. title',
    'subtitle'      => 'This is a subtitle. subtitle',
    'tickerText'    => 'Ticker text here...Ticker text here...Ticker text here',
    'vibrate'   => 1,
    'sound'     => 1
);

ご覧のとおり、優先順位が設定されていないため、DOZE モードではすぐにこれを取得するべきではありません。それでも、デバイスは GCM メッセージをすぐに受信します。

試験方法

  1. GCM ベースのアプリを実行する
  2. adb シェルからコマンドを発行して DOZE モードを誘導する (リンク) $ adb shell dumpsys battery unplug $ adb shell dumpsys deviceidle step
  3. サーバーからメッセージを送信する (phpfiddle)

予想される動作: 通常の優先度の GCM の即時配信はありません 観測された動作: メッセージの即時配信があります

DOZE モードはドキュメントどおりに機能しますか? 私はそれが起こっているのを見ません、誰かが同じに直面していますか?

4

1 に答える 1

2

API 23 を実行するエミュレーターを使用して優先度の低い GCM メッセージ配信をテストし、文書化された動作を観察しました。エミュレートされたデバイスが Doze モードの場合、メッセージは配信されませんでした。Doze モードを終了してから数秒後に、メッセージが受信されました。

私のテスト アプリは、Goggle Play Services 8.3.0 を使用して構築されました。API 23 のエミュレータ イメージには古いバージョンの Play Services が含まれているため、アプリを初期化して 8.3.0 に更新するときに警告が表示されました。エミュレータでそれを行う方法がわかりません。アプリはメッセージの登録と受信に成功したので、テストを続行しました。

エミュレートされたデバイスを次のコマンドで Doze モードにします。

$ adb shell dumpsys deviceidle enable

そして繰り返しました:

$ adb shell dumpsys deviceidle step

ここcurlに記載されている手順に従って、を使用してメッセージを送信しました。メッセージの受信は、出力を観察することによって確認されました。logcat

deviceidle stepコマンドは、IDLE_PENDING、SENSING、IDLE_MAINTENANCE、および IDLE の状態を生成しました。IDLE 以外のすべての場合、メッセージはすぐに受信されました。IDLE 中に送信されたメッセージが受信されませんでした。約 1 分待った後、deviceidle stepIDLE_MAINTENACE 状態に入るために使用されました。数秒以内に、保留されたメッセージが配信されました。

2 つの提案:

  1. Play Services 8.3.0 でビルドしていない場合は、そのバージョンに更新してください。
  2. テスト メッセージを送信するために上記のリンク先の手順を使用curlして、サーバー コードとは異なる動作が発生するかどうかを確認します。
于 2015-12-03T23:25:35.530 に答える