Setup Google Analytics 4 Ott Video Services
Tech Talk
Analytics
OTT
CÓMO CONFIGURAR GOOGLE ANALYTICS 4 PARA SERVICIOS DE VÍDEO OTT
Jan 28, 2020
Descubra cómo aprovechar Google Analytics 4 para realizar un seguimiento de los eventos de reproducción de vídeo de su servicio de streaming de vídeo OTT y conocer la popularidad de su contenido.

En 2019, Google comenzó a poner fin a la generación de informes de aplicaciones móviles mediante su SDK de Google Analytics. Esto obligó a las empresas que querían recopilar datos de uso de sus aplicaciones móviles OTT a cambiar al servicio sucesor de Google: Google Analytics 4.
Google Analytics 4 es una potente herramienta para realizar un seguimiento de los eventos de reproducción de vídeo OTT generados por sus aplicaciones y su sitio web. Además, le permite realizar un seguimiento de la popularidad del contenido en su servicio a un nivel mucho más profundo que un simple recuento de visualizaciones. También podrás ver cuántos usuarios están viendo el contenido casi en tiempo real.
EMPEZAR A UTILIZAR GOOGLE ANALYTICS 4
Si está en condiciones de empezar a recopilar datos desde cero, le recomendamos que utilice el nuevo tipo de propiedad de Google Analytics 4 para el análisis de datos OTT (antes conocido como App + Web). Esto permite realizar un seguimiento del tráfico del sitio web y de la aplicación en una vista combinada de Google Analytics. Google ofrece una excelente guía paso a paso para crear una propiedad de Google Analytics 4 en su sitio de asistencia. Hay varias opciones de configuración disponibles, desde iniciar un nuevo sitio en una propiedad de Google Analytics 4 hasta añadir una propiedad de Google Analytics 4 a un sitio que ya disponga de Analytics.
DESARROLLO PARA EVENTOS DE VIDEO OTT EN GOOGLE ANALYTICS 4
CONFIGURACIÓN INICIAL
En primer lugar, tendrás que actualizar tus aplicaciones OTT para que incluyan el SDK de Firebase, lo que puedes hacer utilizando las guías de inicio rápido de Google. Si ya has añadido un flujo de datos de aplicaciones a tu propiedad de Google Analytics 4, Analytics creará automáticamente un proyecto Firebase vinculado.
EVENTOS DE REPRODUCCIÓN DE VÍDEO
A continuación, debe actualizar el reproductor de vídeo para que envíe eventos a Google Analytics 4 cuando se produzcan determinados eventos de reproducción del usuario. Asegúrese de establecer un ID de usuario para que todos los eventos de reproducción de vídeo estén vinculados a un usuario específico. Puede tratarse de un ID anónimo (por ejemplo, si su sitio ofrece vídeos OTT gratuitos sin necesidad de registrarse) o de un ID de suscriptor. No utilices una dirección de correo electrónico como identificador de usuario, ya que constituye información personal e infringe las Condiciones del servicio de Google. Para todos los eventos de reproducción de vídeo, establezca un nombre de evento "video_playback" e incluya los siguientes parámetros en el evento:

Envíe eventos a Google Analytics 4 cuando se produzcan las siguientes acciones:

CÓDIGO DE EJEMPLO ANDROID
Este código de ejemplo muestra los distintos tipos de eventos de reproducción que se pueden enviar desde el reproductor de vídeo a Google Analytics 4:
class MainActivity : AppCompatActivity(){
private lateinit var firebaseAnalytics: FirebaseAnalytics override fun onCreate(savedInstanceState: Bundle?){ super.onCreate(savedInstanceState) // firebase developer documentation // https: //firebase.google.com/docs/reference/android/com/google/firebase/analytics/package-summary firebaseAnalytics = FirebaseAnalytics.getInstance(this) // set user id firebaseAnalytics.setUserId(“test_user_id”) / video playback events / // video start val videoStartBundle = Bundle() videoStartBundle.putString(“video_event”,”start”) videoStartBundle.putString(“video_id”,”tt7984734″) videoStartBundle.putString(“video_title”,”The Lighthouse”) videoStartBundle.putInt(“video_position”,0) videoStartBundle.putInt(“video_duration”,6540) videoStartBundle.putDouble(“video_progress”,0.0) firebaseAnalytics.logEvent(“video_playback”, videoStartBundle) // video pause val videoPauseBundle = Bundle() videoPauseBundle.putString(“video_event”,”pause”) videoPauseBundle.putString(“video_id”,”tt7984734″) videoPauseBundle.putString(“video_title”,”The Lighthouse”) videoPauseBundle.putInt(“video_position”,654) videoPauseBundle.putInt(“video_duration”,6540) videoPauseBundle.putDouble(“video_progress”,10.0) firebaseAnalytics.logEvent(“video_playback”, videoPauseBundle) // video resume val videoResumeBundle = Bundle() videoResumeBundle.putString(“video_event”,”resume”) videoResumeBundle.putString(“video_id”,”tt7984734″) videoResumeBundle.putString(“video_title”,”The Lighthouse”) videoResumeBundle.putInt(“video_position”,654) videoResumeBundle.putInt(“video_duration”,6540) videoResumeBundle.putDouble(“video_progress”,10.0) firebaseAnalytics.logEvent(“video_playback”, videoResumeBundle) // video rewind val videoRewindBundle = Bundle() videoRewindBundle.putString(“video_event”,”rewind”) videoRewindBundle.putString(“video_id”,”tt7984734″) videoRewindBundle.putString(“video_title”,”The Lighthouse”) videoRewindBundle.putInt(“video_position”,327) videoRewindBundle.putInt(“video_duration”,6540) videoRewindBundle.putDouble(“video_progress”,5.0) firebaseAnalytics.logEvent(“video_playback”, videoRewindBundle) // video fast-forward val videoFastForwardBundle = Bundle() videoFastForwardBundle.putString(“video_event”,”fastforward”) videoFastForwardBundle.putString(“video_id”,”tt7984734″) videoFastForwardBundle.putString(“video_title”,”The Lighthouse”) videoFastForwardBundle.putInt(“video_position”,4905) videoFastForwardBundle.putInt(“video_duration”,6540) videoFastForwardBundle.putDouble(“video_progress”,75.0) firebaseAnalytics.logEvent(“video_playback”, videoFastForwardBundle) // video stop val videoStopBundle = Bundle() videoStopBundle.putString(“video_event”,”stop”) videoStopBundle.putString(“video_id”,”tt7984734″) videoStopBundle.putString(“video_title”,”The Lighthouse”) videoStopBundle.putInt(“video_position”,6000) videoStopBundle.putInt(“video_duration”,6540) videoStopBundle.putDouble(“video_progress”,91.74) firebaseAnalytics.logEvent(“video_playback”, videoStopBundle) // video skip val videoSkipBundle = Bundle() videoSkipBundle.putString(“video_event”,”skip”) videoSkipBundle.putString(“video_id”,”tt7984734″) videoSkipBundle.putString(“video_title”,”The Lighthouse”) videoSkipBundle.putInt(“video_position”,6000) videoSkipBundle.putInt(“video_duration”,6540) videoSkipBundle.putDouble(“video_progress”,91.74) firebaseAnalytics.logEvent(“video_playback”, videoSkipBundle) // video progress // send progress events at: // – first 30 seconds reached // – 10%, 20%, 30%, 40%, 50%, 60%, 70%, 80%, 90%, 100% of video completion val videoProgressBundle = Bundle() videoProgressBundle.putString(“video_event”,”progress”) videoProgressBundle.putString(“video_id”,”tt7984734″) videoProgressBundle.putString(“video_title”,”The Lighthouse”) videoProgressBundle.putInt(“video_position”,654) videoProgressBundle.putInt(“video_duration”,6540) videoProgressBundle.putDouble(“video_progress”,10.0) firebaseAnalytics.logEvent(“video_playback”, videoProgressBundle) setContentView(R.layout.activity_main) }}
override fun onCreate(savedInstanceState: Bundle?){
super.onCreate(savedInstanceState)
// firebase developer documentation
// https: //firebase.google.com/docs/reference/android/com/google/firebase/analytics/package-summary
firebaseAnalytics = FirebaseAnalytics.getInstance(this)
// set user id
firebaseAnalytics.setUserId(“test_user_id”)
/ video playback events /
// video start
val videoStartBundle = Bundle()
videoStartBundle.putString(“video_event”,”start”)
videoStartBundle.putString(“video_id”,”tt7984734″)
videoStartBundle.putString(“video_title”,”The Lighthouse”)
videoStartBundle.putInt(“video_position”,0)
videoStartBundle.putInt(“video_duration”,6540)
videoStartBundle.putDouble(“video_progress”,0.0)
firebaseAnalytics.logEvent(“video_playback”, videoStartBundle)
// video pause
val videoPauseBundle = Bundle()
videoPauseBundle.putString(“video_event”,”pause”)
videoPauseBundle.putString(“video_id”,”tt7984734″)
videoPauseBundle.putString(“video_title”,”The Lighthouse”)
videoPauseBundle.putInt(“video_position”,654)
videoPauseBundle.putInt(“video_duration”,6540)
videoPauseBundle.putDouble(“video_progress”,10.0)
firebaseAnalytics.logEvent(“video_playback”, videoPauseBundle)
// video resume
val videoResumeBundle = Bundle()
videoResumeBundle.putString(“video_event”,”resume”)
videoResumeBundle.putString(“video_id”,”tt7984734″)
videoResumeBundle.putString(“video_title”,”The Lighthouse”)
videoResumeBundle.putInt(“video_position”,654)
videoResumeBundle.putInt(“video_duration”,6540)
videoResumeBundle.putDouble(“video_progress”,10.0)
firebaseAnalytics.logEvent(“video_playback”, videoResumeBundle)
// video rewind
val videoRewindBundle = Bundle()
videoRewindBundle.putString(“video_event”,”rewind”)
videoRewindBundle.putString(“video_id”,”tt7984734″)
videoRewindBundle.putString(“video_title”,”The Lighthouse”)
videoRewindBundle.putInt(“video_position”,327)
videoRewindBundle.putInt(“video_duration”,6540)
videoRewindBundle.putDouble(“video_progress”,5.0)
firebaseAnalytics.logEvent(“video_playback”, videoRewindBundle)
// video fast-forward
val videoFastForwardBundle = Bundle()
videoFastForwardBundle.putString(“video_event”,”fastforward”)
videoFastForwardBundle.putString(“video_id”,”tt7984734″)
videoFastForwardBundle.putString(“video_title”,”The Lighthouse”)
videoFastForwardBundle.putInt(“video_position”,4905)
videoFastForwardBundle.putInt(“video_duration”,6540)
videoFastForwardBundle.putDouble(“video_progress”,75.0)
firebaseAnalytics.logEvent(“video_playback”, videoFastForwardBundle)
// video stop
val videoStopBundle = Bundle()
videoStopBundle.putString(“video_event”,”stop”)
videoStopBundle.putString(“video_id”,”tt7984734″)
videoStopBundle.putString(“video_title”,”The Lighthouse”)
videoStopBundle.putInt(“video_position”,6000)
videoStopBundle.putInt(“video_duration”,6540)
videoStopBundle.putDouble(“video_progress”,91.74)
firebaseAnalytics.logEvent(“video_playback”, videoStopBundle)
// video skip
val videoSkipBundle = Bundle()
videoSkipBundle.putString(“video_event”,”skip”)
videoSkipBundle.putString(“video_id”,”tt7984734″)
videoSkipBundle.putString(“video_title”,”The Lighthouse”)
videoSkipBundle.putInt(“video_position”,6000)
videoSkipBundle.putInt(“video_duration”,6540)
videoSkipBundle.putDouble(“video_progress”,91.74)
firebaseAnalytics.logEvent(“video_playback”, videoSkipBundle)
// video progress
// send progress events at:
// – first 30 seconds reached
// – 10%, 20%, 30%, 40%, 50%, 60%, 70%, 80%, 90%, 100% of video completion
val videoProgressBundle = Bundle()
videoProgressBundle.putString(“video_event”,”progress”)
videoProgressBundle.putString(“video_id”,”tt7984734″)
videoProgressBundle.putString(“video_title”,”The Lighthouse”)
videoProgressBundle.putInt(“video_position”,654)
videoProgressBundle.putInt(“video_duration”,6540)
videoProgressBundle.putDouble(“video_progress”,10.0)
firebaseAnalytics.logEvent(“video_playback”, videoProgressBundle)
setContentView(R.layout.activity_main)
}
}
DEPURACIÓN EN GOOGLE ANALYTICS 4
Google Analytics 4 dispone de una función DebugView que permite realizar pruebas de forma muy eficaz. Una vez habilitada, verá un flujo de eventos casi en tiempo real en la consola de Google Analytics 4. También podrá ver todos los parámetros y valores de eventos personalizados, que de otro modo no se podrían ver en la consola de Google Analytics 4. También podrá ver todos los parámetros y valores de eventos personalizados, que de otro modo no es posible ver en la consola de Google Analytics 4. Le recomendamos encarecidamente que utilice esta función para confirmar que sus eventos se disparan en el momento correcto y con todos los valores correctos.

EXPORTAR CON BIGQUERY
Existe un nuevo paradigma para acceder a los datos sin procesar en Google Analytics 4 frente a Google Analytics. Google Analytics ha ofrecido históricamente una API de informes, mientras que Google Analytics 4 ofrece una base de datos: Google BigQuery.
Hay una serie de pasos adicionales que debes seguir para habilitar BigQuery para Google Analytics 4, el primero de los cuales es actualizarte al plan Blaze de Firebase. Se trata de un plan de pago por uso con una agradable ventaja: Google ofrece cuotas de uso gratuitas al mes, por lo que, en función de la cantidad de tráfico que generen tus aplicaciones, es posible que acabes pagando poco o nada.
Le recomendamos que habilite el enlace con BigQuery lo antes posible, ya que los datos sólo empiezan a entregarse a partir de la fecha en que habilita la configuración. Los datos no se rellenan en BigQuery con carácter retroactivo.
Configurar BigQuery tiene un par de ventajas clave:
- Análisis rápido y ad hoc de sus datos.
- Fácil acceso a sus datos brutos.
Algunos datos (como los parámetros personalizados) no pueden visualizarse en su totalidad en Google Analytics 4 Console, mientras que todos los datos están disponibles en BigQuery. El acceso a los datos sin procesar es esencial para los usuarios avanzados y las plataformas de análisis de audiencias de terceros, como Brightcove Audience Insights, que dependen de un conjunto de datos completo.