1

したい: アプリケーションがバックグラウンドにある間 (電話がスリープモードになっている間も含む)、プッシュ通知 (サイレント) の受信時に http 要求をトリガーできるようにしたい。

前提:プッシュ通知は、バックグラウンドで実行されているアプリケーションを起動します(スリープ中でも) https://discussions.apple.com/thread/3650066:新しいルーターを提案する解決策を提供しますが、これはWiFiに接続されている電話にのみ適用されます. セルラー接続を使用しています。

試行: 正しいデリゲート メソッドを使用していることを確認しました didRecieveRemoteNotification

-(void)application:(UIApplication *)application didReceiveRemoteNotification:(NSDictionary *)userInfo fetchCompletionHandler:(void (^)(UIBackgroundFetchResult))completionHandler{
    NSLog(@"Remote Notification Recieved From:\t%@", userInfo[@"requestorSessionId"]);
    [_agentService handleAgentLocationRequest:userInfo];
    completionHandler(UIBackgroundFetchResultNewData);
}

受信したプッシュ通知をログに記録しようとしましたが、電話がスリープ モードになっていると表示されません。(iOS コンソールからログを読み取るhttp://lemonjar.com/iosconsole/ )

アプリがフォアグラウンドまたはバックグラウンド (非スリープ モード) にある間、ログ ステートメントを表示できるため、通知が機能していることを確認しました。

プッシュ通知ペイロードの一部としてサウンドの再生を追加しました。通知を受信したときにサウンドの再生を聞くことができます (スリープモード) が、アプリケーションが通知を処理することはありません。

また、プロジェクトの機能の下にある UIBackground モードでリモート通知を有効にしています。

アップデート

ローカル ネットワークを介してテストしていたことに気付きました。電話がスリープ状態になると、WiFi ラジオもオフになり、ポート フォワーディングなしではローカル IP に接続できなくなります。

今回の新発見でも。私はまだ特定の iPhone で問題を抱えています。この場合、iPhone 6 はプッシュ通知を短時間受信し、その後二度と受信しません。

事前に感謝します。スレッドを監視して、必要に応じてより多くの情報を提供します。

4

2 に答える 2

0

「前提:プッシュ通知は、バックグラウンドで実行されているアプリケーションを起動します(スリープ中でも)」。

これは iOS7 ではそうでしたが、iOS8 では変更されました。バックグラウンド プッシュは、特定の状況下でのみアプリに配信されるようになりました。Apple はこれらの状況が正確に何であるかを明確に述べていませんが、私の広範な実験から、基本的に電話が充電されているかどうかに帰着します. 他にもいくつかの変数 (ネットワークの種類、デバイスの種類、Wi-Fi が有効になっているなど) がありますが、主な主要な要因は、プッシュが到着したときにデバイスが充電されているかどうかです。

電話が直接主電源を介して充電されている場合、または USB でコンピューターに接続されて間接的に充電されている場合、ほとんどの場合、バックグラウンド プッシュがアプリに配信されます。ただし、電話を電源または USB から切断すると、電話のバッテリーが 100% 充電されていても、バックグラウンド プッシュがアプリに配信されることはほとんどありません。

電話が充電されているときと充電されていないときにプッシュを送信するだけで、これを自分で非常に簡単にテストできます. ただし、開発ビルドでのバックグラウンド プッシュとサンドボックス環境の使用は、実稼働ビルドと実稼働環境でのバックグラウンド プッシュと同じように動作しないことを考慮する必要があります。実際には、バックグラウンド プッシュは開発中のアプリに配信される可能性が高くなります。その後、それらは本番環境にあるため、実際の結果を確認するには、本番ビルドと Apple の本番環境を使用してテストすることが重要です。

プッシュ配信には 2 つのステップがあることに注意してください。1 つ目は、電話自体に配信する必要があることです。2 つ目は、電話がそれを取得した後、OS によってアプリに配信される必要があります。iOS7 では、Wifi をオンにするなどして、プッシュが電話に到達する可能性が高くなりました。ただし、iOS8 では、プッシュが電話に正常に配信されていても、電話が充電されていない場合、OS はそれをバックグラウンド アプリに転送していません。これは、電話が充電されていない場合、電話が通知を受け取り、それをアプリに転送する前に、場合によっては数時間保持することを意味します。

于 2015-03-31T16:46:56.127 に答える