En esta guía, se muestra cómo usar el SDK de Google Mobile Ads para cargar y mostrar anuncios de Liftoff Monetize mediante mediación, lo que abarca las integraciones de ofertas y cascadas. Se explica cómo agregar Liftoff Monetizar a la configuración de mediación de una unidad de anuncios y cómo integrar el SDK de Vungle y el adaptador en unaUnity app.
Integraciones y formatos de anuncios admitidos
Integración | |
---|---|
Ofertas | 1 |
Cascada | |
Formatos | |
Aplicación abierta | 2 |
Banner | |
Intersticial | |
Recompensado | |
Anuncio intersticial recompensado |
1 La integración de ofertas está en versión beta abierta.
2 La integración en cascada para este formato está en versión beta abierta.
Requisitos
- SDK de anuncios de Google para dispositivos móviles más reciente
- Unity 4 o versiones posteriores
- (Para licitaciones): Complemento de mediación de Google Mobile Ads para Liftoff Monetization 3.8.2 o versiones posteriores (última versión recomendada)
- Para implementar en Android, haz lo siguiente:
- Android con nivel de API 21 o superior
- Para implementar en iOS:
- Objetivo de implementación de iOS 12.0 o una versión posterior
- Un proyecto en funcionamiento Unity configurado con el SDK de anuncios de Google para dispositivos móviles Consulta Cómo comenzar para obtener más información.
- Completa la guía de introducción de mediación.
Paso 1: Configura la IU de Liftoff Monetize
Regístrate o accede a tu cuenta de Monetize de Liftoff.
Haz clic en el botón Add Application para agregar tu app al panel de Monetización de Liftoff.
Completa el formulario y, luego, ingresa todos los detalles necesarios.
Android
iOS
Una vez que se crea la app, selecciónala en el panel de Liftoff Monetizar aplicaciones.
Android
iOS
Toma nota del ID de la app.
Android
iOS
Agrega posiciones nuevas
Para crear una posición nueva que se usará con la mediación de AdMob, navega al panel Monetize Placements de Liftoff, haz clic en el botón Add Placement y selecciona tu app de la lista desplegable.
A continuación, se incluyen los detalles para agregar posiciones nuevas:
Apertura de la aplicación
Selecciona Intersticial y, luego, ingresa un Nombre de la posición. Luego, selecciona Sí en Se puede omitir y completa el resto del formulario. [Solo ofertas] En Monetización, activa el interruptor Ofertas directas desde la aplicación en Habilitado. Haz clic en el botón Continuar en la parte inferior de la página para crear la posición.
Banner
Selecciona Banner, ingresa un Nombre de la posición y completa el resto del formulario. [Solo ofertas] En Monetización, activa el interruptor Ofertas directas desde la aplicación a Habilitado. Haz clic en el botón Continuar en la parte inferior de la página para crear la posición.
Banner de 300 x 250
Selecciona MREC, ingresa un Nombre de la ubicación y completa el resto del formulario. [Solo ofertas] En Monetización, activa el interruptor Ofertas directas desde la aplicación a Habilitado. Haz clic en el botón Continuar en la parte inferior de la página para crear la posición.
Intersticial
Selecciona Intersticial, ingresa un Nombre de la posición y completa el resto del formulario. [Solo ofertas] En Monetización, activa el interruptor Ofertas en la app como Habilitada. Haz clic en el botón Continuar en la parte inferior de la página para crear la posición.
Recompensado
Selecciona Recompensada, ingresa un Nombre de la posición y completa el resto del formulario. [Solo ofertas] En Monetización, activa el interruptor Ofertas en la aplicación como Habilitada. Haz clic en el botón Continuar en la parte inferior de la página para crear la posición.
Anuncio intersticial recompensado
Selecciona Recompensado. Ingresa un Nombre de la posición, habilita la opción Se puede omitir y completa el resto del formulario. [Solo ofertas] En Monetización, activa el interruptor Ofertas directas desde la aplicación a Habilitado. Haz clic en el botón Continuar en la parte inferior de la página para crear la posición.
Nativo
Selecciona Nativo, ingresa un Nombre de la posición y completa el resto del formulario. [Solo ofertas] En Monetización, activa el interruptor Ofertas directas desde la aplicación a Habilitado. Haz clic en el botón Continuar en la parte inferior de la página para crear la posición.
Toma nota del ID de referencia y haz clic en Me parece bien.
Apertura de la aplicación
Banner
Banner de 300 x 250
Intersticial
Recompensado
Anuncio intersticial recompensado
Nativo
Cómo encontrar tu clave de API de Reporting
Ofertas
Este paso no es obligatorio para las integraciones de ofertas.
Cascada
Además del ID de app y el ID de referencia, también necesitarás tu clave de API de informes de Monetize de Liftoff para configurar tu ID de unidad de anuncios de AdMob. Navega al panel de informes de monetización de Liftoff y haz clic en el botón Clave de API de informes para ver tu Clave de API de informes.
Activa el modo de prueba
Para habilitar los anuncios de prueba, ve al panel de Monetización de Liftoff y navega a Aplicaciones.
Selecciona la app para la que deseas habilitar los anuncios de prueba en la sección ID de referencia de la posición de la app. Para habilitar los anuncios de prueba, selecciona Modo de prueba para Mostrar solo anuncios de prueba en la sección Estado.
Android
iOS
Paso 2: Configura la demanda de monetización de Liftoff en la IU de Ad Manager
Cómo configurar la mediación para tu unidad de anuncios
Android
Para obtener instrucciones, consulta el paso 2 de la guía para Android.
iOS
Si quieres obtener instrucciones, consulta el paso 2 de la guía para iOS.
Se agregó Liftoff a la lista de socios publicitarios del RGPD y las reglamentaciones estatales de EE.UU.
Sigue los pasos que se indican en Configuración del GDPR y Configuración de las reglamentaciones estatales de EE.UU. para agregar Liftoff a la lista de socios publicitarios de las reglamentaciones estatales de EE.UU. y el GDPR en la IU de AdMob.
Paso 3: Importa el SDK de Vungle y el adaptador de monetización de Liftoff
Descarga la versión más reciente del complemento de mediación de Google Mobile Ads para Liftoff
Monetizar desde el vínculo de descarga en el
Registro de cambios y extrae el
GoogleMobileAdsVungleMediation.unitypackage
del archivo ZIP.
En el editor de tu proyecto de Unity, selecciona Assets > Import Package > Custom Package y busca el archivo GoogleMobileAdsVungleMediation.unitypackage
que descargaste. Asegúrate de que todos los archivos estén seleccionados y haz clic en Importar.
Luego, selecciona Assets > Play Services Resolver > Android Resolver > Force Resolve. La biblioteca de Unity Play Services Resolver realizará la resolución de dependencias desde cero y copiará las dependencias declaradas en el directorio Assets/Plugins/Android
de tu app para Unity.
Paso 4: Implementa la configuración de privacidad en el SDK de Liftoff Monetize
Consentimiento para la UE y GDPR
Según la Política de Consentimiento de Usuarios de la UE de Google, debes asegurarte de que se realicen determinadas divulgaciones a los usuarios del Espacio Económico Europeo (EEE) y de obtener su consentimiento con respecto al uso de identificadores de dispositivos y datos personales. Esta política refleja los requisitos de la Directiva de Privacidad Electrónica de la UE y el Reglamento General de Protección de Datos (RGPD). Cuando solicites el consentimiento, debes identificar cada red de publicidad de tu cadena de mediación que pueda recopilar, recibir o usar datos personales, y proporcionar información sobre el uso de cada red. Actualmente, Google no puede pasar automáticamente la elección de consentimiento del usuario a esas redes.
El complemento de mediación de Google Mobile Ads para Liftoff Monetize incluye métodos para pasar información de consentimiento al SDK de Vungle. En la siguiente muestra de código, se muestra cómo pasar información de consentimiento al SDK de Vungle. Si decides llamar a este método, te recomendamos que lo hagas antes de solicitar anuncios a través del SDK de anuncios de Google para dispositivos móviles.
using GoogleMobileAds.Mediation.LiftoffMonetize.Api;
// ...
LiftoffMonetize.SetGDPRStatus(true, "v1.0.0");
#if UNITY_IPHONE
LiftoffMonetize.SetGDPRMessageVersion("v1.0.0");
#endif
Consulta las instrucciones de implementación recomendadas del GDPR para Android y iOS para obtener más detalles y los valores que se pueden proporcionar en el método.
Leyes de privacidad estatales de EE.UU.
Las leyes de privacidad de los estados de EE.UU. exigen otorgar a los usuarios el derecho de inhabilitar la "venta" de su "información personal" (según la definición de esos términos que la ley establece). Para ello, se debe incluir un vínculo destacado con el texto "No vender mi información personal" en la página principal del "vendedor". La guía de cumplimiento de las leyes de privacidad de los estados de EE.UU. ofrece la posibilidad de habilitar el procesamiento de datos restringido para la publicación de anuncios de Google, pero Google no puede aplicar este parámetro de configuración a cada red de publicidad de tu cadena de mediación. Por lo tanto, debes identificar cada red de publicidad en tu cadena de mediación que pueda participar en la venta de información personal y seguir los lineamientos de cada una de esas redes para garantizar el cumplimiento.
El complemento de mediación de Google Mobile Ads para Liftoff Monetize incluye métodos para pasar información de consentimiento al SDK de Vungle. En el siguiente código de muestra, se indica cómo pasar la información de consentimiento al SDK de Vungle. Si decides llamar a este método, te recomendamos que lo hagas antes de solicitar anuncios a través del SDK de anuncios de Google para dispositivos móviles.
using GoogleMobileAds.Mediation.LiftoffMonetize.Api;
// ...
LiftoffMonetize.SetCCPAStatus(true);
Consulte las instrucciones de implementación recomendadas de la CCPA para iOS y Android si desea obtener más detalles y los valores que se pueden proporcionar en el método.
Paso 5: Agrega el código obligatorio
Android
No se requiere ningún código adicional para la integración de Liftoff Monetize.
iOS
Integración de SKAdNetwork
Sigue la documentación de Liftoff Monetize para agregar los identificadores de SKAdNetwork al archivo Info.plist
de tu proyecto.
Paso 6: Prueba tu implementación
Habilita los anuncios de prueba
Asegúrate de registrar tu dispositivo de prueba para AdMob y habilitar el modo de prueba en la IU de monetización de Liftoff.
Verifica los anuncios de prueba
Para verificar que recibes anuncios de prueba de la monetización de efectividad, habilita pruebas de una sola fuente del anuncio en el inspector de anuncios mediante las fuentes de anuncios Monetización de levantamiento (ofertas) y Monetización de levantamiento (en cascada).
Códigos de error
Si el adaptador no recibe un anuncio de Liftoff Monetize, los publicadores pueden verificar el error subyacente de la respuesta del anuncio con ResponseInfo
en las siguientes clases:
Android
Formato | Nombre de clase |
---|---|
Aplicación abierta (Licitación) | com.google.ads.mediation.vungle.VungleMediationAdapter |
Apertura de aplicación (cascada) | com.google.ads.mediation.vungle.VungleMediationAdapter |
Banner (ofertas) | com.google.ads.mediation.vungle.VungleMediationAdapter |
Banner (cascada) | com.vungle.mediation.VungleInterstitialAdapter |
Intersticial (ofertas) | com.google.ads.mediation.vungle.VungleMediationAdapter |
Intersticial (cascada) | com.vungle.mediation.VungleInterstitialAdapter |
Recompensados (ofertas) | com.google.ads.mediation.vungle.VungleMediationAdapter |
Recompensados (cascada) | com.vungle.mediation.VungleAdapter |
Intersticial recompensado (licitación) | com.google.ads.mediation.vungle.VungleMediationAdapter |
Anuncio intersticial recompensado (cascada) | com.google.ads.mediation.vungle.VungleMediationAdapter |
iOS
Formato | Nombre de clase |
---|---|
Apertura de la aplicación (licitación) | GADMediationAdapterVungle |
Apertura de aplicación (cascada) | GADMediationAdapterVungle |
Banner (ofertas) | GADMediationAdapterVungle |
Banner (cascada) | GADMAdapterVungleInterstitial |
Intersticial (ofertas) | GADMediationAdapterVungle |
Intersticial (cascada) | GADMAdapterVungleInterstitial |
Recompensado (ofertas) | GADMediationAdapterVungle |
Recompensados (Waterfall) | GADMAdapterVungleRewardBasedVideoAd |
Intersticial recompensado (licitación) | GADMediationAdapterVungle |
Intersticial recompensado (Waterfall) | GADMediationAdapterVungle |
Estos son los códigos y los mensajes que genera el adaptador de monetización de Liftoff cuando no se carga un anuncio:
Android
Código de error | Motivo |
---|---|
101 | Parámetros de servidor no válidos (p. ej., ID de app o ID de posición) |
102 | El tamaño de banner solicitado no corresponde a un tamaño de anuncio de monetización de Liftoff válido. |
103 | La monetización de despegue requiere un contexto Activity para solicitar anuncios. |
104 | El SDK de Vungle no puede cargar varios anuncios para el mismo ID de posición. |
105 | No se pudo inicializar el SDK de Vungle. |
106 | El SDK de Vungle mostró una devolución de llamada de carga correcta, pero Banners.getBanner() o Vungle.getNativeAd() mostraron un valor nulo. |
107 | El SDK de Vungle no está listo para reproducir el anuncio. |
108 | El SDK de Vungle mostró un token de licitación no válido. |
iOS
Código de error | Motivo |
---|---|
101 | Parámetros de servidor no válidos (p. ej., ID de app o ID de posición) |
102 | Ya se cargó un anuncio para esta configuración de red. El SDK de Vungle no puede cargar un segundo anuncio para el mismo ID de posición. |
103 | El tamaño del anuncio solicitado no coincide con un tamaño de banner compatible con Liftoff Monetize. |
104 | El SDK de Vungle no pudo renderizar el anuncio de banner. |
105 | El SDK de Vungle solo admite la carga de 1 anuncio de banner a la vez, independientemente del ID de posición. |
106 | El SDK de Vungle envió una devolución de llamada que indica que el anuncio no se puede reproducir. |
107 | El SDK de Vungle no está listo para reproducir el anuncio. |
Para los errores que provienen del SDK de Vungle, consulta Códigos de error: SDK de Vungle para iOS y Android.
Registro de cambios del complemento de mediación de Unity de Liftoff Monetize
Versión 5.2.1
- Se cambió el nombre de
DummyClient
aPlaceholderClient
. - Admite el adaptador de Liftoff Monetizar para Android versión 7.4.0.1.
- Admite la versión 7.4.0.1 del adaptador de iOS de Liftoff Monetize.
- Se compiló y probó con la versión 9.2.0 del complemento Google Mobile Ads para Unity.
Versión 5.2.0
- Admite la versión 7.4.0.0 del adaptador de Android de Liftoff Monetize.
- Admite el adaptador de Liftoff Monetizar para iOS versión 7.4.0.0.
- Se compiló y probó con la versión 9.1.1 del complemento Google Mobile Ads para Unity.
Versión 5.1.1
- Es compatible con la versión 7.3.2.0 del adaptador de Android de Liftoff Monetize.
- Admite la versión 7.3.2.0 del adaptador de iOS de Liftoff Monetize.
- Se compiló y probó con la versión 9.1.0 del complemento Google Mobile Ads para Unity.
Versión 5.1.0
- Se corrigió un
NullPointerException
que causaba un error de compilación cuando se exportaba como un proyecto de Android. - Se actualizaron las APIs de privacidad:
- Se quitaron los métodos
UpdateConsentStatus()
yUpdateCCPAStatus()
. - Se quitaron las enums
VungleConsentStatus
yVungleCCPAStatus
. - Se actualizó el método
SetGDPRStatus(bool)
aSetGDPRStatus(bool, String)
.
- Se quitaron los métodos
- Se quitaron los siguientes métodos de la clase
LiftoffMonetizeMediationExtras
:SetAllPlacements(String[])
SetSoundEnabled(bool)
- Es compatible con la versión 7.3.1.0 del adaptador de Android de Liftoff Monetize.
- Admite el adaptador de Liftoff Monetizar para iOS versión 7.3.1.0.
- Se compiló y probó con la versión 9.1.0 del complemento Google Mobile Ads para Unity.
Versión 5.0.0
- Se corrigió una advertencia de definición duplicada para
MediationExtras
. - Es compatible con la versión 7.1.0.0 del adaptador de Android de Liftoff Monetize.
- Admite la versión 7.2.1.1 del adaptador de iOS de Liftoff Monetize.
- Se compiló y probó con la versión 8.7.0 del complemento Google Mobile Ads para Unity.
Versión 4.0.0
- Se cambió la marca del complemento de mediación para Unity de Vungle a Liftoff Monetizar.
- Se movió el contenido del adaptador a
GoogleMobileAds/Mediation/LiftoffMonetize/
. - Se refactorizó el espacio de nombres del adaptador para usar
GoogleMobileAds.Mediation.LiftoffMonetize
. - Se agregaron los siguientes métodos a la clase
LiftoffMonetize
:SetGDPRStatus(bool)
SetGDPRMessageVersion(String)
SetCCPAStatus(bool)
- Es compatible con la versión 6.12.1.1 del adaptador de Android de Liftoff Monetize.
- Admite el adaptador de Liftoff Monetizar para iOS versión 7.0.1.0.
- Se compiló y probó con la versión 8.4.1 del complemento de Google Mobile Ads para Unity.
Versión 3.9.2
- Se actualizó la clase
Vungle
:- Se agregó el método
UpdateCCPAStatus(VungleCCPAStatus)
- Se quitó el método
GetCurrentConsentStatus()
. - Se quitó el método
GetCurrentConsentMessageVersion()
.
- Se agregó el método
- Es compatible con la versión 6.12.1.0 del adaptador de Android de Vungle.
- Compatible con el adaptador de Vungle para iOS versión 6.12.2.0.
- Se compiló y probó con la versión 7.4.1 del complemento Google Mobile Ads para Unity.
Versión 3.9.1
- Es compatible con la versión 6.12.1.0 del adaptador de Android de Vungle.
- Admite la versión 6.12.1.1 del adaptador de Vungle para iOS.
- Se compiló y probó con la versión 7.4.0 del complemento Google Mobile Ads para Unity.
Versión 3.9.0
- Es compatible con la versión 6.12.0.0 del adaptador de Android de Vungle.
- Admite la versión 6.12.0.0 del adaptador de Vungle para iOS.
- Se compiló y probó con la versión 7.2.0 del complemento de Google Mobile Ads para Unity.
Versión 3.8.2
- Es compatible con la versión 6.11.0.2 del adaptador de Android de Vungle.
- Admite la versión 6.11.0.1 del adaptador de Vungle para iOS.
- Se compiló y probó con la versión 7.1.0 del complemento Google Mobile Ads para Unity.
Versión 3.8.1
- Compatible con el adaptador de Vungle para Android versión 6.11.0.1.
- Compatible con el adaptador de Vungle para iOS versión 6.11.0.0.
- Se compiló y probó con la versión 7.0.2 del complemento Google Mobile Ads para Unity.
Versión 3.8.0
- Es compatible con la versión 6.11.0.0 del adaptador de Android de Vungle.
- Admite la versión 6.11.0.0 del adaptador de Vungle para iOS.
- Se compiló y probó con la versión 7.0.0 del complemento Google Mobile Ads para Unity.
Versión 3.7.5
- Es compatible con la versión 6.10.5.0 del adaptador para Android de Vungle.
- Admite la versión 6.10.6.1 del adaptador para iOS de Vungle.
- Se compiló y probó con la versión 7.0.0 del complemento Google Mobile Ads para Unity.
Versión 3.7.4
- Compatible con el adaptador de Vungle para Android versión 6.10.4.0.
- Admite la versión 6.10.6.1 del adaptador para iOS de Vungle.
- Se compiló y probó con la versión 7.0.0 del complemento Google Mobile Ads para Unity.
Versión 3.7.3
- Compatible con el adaptador de Vungle para Android versión 6.10.3.0.
- Admite la versión 6.10.5.1 del adaptador de Vungle para iOS.
Versión 3.7.2
- Es compatible con la versión 6.10.2.1 del adaptador de Android de Vungle.
- Admite la versión 6.10.5.1 del adaptador de Vungle para iOS.
Versión 3.7.1
- Es compatible con la versión 6.10.2.0 del adaptador de Android de Vungle.
- Compatible con el adaptador de Vungle para iOS versión 6.10.4.0.
Versión 3.7.0
- Compatible con el adaptador de Vungle para Android versión 6.10.2.0.
- Admite la versión 6.10.3.0 del adaptador de Vungle para iOS.
Versión 3.6.0
- Admite la versión 6.9.1.1 del adaptador de Android de Vungle.
- Admite la versión 6.9.2.0 del adaptador de Vungle para iOS.
Versión 3.5.1
- Es compatible con la versión 6.8.1.0 del adaptador de Android de Vungle.
- Admite la versión 6.8.1.0 del adaptador de Vungle para iOS.
Versión 3.5.0
- Es compatible con la versión 6.8.0.0 del adaptador para Android de Vungle.
- Admite la versión 6.8.0.0 del adaptador de Vungle para iOS.
Versión 3.4.1
- Es compatible con la versión 6.7.1.0 del adaptador de Android de Vungle.
- Admite la versión 6.7.1.0 del adaptador de Vungle para iOS.
Versión 3.4.0
- Es compatible con la versión 6.7.0.0 del adaptador de Android de Vungle.
- Admite la versión 6.7.0.0 del adaptador de Vungle para iOS.
Versión 3.3.1
- Se volvió a empaquetar
vungle-extras-library.jar
envungle-unity-android-library.aar
con una compilación de.aar
compatible con Unity 2020.- Cuando actualices a esta versión, quita
vungle-extras-library.jar
de tu proyecto.
- Cuando actualices a esta versión, quita
- Es compatible con la versión 6.5.3.0 del adaptador de Android de Vungle.
- Admite la versión 6.5.3.0 del adaptador de Vungle para iOS.
Versión 3.3.0
- Es compatible con la versión 6.5.3.0 del adaptador de Android de Vungle.
- Compatible con el adaptador de Vungle para iOS versión 6.5.3.0.
Versión 3.2.0
- Admite la versión 6.4.11.1 del adaptador de Android de Vungle.
- Compatible con el adaptador de Vungle para iOS versión 6.4.6.0.
Versión 3.1.4
- Compatible con el adaptador de Android versión 6.3.24.1.
- Es compatible con la versión 6.3.2.3 del adaptador para iOS.
Versión 3.1.3
- Es compatible con la versión 6.3.24.1 del adaptador para Android.
- Es compatible con la versión 6.3.2.2 del adaptador para iOS.
Versión 3.1.2
- Se actualizó el complemento para admitir la nueva API de Rewarded en versión beta abierta.
- Es compatible con la versión 6.3.24.1 del adaptador para Android.
- Compatible con el adaptador de iOS versión 6.3.2.1.
Versión 3.1.1
- Compatible con la versión 6.3.24.0 del adaptador para Android.
- Compatible con la versión 6.3.2.0 del adaptador para iOS.
- Se actualizó el método
Vungle.UpdateConsentStatus()
para que el parámetroconsentMessageVersion
sea opcional. Ahora se ignora el valor deconsentMessageVersion
para iOS. - Se dio de baja
Vungle.GetCurrentConsentMessageVersion()
para iOS.
Versión 3.1.0
- Compatible con la versión 6.3.17.0 del adaptador para Android.
- Compatible con el adaptador de iOS versión 6.3.0.0.
- Se actualizó el método
Vungle.UpdateConsentStatus()
a fin de tomar un parámetroString
adicional para la versión del mensaje de consentimiento proporcionado por el publicador. - Se agregó el método
Vungle.GetCurrentConsentMessageVersion()
para obtener la versión del mensaje de consentimiento proporcionado por el publicador.
Versión 3.0.1
- Compatible con el adaptador de Android versión 6.2.5.1.
- Compatible con la versión 6.2.0.3 del adaptador para iOS.
Versión 3.0.0
- Compatible con la versión 6.2.5.0 del adaptador para Android.
- Compatible con la versión 6.2.0.2 del adaptador para iOS.
- Se agregaron los siguientes métodos:
- El método
Vungle.UpdateConsentStatus()
para establecer el estado de consentimiento que se registrará en el SDK de Vungle Vungle.GetCurrentConsentStatus()
para obtener el estado de consentimiento actual del usuario.
- El método
Versión 2.0.0
- Compatible con el adaptador de Android versión 5.3.2.1.
- Compatible con la versión 6.2.0.0 del adaptador para iOS.
Versión 1.1.0
- Es compatible con la versión 5.3.2.1 del adaptador para Android.
- Compatible con la versión 5.4.0.0 del adaptador para iOS.
Versión 1.0.0
- Primer lanzamiento
- Compatible con la versión 5.3.0.0 del adaptador para Android.
- Compatible con la versión 5.3.0.0 del adaptador para iOS.