Migração da versão 5 para a versão 6 do Vungle SDK para Android

Bem-vindo ao guia de migração do Vungle SDK v6 para Android! O novo SDK foi completamente reformulado para ser robusto e leve. Use este documento para guiá-lo durante o upgrade do SDK, pois há alterações significativas nos detalhes da API e da integração. Se se tratar de uma nova integração e você não estiver fazendo a migração do SDK v.5, use o guia de Integração do Vungle SDK v6 para Android.

Neste artigo:

RGPD: Implementação recomendada

O Regulamento Geral sobre a Proteção de Dados (RGPD) entrou em vigor na União Europeia em 25 de maio. Para entrar em conformidade com o RGPD, desenvolvedores têm duas opções.

  • Opção 1 (recomendado): O distribuidor controla o processo de consentimento do RGPD do usuário e comunica as escolhas do usuário à Vungle. Para isso, os desenvolvedores podem coletar o consentimento do usuário usando seus próprios mecanismos, usando a seguir as APIs da Vungle para atualizar ou enviar uma consulta do status de consentimento do usuário. Consulte a seção Instruções de implementação recomendadas para RGPD para obter detalhes.

  • Opção 2: A Vungle pode lidar com as exigências, exibindo uma caixa de diálogo de consentimento antes de exibir um anúncio para um usuário europeu, e lembrará o consentimento ou rejeição do usuário em anúncios subsequentes.

Antes de começar

Destaques do lançamento

  • Rápido: O desempenho de inicialização e cache do anúncio é até cinco vezes maior que na v5
  • Leve: contagens de método reduzidas
    • SDK principal: 750 métodos
    • Integração completa, incluindo bibliotecas de terceiros: aprox. 4.000 métodos
  • Conformidade com RGPD: A Vungle fornece duas opções para obter consentimento do usuário, e tanto a Vungle quanto o distribuidor podem controlar esse processo. Novas chamadas de API foram adicionadas.

Requisitos

  • Android 4.0 (Ice Cream Sandwich - API versão 14) ou superior

Aplicativo de amostra

Etapa 1. Alterar o Vungle SDK no projeto

Dependendo da configuração do seu projeto, use a integração AAR via Maven ou JAR para integração manual.

Opção 1. Integração 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
}

Passe para a "Etapa 2. Importar o Vungle SDK".

Opção 2. Integração JAR

Faça download do Vungle SDK v6 e substitua o Vungle SDK e os arquivos JAR de terceiros antigos pelo novo SDK e as novas bibliotecas. Tenha cuidado na adição e remoção das bibliotecas necessárias, bem como nas atualizações de versão.

Bibliotecas da versão 5 Bibliotecas da versão 6
image3.png image2.png

Compile todos os arquivos JAR a partir do download do pacote do SDK.

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 o 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>

Etapa 2. Importar o Vungle SDK

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

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

Etapa 3. Inicializar o Vungle SDK

Anteriormente, para inicializar, primeiro era preciso pegar uma instância do Vungle SDK e publicar init() .Esse método utilizou o ID de aplicativo Vungle, o array da string que contém os IDs de referência de posicionamento e VungleInitListener, dessa forma:

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

O novo método de inicialização usa parâmetros diferentes e em diferentes ordens:

  • Lista de strings de substituição dos IDs de referência de posicionamento usados
  • ID do aplicativo Vungle
  • Contexto do aplicativo
  • InitCallback
    • onSuccess: notifica quando o SDK foi inicializado com êxito
    • onError: notifica quando há falha na inicialização
      • gera IllegalArgumentException se InitCallback for nulo
      • gera VungleException se os argumentos necessários estiverem ausentes ou forem inválidos
    • onAutoCacheAdAvailable: notifica quando o posicionamento com cache automático tem um anúncio disponível para ser reproduzido

O onAutoCacheAdAvailablecallback está disponível como parte do callback de inicialização porque o SDK tentará continuamente fazer o cache de um anúncio do posicionamento com cache automático sempre que um anúncio não estiver em cache previamente. Isso inclui casos em que o SDK é iniciado pela primeira vez ou quando um anúncio com cache prévio for reproduzido no posicionamento. Essa condição continuará verdadeira até que o processo acabe ou que a instância do Vungle seja recuperada pela coleta de lixo. Em todos os posicionamentos que não tiverem cache automático, o loadAd deve ser explicitamente emitido conforme descrito na "Etapa 5. Carregar um anúncio".

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

Você pode verificar a qualquer momento se o Vungle SDK está inicializado. Para isso, faça a chamada do método isInitialized:

public static boolean isInitialized() 

Etapa 4. Ouvinte de eventos

O VungleAdEventListener global no SDK v5 foi substituído por dois callbacks independentes para carregar e reproduzir eventos no SDK v6. Remova do projeto a implementação de VungleAdEventListener do SDK v5:

// 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 agora o LoadAdCallback em eventos de carregamento de anúncios e o PlayAdCallback em eventos de reprodução de anúncios se quiser usar o callback genérico em todos os eventos. Caso contrário, pule para a "Etapa 5. Carregar um anúncio" para implementar callbacks em linha.

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

Etapa 5. Carregar um anúncio

O carregamento de anúncios é essencialmente o mesmo em ambas as versões, exceto por uma importante diferença na v6, na qual é permitido um callback por carga, em vez de depender do VungleAdEventListener global da v5. O LoadAdCallback será notificado sobre o estado de carregamento da chamada a que foi atribuído. O SDK v6 só faz referência a esse callback e não o armazena em lugar algum. É responsabilidade do chamador garantir que o callback seja gerenciado corretamente.

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

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

O SDK gerencia o download de ativos de anúncio do posicionamento com cache automático, assim, não há necessidade de invocar esse método no posicionamento com cache automático. Em outros posicionamentos, o método loadAd deve ser invocado e concluído com êxito antes que o SDK execute um anúncio no posicionamento. O callback onAdLoad será acionado quando isso acontecer.

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

Etapa 6. Verificar a disponibilidade do anúncio

A verificação da disponibilidade permaneceu essencialmente igual à da v5, com a única diferença de que o método agora é um método estático em vez de um método de instância.

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

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

Etapa 7. Reproduzir um anúncio

Semelhante à alteração no carregamento de anúncios, a reprodução de anúncios exige as mesmas informações da v5, com a opção de passar um PlayAdCallback para o método, que será notificado sobre o sucesso ou os erros durante a reprodução do anúncio.

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

Você deve sempre verificar a disponibilidade do anúncio chamando o método canPlayAd antes de invocar o método playAd. Você também deve se certificar de que um playAd adicional não seja emitido antes de receber um callback onAdEnd ou onError da chamada playAd inicial, porque o anúncio não será renderizado corretamente se o playAd for chamado de forma repetitiva constantemente.

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

Etapa 8. Opções de configuração

Opções de reprodução de anúncios

A tabela a seguir mostra todas as opções AdConfig disponíveis.

Opção

Descrição

setBackButtonImmediatelyEnabled

true se o botão Voltar for ativado antes da exibição do botão para fechar o anúncio, false em caso contrário

setFlexViewCloseTime

tem um valor inteiro maior ou igual a 0 que especifica o número de segundos para que o anúncio Flex-View seja fechado automaticamente

setImmersiveMode

true se o modo imersivo for ativado em dispositivos KitKat ou superiores, false caso contrário

setAutoRotate

true se o anúncio em vídeo fizer rotação automática, false se seguir a orientação do anúncio em vídeo

setMuted

true se o vídeo começar com as configurações de áudio correspondentes à do aplicativo em questão, false se começar mudo independentemente

setOrdinal

tem um valor inteiro ordinal para rastrear o número de anúncios que foram reproduzidos na mesma sessão

setTransitionAnimationEnabled

true se a animação da transição de vídeo for ativada, false se for desativada

Personalização de anúncios com recompensa

A caixa de diálogo de mensagem pop-up para anúncios com recompensa era configurável com o objeto AdConfig na v5, mas a v6 proporciona um novo método, setIncentivizedFields.

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

Fechar anúncios Flex-View

O Flex-View pode ser fechado programaticamente emitindo o método closeFlexViewAd com o ID de referência de posicionamento que estiver em execução no momento no anúncio Flex-View.

public static boolean closeFlexViewAd(@NonNull final String placementReferenceId) 

Lista de posicionamentos válidos

Um método auxiliar que retorne a coleção de strings contendo todos os IDs de referência de posicionamento da sessão em curso.

public static Collection<String> getValidPlacements() 

Regras do 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.**

Instruções para a implementação recomendada do RGPD

Para usar as APIs da Vungle para atualizar ou consultar o status de consentimento do usuário (como recomendado na Opção 1 do RGPD: Implementação recomendada da Vungle), use as funções a seguir:

  • // 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(); 
Tem mais dúvidas? Envie uma solicitação

Comentários