Как отследить время, когда пользователь прослушивает определенный c подкаст - PullRequest
0 голосов
/ 16 апреля 2020

У меня есть приложение iOS о подкастах, и я хочу отслеживать, как долго пользователь слушает каждый подкаст. Я попробовал базовое c - когда пользователь играет, я сохраняю метку времени, а когда останавливается, он отправляет событие с разницей в метке времени, но, очевидно, это не работает, потому что есть много крайних случаев.

У меня есть проблемы знать, когда пользователь имеет приложение в фоновом режиме и перестает слушать в какой-то момент через элементы управления системой. Также, когда пользователь или система убивает приложение, не нажимая «пауза» или «стоп». Я думаю, что эти 2 случая являются моими основными неотслеживаемыми случаями.

Есть идеи, как мне создать работающее решение? Я не хочу / не могу оплачивать внешние услуги - я просто полагаюсь на Firebase.

Спасибо!

1 Ответ

1 голос
/ 16 апреля 2020

Вы можете переопределить метод applicationWillTerminate в своем приложении и сохранить текущий прогресс пользователя в UserDefaults.

Если docs скажем, у вас есть несколько секунд, чтобы сделать это:

Этот метод позволяет вашему приложению узнать, что оно должно быть завершено и полностью удалено из памяти. Вы должны использовать этот метод для выполнения любых заключительных задач очистки для вашего приложения, таких как освобождение общих ресурсов, сохранение пользовательских данных и аннулирование таймеров. Ваша реализация этого метода имеет приблизительно пять секунд для выполнения любых задач и возврата.

Ваш код может выглядеть следующим образом:

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
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...