Migración del SDK de Vungle para Android de la v. 5 a la v. 6

Le damos la bienvenida a la guía de migración del SDK de Vungle para Android v6. El nuevo SDK ha sido completamente reescrito para ser robusto y liviano. Utilice este documento como guía a través de la actualización del SDK porque hay cambios significativos tanto en la API como en los detalles de integración. Si se trata de una integración completamente nueva y no está migrando desde el SDK v5, utilice la guía Integración del SDK de Vungle para Android v6 en lugar de esta.

En este artículo:

RGPD: Implementación recomendada

A partir del 25 de mayo, se aplica en la Unión Europea el Reglamento General de Protección de Datos (RGPD, también conocido por sus iniciales en inglés: GDPR). Para cumplir con el RGPD, los desarrolladores tienen dos opciones.

  • Opción 1 (recomendada): El editor controla el proceso de consentimiento de RGPD a nivel del usuario y luego comunica la elección del usuario a Vungle. Para hacer esto, los desarrolladores pueden recoger el consentimiento del usuario usando su propio mecanismo y luego usar las API de Vungle para actualizar o consultar el estado de consentimiento del usuario. Consulte la sección Instrucciones de implementación recomendadas para RGPD para obtener más información.

  • Opción 2: Permitir que Vungle maneje los requisitos. Vungle mostrará un cuadro de diálogo de consentimiento antes de reproducir un anuncio para un usuario europeo, y recordará el consentimiento o rechazo del usuario para anuncios posteriores.

Antes de empezar

Aspectos destacados de la versión

  • Velocidad: El rendimiento de la inicialización y del almacenamiento en caché de anuncios es hasta cinco veces superior a la v5
  • Ligero: Reducido número de métodos
    • Núcleo del SDK: 750 métodos
    • Integración completa que incluye bibliotecas de terceros: ~4000 métodos
  • Cumplimiento de RGPD: Vungle brinda dos opciones para obtener el consentimiento del usuario: Vungle o el editor pueden controlar este proceso. Se agregaron nuevas llamadas a la API.

Requisitos

  • Android 4.0 (Ice Cream Sandwich - API versión 14) o posterior

Aplicación de muestra

Paso 1. Cambie el SDK de Vungle en su proyecto

Dependiendo de la configuración de su proyecto, utilice la integración de AAR a través de Maven o JAR para la integración manual.

Opción 1. Integración con Gradle

dependencies {
compile 'com.github.vungle:vungle-android-sdk:6.2.3'
compile 'com.google.android.gms:play-services-basement:11.0.1' // Required
compile 'com.google.android.gms:play-services-location:11.0.1' // Recommended
}

Salte a “Paso 2. Importe el SDK de Vungle”.

Opción 2. Integración con JAR

Descargue el SDK de Vungle v6 y reemplace el antiguo SDK de Vungle y los archivos JAR de dependencias de terceros con el nuevo SDK y las bibliotecas. Preste atención a la adición y eliminación de las bibliotecas necesarias, así como a las actualizaciones de versiones.

Bibliotecas v5 Bibliotecas v6
image3.png image2.png

Compile todos los archivos JAR del paquete del SDK descargado.

dependencies { // Vungle SDK compile files('libs/vungle-android-sdk-6.2.5.jar') // Required Third-party Dependencies compile files('libs/android-job-1.2.0.jar') compile files('libs/cat-1.0.5.jar') compile files('libs/converter-gson-2.2.0.jar') compile files('libs/fetch-1.1.5.jar') compile files('libs/gson-2.7.jar') compile files('libs/logging-interceptor-3.7.0.jar') compile files('libs/okhttp-3.7.0.jar') compile files('libs/okio-1.12.0.jar') compile files('libs/retrofit-2.2.0.jar') compile files('libs/VNG-moat-mobile-app-kit-2.2.0.jar') // Google Play Services compile 'com.google.android.gms:play-services-gcm:11.0.4' // Required compile 'com.google.android.gms:play-services-basement:11.0.4' // Optional compile 'com.google.android.gms:play-services-location:11.0.4' // Optional }

Modifique su AndroidManifest.xml.

<!--Required Permissions-->
<uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" android:maxSdkVersion="18" />
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
<uses-permission android:name="android.permission.RECEIVE_BOOT_COMPLETED" />
<uses-permission android:name="android.permission.WAKE_LOCK" /> <!--Optional Permissions-->
<uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" />
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" /> <application
android:allowBackup="true"
android:icon="@mipmap/ic_launcher"
android:label="@string/app_name"
android:roundIcon="@mipmap/ic_launcher_round"
android:supportsRtl="true"
android:theme="@style/AppTheme"
android:networkSecurityConfig="@xml/network_security_config" > <activity android:name=".MainActivity">
<intent-filter>
<action android:name="android.intent.action.MAIN" /> <category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity> <!-- Google Play Services -->
<meta-data android:name="com.google.android.gms.version"
android:value="@integer/google_play_services_version" /> <!-- Vungle -->
<activity
android:name="com.vungle.warren.ui.VungleActivity"
android:configChanges="keyboardHidden|orientation|screenSize|screenLayout|smallestScreenSize"
android:launchMode="singleTop"
android:theme="@android:style/Theme.Translucent.NoTitleBar" /> <!-- android-job -->
<service
android:name="com.evernote.android.job.v21.PlatformJobService"
android:exported="false"
android:permission="android.permission.BIND_JOB_SERVICE" />
<service
android:name="com.evernote.android.job.v14.PlatformAlarmService"
android:exported="false"
android:permission="android.permission.BIND_JOB_SERVICE" />
<service
android:name="com.evernote.android.job.v14.PlatformAlarmServiceExact"
android:exported="false" />
<receiver
android:name="com.evernote.android.job.v14.PlatformAlarmReceiver"
android:exported="false" >
<intent-filter>
<!-- Keep the filter for legacy intents -->
<action android:name="com.evernote.android.job.v14.RUN_JOB" />
<action android:name="net.vrallev.android.job.v14.RUN_JOB" />
</intent-filter>
</receiver>
<receiver
android:name="com.evernote.android.job.JobBootReceiver"
android:exported="false" >
<intent-filter>
<action android:name="android.intent.action.BOOT_COMPLETED" />
<action android:name="android.intent.action.QUICKBOOT_POWERON" />
<action android:name="com.htc.intent.action.QUICKBOOT_POWERON" />
<action android:name="android.intent.action.MY_PACKAGE_REPLACED" />
</intent-filter>
</receiver>
<service
android:name="com.evernote.android.job.gcm.PlatformGcmService"
android:enabled="false"
android:exported="true"
android:permission="com.google.android.gms.permission.BIND_NETWORK_TASK_SERVICE" >
<intent-filter>
<action android:name="com.google.android.gms.gcm.ACTION_TASK_READY" />
</intent-filter>
</service>
<service
android:name="com.evernote.android.job.JobRescheduleService"
android:exported="false"
android:permission="android.permission.BIND_JOB_SERVICE" /> </application>

Paso 2. Importe el SDK de Vungle

// v5 Import SDK
import com.vungle.publisher.*;

// v6 Import SDK
import com.vungle.warren.*;

Paso 3. Inicialice el SDK de Vungle

Anteriormente, para inicializar, primero había que tomar una instancia del SDK de Vungle y emitir init(). Este método tomaba la id. de la aplicación Vungle, una matriz de cadena que contiene las id. de referencia de ubicación y VungleInitListener, como esto:

// v5 Initialization
private final VunglePub vunglePub = VunglePub.getInstance();
private final String[] placement_array = {"PLACEMENT_1", "PLACEMENT_2", "PLACEMENT_3"};
...
vunglePub.init(this, app_id, placement_array, new VungleInitListener() {
@Override
public void onSuccess() { }

@Override
public void onFailure(Throwable e) { }
});
}

El nuevo método de inicialización toma parámetros diferentes y en otro orden:

  • Lista de cadenas de id. de referencia de ubicación utilizadas
  • Id. de la aplicación Vungle
  • Contexto de la aplicación
  • InitCallback
    • onSuccess: notifica cuando el SDK se ha inicializado correctamente
    • onError: notifica cuando la inicialización ha fallado
      • devuelve IllegalArgumentException si InitCallback es nulo
      • devuelve VungleException si los argumentos requeridos faltan o no son válidos
    • onAutoCacheAdAvailable: notifica cuando la ubicación de caché automático tiene un anuncio disponible para reproducir

El onAutoCacheAdAvailablecallback está disponible como parte de la devolución de llamada de inicialización porque el SDK intentará continuamente almacenar en caché un anuncio para la ubicación en caché automático cada vez que un anuncio no se guarde en caché. Esto incluye cuando se inicia el SDK por primera vez o cuando se ha reproducido el anuncio previamente almacenado en caché. Esto permanecerá activo (“true”) hasta que el proceso se extinga o la recolección de elementos obsoletos descarte la instancia de Vungle. Para todas las demás ubicaciones que no sean ubicaciones de caché automático, loadAd debe formularse explícitamente como se describe en el “Paso 5. Cargar un anuncio”.

// v6 Initialization
private final List<String> placement_collection = Arrays.asList("PLACEMENT_1", "PLACEMENT_2", "PLACEMENT_3");

Vungle.init(placement_collection, app_id, this.getApplicationContext(), new InitCallback() {
@Override
public void onSuccess() {
// Initialization has succeeded and SDK is ready to load an ad or play one if there
// is one pre-cached already
}

@Override
public void onError(Throwable throwable) {
// Initialization error occurred - throwable.getMessage() contains error message
}

@Override
public void onAutoCacheAdAvailable(String placementId) {
// Callback to notify when an ad becomes available for the auto-cached placement
//
// NOTE: This callback works only for the auto-cached placement. Please use
// LoadAdCallback interface for other placements
}
};

Puede comprobar si el SDK de Vungle está inicializado en cualquier momento invocando el método isInitialized:

public static boolean isInitialized() 

Paso 4. Monitor de eventos

El VungleAdEventListener global en el SDK v5 se ha sustituido por dos devoluciones de llamada independientes para eventos de carga y reproducción en el SDK v6. Elimine la implementación de VungleAdEventListener para SDK v5 de su proyecto:

// Remove v5 Event Listener
public class FirstActivity extends android.app.Activity {

private final VungleAdEventListener vungleListener = new VungleAdEventListener(){

@Override
public void onAdEnd(String placementReferenceId, boolean wasSuccessfulView, boolean wasCallToActionClicked) { }

@Override
public void onAdStart(String placementReferenceId) { }

@Override
public void onUnableToPlayAd(String placementReferenceId, String reason) { }

@Override
public void onAdAvailabilityUpdate(String placementReferenceId, boolean isAdAvailable) { }
};

@Override
public void onDestroy() {
vunglePub.clearEventListeners();
super.onDestroy();
};
}

Implemente LoadAdCallback para eventos de carga de anuncios y PlayAdCallback para eventos de reproducción de anuncios ahora si desea usar la devolución de llamada genérica para todos los eventos. De lo contrario, salte a “Paso 5. Cargar un anuncio” para implementar devoluciones de llamadas en línea.

// Implement v6 LoadAdCallback
private final LoadAdCallback vungleLoadAdCallback = new LoadAdCallback() {
@Override
public void onAdLoad(String placementReferenceId) {
// Placement reference ID for the placement to load ad assets
}

@Override
public void onError(String placementReferenceId, Throwable throwable) {
// Placement reference ID for the placement that failed to download ad assets
// Throwable contains error message
}
};

 

// Implement v6 PlayAdCallback
private final PlayAdCallback vunglePlayAdCallback = new PlayAdCallback() {
@Override
public void onAdStart(String placementReferenceId) {
// Placement reference ID for the placement to be played
}

@Override
public void onAdEnd (String placementReferenceId, boolean completed, boolean isCTAClicked) {
// Placement reference ID for the placement that has completed ad experience
// completed has value of true or false to notify whether video was
// watched for 80% or more
// isCTAClkcked has value of true or false to indicate whether download button
// of an ad has been clicked by the user
}

@Override
public void onError(String placementReferenceId, Throwable throwable) {
// Placement reference ID for the placement that failed to play an ad
// Throwable contains error message
}
};

Paso 5. Cargar un anuncio

La carga de un anuncio es esencialmente la misma en ambas versiones a excepción de la distinción principal que en v6, se permite una devolución de llamada por carga en lugar de depender del VungleAdEventListener global de la v5. El LoadAdCallback será notificado sobre el estado de carga para la llamada a la que fue asignado. El SDK v6 solo hace referencia a esta devolución de llamada y no se almacena en ningún lugar; es responsabilidad del llamante asegurarse de que la devolución de llamada se administre correctamente.

// v5 loadAd
public void loadAd(@NonNull String placementReferenceId)

// v6 loadAd
public static void loadAd(@NonNull final String id, @Nullable LoadAdCallback callback)

El SDK administra la descarga del anuncio publicitario para la ubicación en caché automático, por lo que no es necesario invocar este método para la ubicación en caché automática. Para todas las otras ubicaciones, el método loadAd debe ser invocado y completado con éxito antes de que el SDK pueda reproducir un anuncio desde la ubicación. La devolución de llamada de onAdLoad se activará cuando esto suceda.

// v6 Load Ad Implementation
if (Vungle.isInitialized()) {
Vungle.loadAd("PLACEMENT_ID", new LoadAdCallback() {
@Override
public void onAdLoad(String placementReferenceId) { }

@Override
public void onError(String placementReferenceId, Throwable throwable) { }
};
}

Paso 6. Verificar la disponibilidad de anuncios

La verificación de la disponibilidad se ha mantenido esencialmente igual que en v5, con la única diferencia de que el método es ahora un método estático en lugar de un método de instancia.

 // v5 isAdPlayable
public boolean isAdPlayable(@NonNull final String placementReferenceId)

// v6 canPlayAd
public static boolean canPlayAd(@NonNull String id)

Paso 7. Reproducir un anuncio

De forma similar al cambio en la carga de un anuncio, reproducir un anuncio requiere la misma información que en v5, con la opción de pasar un PlayAdCallback al método, que recibirá una notificación de éxito o errores durante la reproducción del anuncio.

// v5 playAd
public void playAd(@NonNull String placementReferenceId, @Nullable AdConfig adConfig)

// v6 playAd
public static void playAd(@NonNull final String id, final AdConfig settings, @Nullable final PlayAdCallback listener)

Siempre se debe comprobar la disponibilidad de anuncios llamando al método canPlayAd antes de invocar el método playAd. También debe asegurarse de que no se emita un playAd adicional antes de recibir un onAdEnd o una devolución de llamada onError desde la llamada inicial playAd, debido a que el anuncio no se renderizará correctamente si se invoca playAd varias veces en rápida sucesión.

// v6 Play Ad Implementation
if (Vungle.canPlayAd("PLACEMENT_ID")) {
Vungle.playAd("PLACEMENT_ID", new AdConfig, new PlayAdCallback() {
@Override
public void onAdStart(String placementReferenceId) { }

@Override
public void onAdEnd(String placementReferenceId, boolean completed, boolean isCTAClicked) { }

@Override
public void onError(String placementReferenceId, Throwable throwable) { }
});
}

Paso 8. Opciones de configuración

Opciones de reproducción de anuncios

La siguiente tabla muestra todas las opciones de AdConfig disponibles.

Opción

Descripción

setBackButtonImmediatelyEnabled

verdadero (“true”) si el botón Atrás debe habilitarse antes de que aparezca el botón de cerrar anuncio, de lo contrario, falso (“false”)

setFlexViewCloseTime

toma un valor entero mayor o igual a 0 que especifica el tiempo en segundos para que el anuncio de Flex View se cierre automáticamente

setImmersiveMode

verdadero si el modo inmersivo se habilitará para los dispositivos KitKat +, de lo contrario será falso

setAutoRotate

verdadero si se supone que el anuncio de video debe rotar automáticamente, falso para seguir la orientación del anuncio de video

setMuted

verdadero si el video debe comenzar con una configuración de audio que coincida con la de su aplicación adjunta, falso si siempre debe comenzar en silencio

setOrdinal

toma un valor entero de recuento ordinal para realizar un seguimiento de la cantidad de anuncios que se han reproducido en la misma sesión

setTransitionAnimationEnabled

verdadero si la animación de transición de video debe estar habilitada, falsa si debe deshabilitarse

Personalizar anuncios con recompensa

El cuadro de diálogo emergente para los anuncios premiados se puede configurar con el objeto AdConfig en la v5. En su lugar, la v6 proporciona un nuevo método: setIncentivizedFields.

public static void setIncentivizedFields(@Nullable String userID, @Nullable String title, @Nullable String body, @Nullable String keepWatching, @Nullable String close) 

Cerrar anuncio de Flex View

Se puede cerrar Flex View mediante programación generando el método closeFlexViewAd con la id. de referencia que está reproduciendo el anuncio de Flex View.

public static boolean closeFlexViewAd(@NonNull final String placementReferenceId) 

Lista de ubicaciones válidas

Un método de ayuda que devuelve Collection of String que contiene todos los id. de referencia de ubicación válidos para la sesión actual.

public static Collection<String> getValidPlacements() 

Reglas de ProGuard

# Vungle -keep class com.vungle.warren.** { *; } # Evernote -dontwarn com.evernote.android.job.gcm.** -dontwarn com.evernote.android.job.GcmAvailableHelper -dontwarn com.google.android.gms.ads.identifier.** -keep public class com.evernote.android.job.v21.PlatformJobService -keep public class com.evernote.android.job.v14.PlatformAlarmService -keep public class com.evernote.android.job.v14.PlatformAlarmReceiver -keep public class com.evernote.android.job.JobBootReceiver -keep public class com.evernote.android.job.JobRescheduleService -dontwarn org.codehaus.mojo.animal_sniffer.IgnoreJRERequirement -keep class com.google.android.gms.internal.** { *; } # Moat SDK -keep class com.moat.** { *; } -dontwarn com.moat.**

Instrucciones de implementación recomendadas para RGPD

Para usar las API de Vungle para actualizaciones o consultas sobre el estado de consentimiento del usario (según la recomendación de la Opción 1 de las Instrucciones de implementación recomendadas para RGPD de Vungle) use estas funciones:

  • // To set the user's consent status to opted in: Vungle.updateConsentStatus(Vungle.Consent.OPTED_IN); // To set the user's consent status to opted out: Vungle.updateConsentStatus(Vungle.Consent.OPTED_OUT); // To find out what the user's current consent status is: // This will return null if the GDPR Consent status has not been set // Otherwise, it will return Vungle.Consent.OPTED_IN or Vungle.Consent.OPTED_OUT UpdateConsentStatus? currentStatus = sdkInstance.GetCurrentConsentStatus(); Vungle.Consent currentStatus = Vungle.getConsentStatus(); 
¿Tiene más preguntas? Enviar una solicitud

Comentarios