Vungle スタート ガイド - Android SDK v. 5

この記事を利用して Android または Amazon 用の Vungle SDK を統合します。AndroidSDK v.5.3.0 から、Vungle は Amazon OS 5.4 以上をプラットフォームとしてサポートしています。Amazon SDKの統合の手順は、Android のものと同じです。

コンテンツ

要件

  • Android 4.0 (Ice Cream Sandwich - API version 14) またはそれ以降
  • Java 1.7 - Android 5.+ との互換性を保つため、JDK 7 が必要です
  • Java 1.8 - Android 7.+ との互換性を保つため、JDK 8 が必要です

手順 1. Vungle SDK をプロジェクトに含める

Vungle SDK を入手する方法には、Maven 経由の AAR として入手する方法と手動ダウンロードによって入手する方法の 2 通りがあります。

オプション 1. Vungle SDK を Maven 経由の AAR として含める

プロジェクト レベルの build.gradle を開いて、Maven の URL を all project セクションに追加します。

allprojects {
    repositories {
        maven {
            url 'https://jitpack.io'
        }
    }
}

アプリケーション用のアプリケーション レベル build.gradle ファイルを開いて、コンパイルの依存関係を dependencies セクションに追加します。

dependencies {
    …
    compile 'com.github.vungle:vungle-android-sdk:5.3.0'
compile 'com.google.android.gms:play-services-basement:11.4.0'  //use version 11.0.1 and up only compile 'com.google.android.gms:play-services-location:11.4.0'  //use version 11.0.1 and up only
… }

Maven を使用して Vungle SDK を含める場合は、「手順 2. AndroidManifest.xml を更新する」をスキップしてかまいません。

オプション 2. Vungle SDK をダウンロードしてアプリケーションに含める

Vungle SDK をダウンロードして解凍し、libs フォルダーに移動して jar をすべてコピーし、プロジェクト ライブラリに追加します。

Screen_Shot_2017-10-05_at_2.51.15_PM.png

プロジェクト レベルの build.gradle を開いて、repositories セクションを更新します。

allprojects {
    repositories {
        jcenter()
    }
}

アプリケーション用のアプリケーション レベル build.gradle ファイルを開いて、その他の依存関係を dependencies セクションに追加します。

android{
...
    packagingOptions{
        exclude 'META-INF/rxjava.properties'
    }
...
}

dependencies {
    …
    compile files('libs/adapter-rxjava-2.2.0.jar')
    compile files('libs/converter-gson-2.2.0.jar')
    compile files('libs/dagger-2.7.jar')
    compile files('libs/eventbus-2.2.1.jar')
    compile files('libs/gson-2.7.jar')
    compile files('libs/javax.inject-1.jar')
    compile files('libs/okhttp-3.6.0.jar')
    compile files('libs/okio-1.11.0.jar')
    compile files('libs/publisher-sdk-android-5.3.0.jar')
    compile files('libs/retrofit-2.2.0.jar')
    compile files('libs/rxjava-1.2.0.jar')

    compile 'com.google.android.gms:play-services-basement:11.4.0'  //use version 11.0.1 and up only
    compile 'com.google.android.gms:play-services-location:11.4.0'  //use version 11.0.1 and up only
    … 
}

Vungle SDK を手動で含める場合は、「手順 2. AndroidManifest.xml を更新する」に進みます。

手順 2. AndroidManifest.xml を更新する

以下の行を AndroidManifest.xml に追加し、multidex 用のアプリケーション クラス名にアプリケーション項目名を割り当てます。

<!-- Required permissions for caching and ad operations to work -->
<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" />

<!-- Optional permissions to enable better geo-targeting of ads (recommended) -->
<uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" />
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />

<application
    android:name=".(YourApplicationName)"
    ...
<activity android:name="com.vungle.publisher.VideoFullScreenAdActivity"
android:configChanges="keyboardHidden|orientation|screenSize|screenLayout|smallestScreenSize"
android:theme="@android:style/Theme.NoTitleBar.Fullscreen"/>

<activity android:name="com.vungle.publisher.MraidFullScreenAdActivity"
android:configChanges="keyboardHidden|orientation|screenSize|screenLayout|smallestScreenSize"
android:theme="@android:style/Theme.Translucent.NoTitleBar.Fullscreen"/>

<activity android:name="com.vungle.publisher.FlexViewAdActivity"
android:configChanges="keyboardHidden|orientation|screenSize|screenLayout|smallestScreenSize"
android:theme="@android:style/Theme.Translucent.NoTitleBar.Fullscreen"/>
>

手順 3. Vungle SDKを初期化する

注意: デフォルトの広告配置はアプリケーションごとに自動的に作成されます。広告配置機能を利用するかどうかにかかわらず、広告配置の参照 ID をこの初期化手順で指定する必要があります。複数の広告配置を作成する場合は、すべての参照 ID を指定してください。

アプリケーションのスタート時

アプリケーション内で使用するアクティブな広告配置参照 ID を使用して、アプリケーションの最初のアクティビティで Vungle Publisher SDK を初期化します。SDK が非同期的に初期化され、init で指定されている VungleInitListener にコールバックを返します。

public class FirstActivity extends android.app.Activity {

  // get the VunglePub instance
  final VunglePub vunglePub = VunglePub.getInstance();

  // get your App ID from the app's main page on the Vungle Dashboard after setting up your app
  
  @Override
  public void onCreate(Bundle savedInstanceState) {
      super.onCreate(savedInstanceState);

      // initialize Publisher SDK with app id, placement reference id list and init callback handler
      vunglePub.init(this, app_id, new String[] { placementID1, placementID2, placementID3 }, new VungleInitListener() {

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

各 Activity

さらに、各 Activity (最初のものも含む) で onPause メソッドと onResume メソッドをオーバーライドして、アプリケーションがフォーカスを得たときや失ったときに Vungle Android SDK が正しく更新されるようにします。

public class EachActivity extends android.app.Activity {

  // get the VunglePub instance
  final VunglePub vunglePub = VunglePub.getInstance();
  ...
  @Override
  protected void onPause() {
      super.onPause();
      vunglePub.onPause();
  }

  @Override
  protected void onResume() {
      super.onResume();
      vunglePub.onResume();
  }
}

手順 4. リスナーを設定する

Vungle SDK は、プログラムで処理できるいくつかのイベントを発生させます。これらのイベントを処理するには、VungleAdEventListener のクラスを実装し、clearAndSetEventListeners を使用して登録します。メモリ リークを防ぐために、使用しなくなった eventListener は忘れずに削除してください。

vunglePub.clearAndSetEventListeners(vungleDefaultListener, vungleSecondListener);

手順 5. 広告を読み込んで再生する

Vungle SDK が正常に初期化されたら、広告配置を読み込み、広告の準備ができたときにそれを再生することができます。VungleAdEventListener を設定した場合は、広告が再生できるようになったときに onAdAvailabilityUpdate(String placementReferenceId, boolean isAdAvailable) コールバック経由で通知が表示されます。

public class GameActivity extends android.app.Activity {

    // get the VunglePub instance
 final VunglePub vunglePub = VunglePub.getInstance();
final String placementIdForLevel = "your placement reference id";

private void onLevelStart() {
vunglePub.loadAd(placementIdForLevel); } private void onLevelComplete() { if (vunglePub.isAdPlayable(placementIdForLevel)) { vunglePub.playAd(placementIdForLevel, globalAdConfig); } } }

自動キャッシュされる広告配置の場合は、SDK によって初期化後に広告が自動的に読み込まれるため、loadAd を呼び出す必要がありません。閲覧回数の最も多い広告配置を自動キャッシュの対象として選択することをお勧めします。

広告を閉じるオプションをユーザーに表示するかどうかを定義するには、Vungle ダッシュボードにある強制表示オプションを使用します。

詳細設定

Google Play Services (オプション)

プロジェクトに Google Play Services を入れると、さらにカスタマイズされた広告体験を Vungle からエンド ユーザーに提供できるようになります。ただし、必須ではありません。バージョン 8.4.0 以上の使用を推奨します。

Google Play Services を入れる場合は、Google のセットアップ ガイドに従うことを推奨します。アプリケーションで、デバイスに最新バージョンの Google Play Services が入っていることを確認してください。Vungle SDK では、Google Play Services からの位置情報と広告がオプションで利用されます。

  • google.android.gms:play-services-location:11.0.1
  • google.android.gms:play-services-ads:11.0.1
  • play-services 7.8.0 以下の場合: サポート ライブラリを維持する
  • play-services 8.4.0 以上の場合: サポート ライブラリは不要

Google Play Services (バージョン 7.8.0,、8.4.0,、9.8.0,、10.2.4,、11.0.1.) を使用したコンパイルをサポートする、スタンドアロン SDK のコンパイルに成功しています。

65K Dalvik メソッド制限

Vungle Android SDK 5.1.0 をプロジェクトに追加すると、6,557 個のメソッドが追加され、それ以外の必要な依存関係は除外されます。プロジェクト パイプラインのメソッド数を減らす計画がありますが、現時点ではこの制限が適用されます。プロジェクトに追加されるメソッドの合計数を削減するよう、以下の推奨事項を検討してください。

  • 選択的な Gradle コンパイル: Google Play Services (GPS) SDK のメソッド数は約 20,000 個です。プロジェクトで GPS を使用している場合は、プロジェクトに必要な GPS SDK を選択的にコンパイルするオプションがあります。
    • com.google.android.gms:play-services-location:11.0.1
    • com.google.android.gms:play-services-ads:11.0.1

  • ProGuard: ProGuard を有効にして、プロジェクト コードを縮小できます。メソッドの合計数をできる限り少なくするため、未使用のクラスはすべてコンパイル時に破棄されます。この機能を有効にするには、適切なビルド タイプの build.gradleminifyEnabled true を指定し、プロジェクトに必要なクラスを維持するためのルールを指定します。

  • Multidex: それでもメソッド数が 6 万 5,000 個より多い場合は、multiDex を有効にすることが Google から提供される唯一のソリューションとなる可能性があります。プロジェクトを multiDex 用に構成する作業は 1 回しか必要とならず、構成はビルド時とアプリケーション起動時に適用されます。

Proguard

Proguard を使用する場合は、ProGuard の構成ファイルに以下のルールを追加します。

# Vungle
-dontwarn com.vungle.**
-dontnote com.vungle.**
-keep class com.vungle.** { *; }
-keep class javax.inject.*

# GreenRobot
-dontwarn de.greenrobot.event.util.**

# RxJava
-dontwarn rx.internal.util.unsafe.**
-keepclassmembers class rx.internal.util.unsafe.*ArrayQueue*Field* {
   long producerIndex;
   long consumerIndex;
}
-keepclassmembers class rx.internal.util.unsafe.BaseLinkedQueueProducerNodeRef {
   rx.internal.util.atomic.LinkedQueueNode producerNode;
}
-keepclassmembers class rx.internal.util.unsafe.BaseLinkedQueueConsumerNodeRef {
   rx.internal.util.atomic.LinkedQueueNode consumerNode;
}
-keep class rx.schedulers.Schedulers { public static <methods>; }
-keep class rx.schedulers.ImmediateScheduler { public <methods>; }
-keep class rx.schedulers.TestScheduler { public <methods>; }
-keep class rx.schedulers.Schedulers { public static ** test(); }
# MOAT -dontwarn com.moat.** -keep class com.moat.** { public protected private *; }
# Retrofit -dontwarn okio.** -dontwarn retrofit2.Platform$Java8

EventListener インターフェイス

VungleAdEventListener の操作に使用できるメソッドの一覧を以下に示します。

メソッド

説明

clearAndSetEventListeners(VungleEventListener..)

登録されている EventListener をクリアした後、指定された eventListener を追加します。

clearEventListeners( )

すべての EventListeners をクリアします

removeEventListeners(VungleEventListener..)

指定された EventListener を削除します。

addEventListeners(VungleEventListener..)

入力 eventListeners を追加します

VungleAdEventListener デリゲート呼び出し API:

public class FirstActivity extends android.app.Activity {
  
  private final VungleAdEventListener vungleListener = new VungleAdEventListener(){

    @Override
    public void onAdEnd(String placementReferenceId, boolean wasSuccessfulView, boolean wasCallToActionClicked) {
      // Called when user exits the ad and control is returned to your application        
      // if wasSuccessfulView is true, the user watched the ad and should be rewarded       
      // (if this was a rewarded ad).
      // if wasCallToActionClicked is true, the user clicked the call to action
      // button in the ad.    
    }

    @Override
    public void onAdStart(String placementReferenceId) {
      // Called before playing an ad
    }

    @Override
    public void onUnableToPlayAd(String placementReferenceId, String reason) {
      // Called after playAd(placementId, adConfig) is unable to play the ad       
    }

    @Override
    public void onAdAvailabilityUpdate(String placementReferenceId, boolean isAdAvailable) {
      // Notifies ad availability for the indicated placement
      // There can be duplicate notifications
    }
  };

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

Vungle では、SDK 初期化イベント更新用の VunlgeInitListner も提供しています。

UI スレッドに関する注意

コールバックはバックグラウンド スレッドで実行されるため、イベント コールバックから生じる UI 上の操作や更新は、実行前にメイン UI スレッドに渡す必要があります。UI スレッドでコードを実行する方法は、次の 2 つが一般的です。

構成オプション

グローバルな広告構成

init を呼び出した後で、グローバルの AdConfig オブジェクトの設定も行う必要があります。デフォルトで、この AdConfig オブジェクトは各 playAd 呼び出しで使用できます。このオブジェクトを使用すると、再生するすべての広告に自動的に適用されるオプションも設定できます。

public class FirstActivity extends android.app.Activity {

  @Override
  public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    
    vunglePub.init(this, app_id, placement_list, new VungleInitListener() {
      @Override
      public void onSuccess() {
        // get a reference to the global AdConfig object 
        final AdConfig globalAdConfig = vunglePub.getGlobalAdConfig(); 
        // For a full description of available options, see the 'Config Object'section. 
        globalAdConfig.setSoundEnabled(true);
      }
      @Override
      public void onFailure(Throwable e) { }
    });
  } 
}

単一の広告構成

playAd を呼び出すときには必ず AdConfig オブジェクトを使用しなければなりません。ただし、playAd に新しい AdConfig オブジェクトを渡すと、再生する個々の広告を任意でカスタマイズできます。グローバルな広告構成でオプションを設定している場合、それらのグローバル オプションは AdConfig で指定したオプションでオーバーライドされます。オーバーライド用の AdConfig を渡す方法を以下に示します。

public class GameActivity extends android.app.Activity {
  …
  private void onLevelComplete() {
    // create a new AdConfig object
    final AdConfig overrideConfig = new AdConfig();

    overrideConfig.setSoundEnabled(false);
 
    // the overrideConfig object will only affect this ad play.
    vunglePub.playAd(yourPlacementId, overrideConfig);
  }
}

AdConfig オブジェクト

オーバーライド AdConfig には、個々の広告再生に設定できる一連のオプションが含まれています。

注意: 報酬対象 の広告は、 インセンティブ 広告として参照されることがあります。どちらの場合も、同等な広告のことを示しています。SDKのコードと Reporting API では、「インセンティブ」を使用します。

設定できるオプションの一覧を以下に示します。

メソッド

デフォルト

説明

setOrientation

Orientation.matchVideo

Orientation.autoRotate は、広告がデバイスの向きに合わせて自動的に回転することを示します。

Orientation.matchVideo は、広告が動画にとって最善の向き (通常は横向き) で再生されることを示します。

setSoundEnabled

true

広告開始時のサウンドの状態を設定します。true の場合、音声はデバイスの音量とサウンド設定に従います。false の場合、動画はミュートされた状態で始まりますが、ユーザーはサウンドの状態を変更できます。

setBackButtonImmediatelyEnabled

false

true の場合、ユーザーは [戻る] ボタンを使用して広告をすぐに終了することができます。false の場合、画面に [閉じる] ボタンが表示されるまで、ユーザーは [戻る] ボタンを使用して広告を終了することができません。

setImmersiveMode

false

KitKat 以降のデバイスでイマーシブ モードを有効または無効にします。

setIncentivizedUserId

none

アプリケーションに渡す一意のユーザー ID を設定して、このユーザーがインセンティブ広告の視聴による報酬の対象となることを確認します。インセンティブ広告でない場合は適用されません。

 

setIncentivizedCancelDialogTitle

"Close video?"

インセンティブ広告をスキップするときに表示される確認メッセージのタイトルを設定します。インセンティブ広告でない場合は適用されません。

setIncentivizedCancelDialogBodyText

"Closing this video early will prevent you from earning your reward. Are you sure?"

インセンティブ広告をスキップするときに表示される確認メッセージの本文を設定します。インセンティブ広告でない場合は適用されません。

setIncentivizedCancelDialogCloseButtonText

"Close video"

インセンティブ広告をスキップするときに表示される確認メッセージの "キャンセル" ボタンのテキストを設定します。インセンティブ広告でない場合は適用されません。

setIncentivizedCancelDialogKeepWatchingButtonText

"Keep watching"

インセンティブ広告をスキップするときに表示される確認メッセージの "視聴を続行" ボタンのテキストを設定します。インセンティブ広告でない場合は適用されません。

setTransitionAnimationEnabled

false

フラグメント遷移時の標準のアニメーションを有効または無効にします。

 

他にご質問がございましたら、リクエストを送信してください

コメント