2

バックグラウンド作業を行っているiOSアプリケーションを開発しています。サイレント通知を送信してアプリを目覚めさせています。ほとんどの場合、コードは正常に機能しています。

問題は、通話アプリが起動していないとき、ネットワーク接続が低いとき、またはネットワーク変動アプリが起動していないときでもあります。

私は次のことをしています:

1: Enabled 2 background mode
   i) Background fetch.
   ii)Remote notification. 

2: Sending notification as:

   { 
  aps: {
          content-available: 1,
          sound: ""
          message:"background fetch"
       }
    } 

and 
3)
-(void)application:(UIApplication *)application didReceiveRemoteNotification:(NSDictionary *)userInfo fetchCompletionHandler:(void (^)(UIBackgroundFetchResult))completionHandler{
     UALogFull(@"\n\n BACKGROUND NOTIFICATION \n\n\n");
     completionHandler(UIBackgroundFetchResultNewData);

}

私の観察は次のとおりです。アプリはクラッシュしていません。通話中に通知があっても「バックグラウンド通知」をログに記録していません(モバイルはwifiに接続されています)。

精度を出す方法を教えてください。

4

1 に答える 1

1

サイレント通知を送信しているからといって、アプリケーションがすぐに通知を受けるとは限りません。

GSM iPhoneを使用した私の観察から。通話中はいつでも、セルラー データ タイプが帯域をドロップします。たとえば、LTE -> 3G、3G -> EDGE などです。そのため、データ ネットワークは信頼できません。

また、ネットワークが変動している間は発生しないと述べています。システムは通知を受信して​​おり、バッテリーを節約するために通知を渡していません。セルラー データ接続が遅いほど、バッテリーの消耗が大きくなります。

Wi-Fi での通話に関しては、まだサイレント通知を受信して​​いません。セルラー チップが動作していて、wifi も使用すると、バッテリーがさらに消耗します。

私の理解では、サイレント通知とは、利用可能な新しいデータがあることをデバイスに知らせることです。当該データをバックグラウンドでダウンロードするウィンドウは小さいウィンドウであるため、本質的に説明している例では適切でない場合があるかもしれません。

通話中 -> セルラーチップは音声伝送に使用されています。データ転送は、チップが実行する余分な作業であり、バッテリーの寿命に劇的に影響を与える可能性があります.

ネットワークの変動 -> システムは、データをダウンロードできる安定した接続を保証できません。また、データ速度が遅い領域にいると、より強力で安定した接続帯域を見つけようとするセルラー チップにさらに負担がかかります。

サイレント通知を使用すると、ユーザーがアプリに戻ったときに新しいデータをユーザーに提示できるため、ユーザーは新しいコンテンツを長時間待つ必要がありません。ただし、アプリの機能に不可欠な部分ではありません。システムは、前回の起動からの時間など、他の要因に基づいて通知を渡すかどうかも決定します。アプリを閉じてからすぐに、または閉じてから時間がかかると、アプリが優先されず、他のアプリを待たなければならない可能性があります。

早すぎる: コンテンツはまだ比較的新鮮です。長時間: ユーザーはアプリをあまり使用していません。リソースを節約します。

この発射パターンに混ぜてください。以前のパターンに基づいて、ユーザーがアプリを起動する可能性が高いときに通知を送信すると、通知を受け取る可能性が高くなります。

最後にドキュメントを引用します:

重要: 通知の配信は「ベスト エフォート」であり、保証されるものではありません。アプリにデータを配信することは意図されておらず、利用可能な新しいデータがあることをユーザーに通知することのみを目的としています。

ここで見つかりました

于 2014-11-26T10:06:17.640 に答える