方案如下。我有一个iOS应用程序,它使用CLLocationManager的区域监控功能在输入预定义的地理区域时通知应用程序。区域监控的工作方式,即使应用程序先前已终止,也可以通知应用程序用户进入某个区域。基本上,当输入区域时,操作系统将启动应用程序(不将其带到前台),并使应用程序有机会响应输入的区域。
我想要做的是在输入区域时使用Flurry记录事件。目前,它似乎没有起作用,因为即使在几天之后事件也没有出现在Flurry中。我应该注意到,我已经测试了i)
,当用户正常启动应用程序时,Flurry事件日志记录正常工作,而ii)
我的应用程序确实正在接收已输入和退出的区域事件(每次进入或退出该区域时,我都会使用本地通知。
我怀疑它与应用程序委托生命周期有关,当应用程序因进入区域而启动时与应用程序因用户启动而启动时不同。我的第一个怀疑是,当应用程序在后台启动时,application:didFinishLaunchingWithOptions:
未被调用。因为我对[Flurry startSession:@"my_key"]
的调用是application:didFinishLaunchingWithOptions:
方法,所以这可以解释一下。但是,startMonitoringForRegion:desiredAccuracy:
的Apple文档表明application:didFinishLaunchingWithOptions:
实际上称为:
如果您开始监控某个区域,那么您的应用程序就会随之而来 终止后,系统会自动将其重新启动到后台 如果跨越区域边界。在这种情况下,选项 字典传递给应用程序:didFinishLaunchingWithOptions: 应用程序委托的方法包含密钥 UIApplicationLaunchOptionsLocationKey表示你的 应用程序是因为与位置相关的事件而启动的。
虽然我使用的是startMonitoringForRegion:
而不是startMonitoringForRegion:desiredAccuracy:
(已弃用),但我假设两者都在调用application:didFinishLaunchingWithOptions:
。然后,我在Flurry文档中阅读了关于startSession:
(强调我的)的一个注释:
此方法可作为Flurry Analytics集合的入口点。 必须在applicationDidFinishLaunching的范围内调用它。该 会话将在应用程序处于前台的时间段内继续 直到你的应用程序在指定的时间内后退 setSessionContinueSeconds :.如果应用程序在那段时间内恢复了 会话将继续,否则将开始新的会话。 注意: 如果在模拟器上进行测试,请务必通过主页按钮将App发送到后台。 Flurry取决于完整报告的iOS生命周期。
所以,我怀疑即使我在真实设备上进行测试,该应用也永远不会“被发送到后台”,因为当它启动时,它永远不会进入前台。任何人都可以澄清这是否是我记录的事件从未出现的原因,或者是否有其他原因?并且,有解决方法吗?
答案 0 :(得分:1)
所以我联系了Flurry支持,这就是我所听到的:
因此,目前在应用程序处于后台时无法记录/记录事件。
我们的工程团队正在研究解决方案,这可能会在SDK的未来版本中提供,可能需要几个月的时间。
所以我想我们会拭目以待。