2

场景如下。我有一个 iOS 应用程序,它使用 CLLocationManager 的区域监控功能在输入预定义的地理区域时通知应用程序。区域监控的工作方式,可以通知应用程序用户进入区域,即使应用程序之前已终止。基本上,操作系统将在输入区域时启动应用程序(不将其置于前台),并让应用程序有机会响应输入的区域。

我想要做的是在输入区域时使用 Flurry 记录一个事件。目前,它似乎不起作用,因为即使在几天之后,事件也没有出现在 Flurry 中。我应该注意到,i)当用户正常启动应用程序时,我已经测试了 Flurry 事件日志记录是否正常工作,并且ii)我的应用程序确实正在接收区域输入和退出事件(每次输入区域时我都使用本地通知或退出)。

我的怀疑是它与应用程序委托生命周期有关,这与应用程序因进入区域而启动的时间与应用程序因用户启动它而启动的时间不同有关。我的第一个怀疑是application:didFinishLaunchingWithOptions:在后台启动应用程序时没有调用它。因为我的调用[Flurry startSession:@"my_key"]是在application:didFinishLaunchingWithOptions:方法中,所以这会解释一些事情。但是,Apple 文档startMonitoringForRegion:desiredAccuracy:建议application:didFinishLaunchingWithOptions:实际上称为:

如果您开始监视一个区域并且您的应用程序随后被终止,则系统会在跨越区域边界时自动将其重新启动到后台。在这种情况下,传递给应用程序委托的 application:didFinishLaunchingWithOptions: 方法的选项字典包含键 UIApplicationLaunchOptionsLocationKey 以指示您的应用程序是由于与位置相关的事件而启动的。

虽然我正在使用startMonitoringForRegion:而不是startMonitoringForRegion:desiredAccuracy:(已弃用),但我假设两者都调用application:didFinishLaunchingWithOptions:. 然后我阅读了 Flurry 文档中关于startSession:(强调我的)的注释:

此方法用作 Flurry Analytics 集合的入口点。必须在 applicationDidFinishLaunching 范围内调用。会话将在应用程序处于前台期间持续,直到您的应用程序在 setSessionContinueSeconds: 中指定的时间内进入后台。如果应用程序在此期间恢复,会话将继续,否则将开始新会话。注意: 如果在模拟器上测试,请务必通过主页按钮将应用程序发送到后台。Flurry 依赖于 iOS 生命周期来完成完整的报告。

So, my suspicion is that even though I am testing on a real device, the app never gets "sent to the background" because when it launches it never enters the foreground to begin with. Can anyone clarify whether this is the reason for my logged events never showing up, or whether there is perhaps some other reason? And, is there a workaround for this?

4

1 回答 1

1

So I contacted Flurry support and this is what I heard back:

So, at present its not possible to record / log events while the app is in the background.

Our engineering team is working on a solution to this and this should be available in one of the future versions of our SDK, in probably a months time.

So I guess we'll wait and see.

于 2013-05-27T00:07:45.137 回答