我的iOS应用(针对iOS 8.1+)使用位置服务来确定用户是否在活动期间输入了特定区域。理想情况下,我想在事件发生前稍微启用地理围栏,并在事件完成后将其关闭一点。问题是无法保证应用程序在事件发生前一小时运行,因此我在用户注册事件时打开地理围栏。这不是最好的方法,因为这意味着地理围栏的开启时间要长得多。
据我所知,没有办法醒来" iOS中预定时间的应用程序。我可以使用用于更新内容的推送通知,但我不清楚Apple是否会拒绝滥用该通知。
有什么建议吗?
答案 0 :(得分:0)
我自己一直在研究这个问题。
如果您可以安排后端的推送通知(“无声推送通知”,又名“内容可用”),这似乎是一个不错的选择。在实际情况中,这似乎可以让您最好地控制时间。不幸的是,如果此人没有连接,它将无法工作。此外,遗憾的是,您需要一个可以一次排队事件的后端(不仅仅是响应输入。)如果您已经拥有这样的后端,并且您的应用程序仅对用户提供网络覆盖时有用,可能是最好的选择。这似乎是对该技术的恰当使用,因此Apple应该批准。
我正在尝试的另一个选择是使用后台提取。您指定“最小间隔”以避免过多提取。至少尝试50%的剩余活动时间。每次应用程序唤醒时(无论是在前台,因为用户打开它,还是在后台,因为后台提取打开它),您可以计算下一次事件的时间,更新获取间隔或启动区域监视。您应该使用“后台获取”来从服务器获取信息,但似乎没有任何轮询服务器的要求,您可以轮询内部数据。我尚未对此进行全面测试,但似乎很有希望。
您可以使用重要的位置更改监控功能,我已经阅读过,每15分钟或更短时间内会短暂唤醒您的应用,您可以使用时间/位置信息来决定是否打开地理围栏。我认为这可以与上面的“背景提取”结合使用:在事件发生之前的几个小时或几天,您依赖于后台提取,然后您可以在事件发生前几个小时启用重要的位置更改监控。 (有人猜测地理围栏实际上比重要的变更监控更具电池效率,但你可以选择假设用户设备上的其他应用程序已经通过观察重大变化,在这种情况下,你的应用程序的边际成本将自己添加到列表中应该是最小的。)
将它们放在一起,你可以创建一个
序列background fetch -> significant location monitoring -> geofencing
随着时间的推移越来越近。
还有CLVisit监控功能,它理解得不是很好,但据称使用的功率更低,而且比重要的位置变化监控更少。如果后台提取或静音远程通知无法唤醒您的应用,请尝试一下,请报告回来!
您无法(尚)执行无提示内容可用的本地通知(AFAICT)。但是,也许您可以安排本地通知“您的活动明天开始”或说服用户点击启动地理围栏的选项。这是一个关于它的教程http://www.appcoda.com/local-notifications-ios8/,动作的响应可以是UIUserNotificationActivationMode.Background,这样你的地理围栏可以出现(如果用户响应通知),而不会将应用程序带到前台。
你提问已经有5到6个星期了,你有答案吗?请告诉我。