如何跟踪用户收听特定播客的时间

How to track the time a user listens an specific podcast

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

我想知道用户何时在后台运行该应用程序并在某个时候通过系统控件停止收听。此外,当用户或系统在未点击 "pause" 或 "stop" 的情况下终止应用程序时。我认为这2个案例是我目前主要的未追踪案例。

知道如何构建可行的解决方案吗?我不 want/can 不支付外部服务费用 - 我只是依赖 Firebase。

谢谢!

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

正如docs所说,你只有几秒钟的时间来做:

This method lets your app know that it is about to be terminated and purged from memory entirely. You should use this method to perform any final clean-up tasks for your app, such as freeing shared resources, saving user data, and invalidating timers. Your implementation of this method has approximately five seconds to perform any tasks and return.

您的代码可以如下所示:

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
}