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 等。因此数据网络不可靠。

您还声明它不会在网络波动期间发生,系统已收到通知,它没有将其传递以节省电池电量。蜂窝数据连接越慢,电池消耗越多。

关于wifi上的电话,仍然没有收到静音通知。蜂窝芯片正在运行,同时使用 wifi 会更加消耗电池电量。

据我了解,无声通知是让设备知道有新数据可用。因为在后台下载所述数据的窗口是一个小窗口,所以在某些情况下可能不适合您描述的示例,这基本上是原因。

在通话中 -> 蜂窝芯片正在用于语音传输。数据传输是芯片要做的额外工作,这可能会极大地影响电池寿命。

网络波动 -> 系统无法保证可靠的连接以允许下载数据。处于数据速度较慢的区域也会对试图定位更强、更稳定的连接频带的蜂窝芯片造成额外的压力。

当用户切换回您的应用程序时,静默通知允许您的应用程序向用户呈现新数据作为对用户的好处,他们不必等待新内容的时间太长。但这不是应用程序功能的重要组成部分。系统还将根据其他因素(例如自上次发布以来的时间)确定是否传递您的通知。关闭后太快或关闭应用程序后很长时间可能意味着您的应用程序不会获得优先权,并且必须等待其他应用程序,

太快了:内容还是比较新鲜的。长时间:用户不经常使用该应用程序。节省资源。

与此启动模式混合。如果您在用户更有可能根据之前的模式启动您的应用程序时发送通知,您更有可能收到通知。

最后引用文档:

重要提示:通知的传递是“尽力而为”,不能保证。它不打算向您的应用程序传递数据,只是为了通知用户有新数据可用。

在这里找到

于 2014-11-26T10:06:17.640 回答