0

我有一个关于播客的 iOS 应用程序,我想跟踪用户收听每个播客的时间。我已经尝试过基本的 - 当用户播放时,我保存时间戳,当它停止时,它会发送一个带有时间戳差异的事件,但它显然不起作用,因为有很多边缘情况。

我有问题要知道用户何时在后台使用该应用程序并在某个时候通过系统控件停止收听。此外,当用户或系统在没有点击“暂停”或“停止”的情况下终止应用程序时。我认为这两个案例是迄今为止我主要的未跟踪案例。

知道如何构建有效的解决方案吗?我不想/不能支付外部服务 - 我只是依靠 Firebase。

谢谢!

4

1 回答 1

1

您可以覆盖applicationWillTerminate应用程序中的方法,并将当前用户进度保存到 UserDefaults。

正如文档所说,你有几秒钟的时间来做这件事:

此方法让您的应用程序知道它即将被终止并完全从内存中清除。您应该使用此方法为您的应用程序执行任何最终清理任务,例如释放共享资源、保存用户数据和使计时器无效。您对此方法的实现大约有五秒钟的时间来执行任何任务并返回。

您的代码可能如下所示:

var player: AVPlayer!

func applicationWillTerminate(_ application: UIApplication) {
    UserDefaults.standard.setValue(player.currentTime().seconds, forKey: "curPlayerTime")
}

然后,在应用程序启动时,您可以恢复它:

func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplication.LaunchOptionsKey: Any]?) -> Bool {

    if let lastPlayerTime = UserDefaults.standard.value(forKey: "curPlayerTime") as? Double {
          // update your player
    }

    return true
}
于 2020-04-16T15:31:36.517 回答