我正在开发我正在进行后台工作的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),它也没有记录“背景通知”。
请告诉我如何获得准确性?
答案 0 :(得分:1)
我相信只是因为您发送了无声通知,并不意味着该应用程序会立即得到通知。
根据我使用GSM iPhone的观察结果。每当我打电话时,蜂窝数据类型都会丢弃一个频段,例如LTE - > 3G,3G - > EDGE等因此数据网络不可靠。
您还声明在网络波动期间没有发生这种情况,系统已收到通知,但为了省电,它还没有通过它。蜂窝数据连接越慢,电池消耗的越多。
关于wifi上的电话,仍然没有收到无声通知。蜂窝芯片正在运行,使用wifi也会耗尽电池。
根据我的理解,无声通知是让设备知道有新数据可用。因为在后台下载所述数据的窗口是一个小窗口,所以在某些情况下,您所描述的示例基本上是不恰当的。
拨打电话 - >蜂窝芯片用于语音传输。数据传输是芯片的额外工作,可能会极大地影响电池寿命。
网络波动 - >系统无法保证可靠的连接,允许下载数据。同样处于较慢数据速度区域的是蜂窝芯片上的额外压力,试图找到更强,更稳定的连接带。
无声通知允许您的应用向用户呈现新鲜数据,作为用户切换回应用时的好处,他们不必等待新鲜内容。但它不是应用功能的重要组成部分。系统还将根据其他因素确定是否传递通知,例如自上次启动以来的时间。关闭应用程序后很长一段时间或关闭应用程序后很长一段时间可能意味着您的应用程序无法获得优先权,并且必须等待其他应用程序,
太快了:内容还是比较新鲜的。 很长时间:用户没有经常使用该应用程序。节省资源。
混合使用此发布模式。如果您在用户更有可能根据以前的模式启动应用时发送通知,则您更有可能收到通知。
最后引用文档:
重要提示:发送通知是“尽力而为”,不能保证。它不是为了向您的应用提供数据,而是为了通知用户有新数据可用。