Migration du SDK Vungle Android de la v. 5 à la v. 6

Bienvenue dans le guide de migration pour la version 6 du SDK Vungle Android ! Le nouveau SDK a été entièrement remanié pour être à la fois robuste et léger. Ce document vous guidera à travers la mise à niveau du SDK car des modifications importantes ont été apportées à l'API et aux détails d'intégration. Si vous effectuez une nouvelle intégration et non une migration depuis la version 5 du SDK, consultez le guide Intégration du SDK Vungle Android v6 au lieu de ce guide.

Dans cet article :

RGPD : mise en œuvre recommandée

Depuis le 25 mai, le Règlement général sur la protection des données (RGPD) est entré en vigueur dans l'Union Européenne. Les développeurs disposent de deux options pour se conformer au RGPD.

  • Option 1 (recommandée) : l'éditeur contrôle le processus de consentement au RGPD au niveau de l'utilisateur, puis communique le choix de l'utilisateur à Vungle. Pour ce faire, les développeurs peuvent obtenir le consentement de l'utilisateur via leur propre mécanisme, puis utiliser les API Vungle pour mettre à jour ou demander le statut du consentement de l'utilisateur. Consultez la section Instructions relatives à la mise en œuvre recommandée du RGPD pour plus de détails.

  • Option 2 : laisser Vungle gérer les conditions requises. Vungle affichera une boîte de dialogue de consentement avant de lire une publicité pour un utilisateur européen et mémorisera le consentement ou le rejet de l'utilisateur pour les publicités ultérieures.

Avant de commencer

Points importants de la version

  • Rapide : l'initialisation et les performances de mise en cache des publicités sont jusqu'à cinq fois plus rapides que dans la v5
  • Léger : nombre de méthodes réduit
    • Core SDK : 750 méthodes
    • Intégration totale, bibliothèques tierces incluses : ~4 000 méthodes
  • Conformité au RGPD : Vungle offre deux options pour obtenir le consentement de l'utilisateur : Vungle ou l'éditeur peut contrôler ce processus. De nouveaux appels d'API ont été ajoutés.

Configuration nécessaire

  • Android 4.0 (Ice Cream Sandwich - API version 14) ou version supérieure

Exemple d'application

Étape 1. Changer le SDK Vungle dans votre projet

Selon la configuration de votre projet, utilisez l'intégration AAR via Maven ou JAR pour une intégration manuelle.

Option 1. Intégration de 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
}

Passez à "Étape 2. Importer le SDK Vungle."

Option 2. Intégration JAR

Téléchargez Vungle SDK v6 et remplacez l'ancien SDK Vungle et les anciens fichiers JAR de dépendance tiers par le nouveau SDK et les nouvelles bibliothèques. Soyez attentif à l'ajout et à la suppression des bibliothèques requises, ainsi qu'aux mises à jour de version.

Bibliothèques de la v5 Bibliothèques de la v6
image3.png image2.png

Compilez tous les fichiers JAR à partir du package SDK téléchargé.

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 }

Modifiez votre 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>

Étape 2. Importer le SDK Vungle

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

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

Étape 3. Initialiser le SDK Vungle

Auparavant, si vous vouliez initialiser, vous deviez commencer par ouvrir une instance du SDK Vungle et saisir init(). Cette méthode nécessitait un ID d'application Vungle, un tableau de chaînes contenant les ID de référence des placements et VungleInitListener, comme ceci :

// 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) { }
});
}

La nouvelle méthode d'initialisation utilise différents paramètres dans un ordre différent :

  • Liste des chaînes des ID de référence des placements utilisés
  • ID d'application Vungle
  • Contexte de l'application
  • InitCallback
    • onSuccess : notifie lorsque le SDK a été initialisé avec succès
    • onError : notifie lorsque l'initialisation a échoué
      • renvoie IllegalArgumentException si InitCallback a la valeur null
      • renvoie VungleException si les arguments nécessaires sont manquants ou non valides
    • onAutoCacheAdAvailable : notifie si une publicité peut être diffusée au placement mis en cache automatiquement

Le paramètre onAutoCacheAdAvailablecallback fait partie du rappel d'initialisation, car le SDK essaiera constamment de mettre en cache une publicité du placement mis en cache automatiquement lorsqu'une publicité n'est pas mise en cache. Cela concerne notamment le premier démarrage du SDK ou lorsque la publicité mise préalablement en cache pour le placement a été diffusée. Cela rester vrai jusqu'à ce que le processus soit terminé ou que l'espace mémoire de l'instance Vungle soit récupéré. Pour tous les autres placements n'étant pas mis en cache automatiquement, loadAd doit être indiqué, comme décrit dans "Étape 5. Charger une publicité."

// 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
}
};

Vous pouvez vérifier si le SDK Vungle est initialisé à tout moment en appelant la méthode isInitialized :

public static boolean isInitialized() 

Étape 4. Écouteur d'événements

Le VungleAdEventListener global de la v5 du SDK a été remplacé par deux rappels indépendants pour les événements de chargement et de lecture dans la v6 du SDK. Veuillez retirer l'implémentation de VungleAdEventListener de votre projet pour la v5 du SDK :

// 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();
};
}

Implémentez LoadAdCallback pour les événements de chargement des publicités et PlayAdCallback pour les événements de lecture des publicités dès maintenant si vous souhaitez utiliser un rappel générique pour tous les événements. Sinon, passez à la section "Étape 5. Charger une publicité" pour implémenter les rappels intégrés.

// 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
}
};

Étape 5. Charger une publicité

Le chargement des publicités n'a pas vraiment changé entre les deux versions, si ce n'est que dans la v6, un rappel par chargement est autorisé et ne dépend plus du VungleAdEventListener global de la v5. La méthode LoadAdCallback sera informée de l'état de chargement de l'appel auquel il a été attribué. La v6 du SDK ne fait que référencer ce rappel et ne le stocke nulle part ; l'appelant doit s'assurer que le rappel est géré correctement.

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

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

Le SDK gère le téléchargement des ressources publicitaires pour le placement mis en cache automatiquement, il est donc inutile d'invoquer cette méthode pour le placement mis en cache automatiquement. Pour tous les autres placements, la méthode loadAd doit être invoquée et terminée avec succès avant que le SDK ne puisse diffuser une publicité pour le placement. Le rappel onAdLoad se déclenche lorsque c'est le cas.

// 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) { }
};
}

Étape 6. Vérifier la disponibilité de la publicité

La vérification de la disponibilité n'a pas beaucoup changé depuis la v5. La seule différence réside dans le fait que la méthode soit désormais statique au lieu d'être une méthode d'instance.

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

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

Étape 7. Diffuser une publicité

Tout comme la modification du chargement d'une publicité, diffuser une publicité nécessite les mêmes informations que dans la v5, avec une option permettant de transmettre une commande PlayAdCallback à la méthode, qui sera informée de la réussite ou des erreurs de lecture de la publicité.

// 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)

Vous devriez toujours vérifier la disponibilité des publicités en appelant la méthode canPlayAd avant d'invoquer la méthode playAd. Vous devez également vous assurer qu'aucune commande playAd supplémentaire n'est émise avant de recevoir un rappel onAdEnd ou onError de l'appel playAd initial, car la publicité n'aura pas un rendu correct si la commande playAd est appelée plusieurs fois successivement.

// 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) { }
});
}

Étape 8. Options de configuration

Options de lecture de la publicité

Le tableau suivant présente toutes les options disponibles pour AdConfig.

Option

Description

setBackButtonImmediatelyEnabled

true si le bouton de retour doit être activé avant que le bouton de fermeture de la publicité n'apparaisse, false sinon

setFlexViewCloseTime

prend une valeur entière supérieure ou égale à 0 indiquant le temps en secondes après lequel la publicité Flex-View se fermera automatiquement

setImmersiveMode

true si le mode immersif est activé pour les appareils sous KitKat ou une version ultérieure, false sinon

setAutoRotate

true si la publicité vidéo doit pivoter automatiquement, false pour suivre l'orientation de la publicité vidéo

setMuted

true si la vidéo doit se lancer avec ses paramètres audio correspondant à ceux de l'application qui l'entoure, false si elle doit se lancer en sourdine

setOrdinal

prend une valeur entière du nombre ordinal pour suivre le nombre de publicités diffusées au cours de la même session

setTransitionAnimationEnabled

true si l'animation de transition vidéo doit être activée, false si elle doit être désactivée

Personnalisation des publicités rémunérées

La boîte de dialogue contextuelle des publicités rémunérées était configurable avec l'objet AdConfig dans la v5, mais la v6 offre une nouvelle méthode : setIncentivizedFields.

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

Fermer la publicité Flex-View

La publicité Flex-View peut être fermée par la programmation en utilisant la méthode closeFlexViewAd avec l'ID de référence de le placement qui joue actuellement la publicité Flex-View.

public static boolean closeFlexViewAd(@NonNull final String placementReferenceId) 

Liste des placements valides

Une méthode d'assistance qui renvoie la collection de chaînes contenant tous les ID de référence des placements valides pour la session en cours.

public static Collection<String> getValidPlacements() 

Règles 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.**

Instructions relatives à la mise en œuvre recommandée du RGPD

Pour utiliser les API Vungle pour mettre à jour ou demander le statut du consentement de l'utilisateur (comme recommandé dans l'Option 1 de la section RGPD : mise en œuvre recommandée), utilisez ces fonctions :

  • // 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(); 
Vous avez d’autres questions ? Envoyer une demande

Commentaires