【问题标题】:iOS Backrground Sync Alternative for enterprise apps?iOS 后台同步替代企业应用程序?
【发布时间】:2017-03-02 22:07:51
【问题描述】:

我一直在为我们的企业应用程序调查 iOS 后台提取。根据this 之类的文章,在应用程序终止之前有 30 秒的下载时间等限制,并且在 3 次超时后,应用程序被禁止进行后台同步可能会受到(未经证实的)惩罚。此外,如果用户终止应用程序,则提取停止发生 -noted here

我们的目标是能够在应用程序暂停/未运行时定期从我们的服务器检索数据,但有时由于长时间运行 SQL,传输可能需要几分钟。我不想实现向所有用户发送定期通知。

在我为 iOS 后台同步进行开发之前,我需要做一些尽职调查和研究 iOS 后台同步的替代方案,但没有找到任何东西。

是否有人看到或开发了 iOS 后台同步的替代方案,或为他们的企业应用处理过这个问题?

【问题讨论】:

  • 也许缓存更新,这样更新就不会因为 SQL 慢而阻塞?也许把它分成更小的部分?通话“需要几分钟”这一事实并不是一件好事。
  • 您能否详细说明:“应用程序暂停时定期从我们的服务器检索数据”!
  • @nikdange_me,在用户按下主页并且应用程序进入后台或被挂起后,我需要每隔 30 分钟左右调用一次我的 API,以保持用户的本地应用程序未使用时的最新数据(可以是几天或几个月)。一切都是为了更好的用户体验。
  • @picciano 同意。关键是在 API 调用时准备好数据。作为一种缓存,随着数据经常变化,它可能会更多地以每个用户的预处理结果表的形式出现。它可能是这方面的组合,分解工作和后台同步。

标签: ios background-fetch


【解决方案1】:

作为一个企业应用程序,除了可以使用任何你想要的背景模式(音频、位置、voip 等)之外,你无能为力,而无需有正当理由这样做。

这可能会有所帮助:

  • 您可以利用重大位置更改(与常规位置更改相反)通知在后台运行您的应用程序。问题在于它当然取决于您的应用程序的用户四处走动。但是,假设您的员工中的每个人都使用他们的 iPhone 上下班,那么您每天将有两次机会让应用程序在后台运行。由于位置变化而运行的应用程序可以在后台执行 30 秒以上。

  • voip 推送:与常规推送通知不同,voip 推送将启动应用程序,即使用户强行终止它也是如此。要使用此功能仅比使用常规推送多一点努力,您无需对拨打或接收实际 voip 呼叫做任何事情,您只需要 voip 功能和 voip 证书而不是普通推送证书。

该链接中关于强制退出和后台获取的评论不正确 - 用户强制退出应用程序不会使其没有资格运行后台获取,我已强制退出我自己的使用后台获取的应用程序,但它会仍然由操作系统启动,但是会发生的情况是应用程序运行时的频率会降低很多,如果用户不再运行该应用程序,那么操作系统将停止启动它。 用户强制退出应用程序将阻止其他事情发生,例如它在后台运行以响应静默推送通知(除非它是 voip 推送)。

还有与下载时间无关的 30 秒,NSURLConnection 将在 30 秒后停止,NSURLSession 旨在代表您的应用继续下载。但是,如果您正在下载然后应用冗长的 SQL 处理,这将是一个问题。但是几分钟的处理时间似乎太长了,你确定它都优化了吗?

【讨论】:

  • 慢速 SQL 已修复,但剩余调用仍接近 30 秒的后台提取限制(在最坏的情况下)。我最终创建了一个测试应用程序,该应用程序通过一系列请求与我的 API 相关联。我确实看到启动我的应用程序的呼叫减少了。猜测间隔受 CPU 负载和完成下载所用时间的影响。间隔接近12小时。如果您与应用程序交互,它会在一段时间内恢复较短的间隔。 See this too
  • 另外,如果我遇到上述操作系统最终停止启动应用程序的情况,我可能会实施每周或每半周的静默推送通知。
【解决方案2】:

目标是能够在应用程序暂停/未运行时定期从我们的服务器检索数据

  • 实现这种行为的唯一可靠方法是在后端和应用程序上实施面向用户的远程(推送)通知框架。
    您可以在推送 JSON 负载中附加 4kB(或 5 个用于 VOIP)价值的数据,如果在握手机制中实现,则无需网络获取请求。
  • 您可以评估 Silent Remote Notifications 上的使用情况,以增加内容更新并有机会获取少量内容,尽管它与 Background App Refresh 相同。
  • 你绝对可以改进can take minutes due to long running SQL的API
  • 请记住,您需要在用户实际启动应用时更新应用。评估实现一个引人入胜且流畅的获取内容屏幕,该屏幕在获取所有数据后转换为实际屏幕。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-12-02
    • 1970-01-01
    • 2023-03-03
    • 2013-11-19
    相关资源
    最近更新 更多