iOS ガイドライン | 動画リワード広告

動画リワード広告は、15秒程度のスキップ不可能な動画広告です。ユーザーの同意の元、バーチャル グッズやゲーム内ギフトなどの利益(リワード)と引き換えに視聴します。ブランドマーケティング担当者に好まれるこれらの動画リワード広告は、アプリ内ショップ、ゲームの開始と終了時等での表示に適しており、リワードによって、ユーザーが継続的にアプリを使用し続けることを促します。リワードはビ動画広告視聴完了時にのみ付与されるので、広告主にとっては良質のユーザーを、そしてパブリッシャーには高いeCPMを提供することができます。

以下の手順に従い、動画リワード広告での収益化を開始してください。

動画リワード広告の設定

アプリを追加してから、 動画リワードを選択して広告タイプ 動画リワード向けのプレースメントを作成します。

動画リワードとしてプレースメントタイプを選択すると、以下が表示されます。

リワードの詳細情報となるキーと値のペアを入力できます。動画の再生が終了した時点で、SDKは、デリゲートメソッドの interstitial:rewardActionCompletedWithRewards:を通じて、JSON dictionaryとしてこのキーと値のペア情報を戻します。また、ここでリワードのペア情報を入力せず、お客様のアプリのコード上でリワードを完全にコントロールすることも可能です。

動画リワード広告の作成

動画リワード広告はIMInterstitial クラスを使用します。 IMInterstitialは、UIViewController のサブクラスで、ユーザーのタッチに応答する全画面広告を表示します。

以下の手順に従って、プログラムで動画リワード広告ユニットを作成します。

  1. ヘッダーをインポートして、ViewController.hファイルでインタースティシャルインスタンスを宣言します。ViewControllerヘッダーファイルは次のようになります。
    #import  <UIKit/UIKit.h>
    @import InMobiSDK;
    @interface ViewController : UIViewController <IMInterstitialDelegate>
    @property (nonatomic, strong) IMInterstitial *interstitial;
    @end
    		
  2. インタースティシャルブジェクトのインスタンスを作成します。ViewController.mファイル内の viewDidLoad メソッドは次のようになります。
    -(void)viewDidLoad {
     [super viewDidLoad];
    self. interstitial = [[IMInterstitial alloc] initWithPlacementId:@"Insert your placement ID here"];
    self. interstitial.delegate = self;
    [self.interstitial load];
    }
    		

    重要事項:プレースメントIDごとに1つのオブジェクトだけを作成して、その後の広告の読み込みにはそれを再使用してください。

  3. 広告ステータスのコールバックについては、IMInterstitialのデリゲートプロパティを実装します。以下のコールバックがサポートされます。
    /*Indicates that the interstitial is ready to be shown */
    - (void)interstitialDidFinishLoading:(IMInterstitial *)interstitial {
        NSLog(@"interstitialDidFinishLoading");
    }
    /* Indicates that the interstitial has failed to receive an ad. */
    - (void)interstitial:(IMInterstitial *)interstitial didFailToLoadWithError:(IMRequestStatus *)error {
        NSLog(@"Interstitial failed to load ad");
        NSLog(@"Error : %@",error.description);
    }
    /* Indicates that the interstitial has failed to present itself. */
    - (void)interstitial:(IMInterstitial *)interstitial didFailToPresentWithError:(IMRequestStatus *)error {
        NSLog(@"Interstitial didFailToPresentWithError");
        NSLog(@"Error : %@",error.description);
    }
    /* indicates that the interstitial is going to present itself. */
    - (void)interstitialWillPresent:(IMInterstitial *)interstitial {
        NSLog(@"interstitialWillPresent");
    }
    /* Indicates that the interstitial has presented itself */
    - (void)interstitialDidPresent:(IMInterstitial *)interstitial {
        NSLog(@"interstitialDidPresent");
    }
    /* Indicates that the interstitial is going to dismiss itself. */
    - (void)interstitialWillDismiss:(IMInterstitial *)interstitial {
        NSLog(@"interstitialWillDismiss");
    }
    /* Indicates that the interstitial has dismissed itself. */
    - (void)interstitialDidDismiss:(IMInterstitial *)interstitial {
        NSLog(@"interstitialDidDismiss");
    }
    /* Indicates that the user will leave the app. */
    - (void)userWillLeaveApplicationFromInterstitial:(IMInterstitial *)interstitial {
        NSLog(@"userWillLeaveApplicationFromInterstitial");
    }
    /* Indicates that a reward action is completed */
    - (void)interstitial:(IMInterstitial *)interstitial rewardActionCompletedWithRewards:(NSDictionary *)rewards {
        NSLog(@"rewardActionCompletedWithRewards");
    }
    /* interstitial:didInteractWithParams: Indicates that the interstitial was interacted with. */
    - (void)interstitial:(IMInterstitial *)interstitial didInteractWithParams:(NSDictionary *)params {
        NSLog(@"InterstitialDidInteractWithParams");
    }
    / * Not used for direct integration. Notifies the delegate that the ad server has returned an ad but assets are not yet available. */
    - (void)interstitialDidReceiveAd:(IMInterstitial *)interstitial {
      NSLog(@"interstitialDidReceiveAd");
    }
    		
  4. インタースティシャル広告を表示するには、次のコードを使用します。
    [self.interstitial showFromViewController:self];
    //[self.interstitial showFromViewController:self withAnimation:kIMInterstitialAnimationTypeCoverVertical];
    		

    以下が利用可能なアニメーションのタイプです。

    • kIMInterstitialAnimationTypeCoverVertical
    • kIMInterstitialAnimationTypeFlipHorizontal
    • kIMInterstitialAnimationTypeNone

重要事項:

  • showFromViewControllerに対して呼び出す前にinterstitialDidFinishLoadingデリゲートが発生していることを確認してください。状態が異なる場合、エラーコールバックinterstitial:didFailToPresentScreenWithError:が発生します。インタースティシャルのステータスを確認し続けながら、広告が完全に読み込まれた場合のみ表示を呼び出します。
  • インタースティシャル広告が表示され、その後に閉じられるたびに、再度[self.interstitial load]; を呼び出す必要があります。 これを実行しないと、showFromViewControllerを再度呼び出せなくなります。
  • 動画の完了を検出するには、IMInterstitialDelegateinterstitial:rewardActionCompletedWithRewards: メソッドを実装します。InMobi ポータルでリワードを指定済みの場合はこちらでJSON dictionaryにアクセスできます。

取得CreativeID

時には、広告品質のチェックをすべて逃れた不正な広告主様が、無関係で不快なものや混乱するものをユーザーに表示することで、アプリのユーザーエクスペリエンスを損なうことになります。 このような状況への対応策として、広告インスタンスのcreativeIDを取得し、InMobiの連絡先に暗号化されたクcreativeIDでレポートし直します。

mInterstitialAd.creativeId // mInterstitialAdはサンプルインスタンスです。

インテグレーションのテスト

  1. InMobiポータルでテストモードを設定します。

    [ツール] - [診断]に進み、テストモードを グローバルオンセレクティブオンのどちらかに切り替えます。

    アプリに対する広告インテグレーションが初めての場合 テストモードグローバルオンに設定します。
    特定のテスト用端末にのみテスト用広告を配信したい場合 -

    アプリに対して既にSDKを実装済みで、特定の更新部分などのテストをテスト用の端末に限定して実施する必要がある場合。
    テストモードセレクティブオンに設定します。

    デバイスセクションでテスト端末を登録します。

    1. デバイスIDボックスに、デバイスIDを入力します。
    2. デバイス名ボックスで、任意の名前を設定します。
    3. [デバイスを追加]をクリックしてテスト端末を追加登録します。

    すでに登録済みのデバイスがある場合は、その端末を選択し、テストモードを有効に設定できます。

    注意: テスト完了後、本番稼働する前にテストモードをオフにしなければなりません。そうしないと、お客様のアプリは収益化できません。

    これで、テスト広告を取得するための準備が整いました。

    デバイスIDの取得

    ここでのデバイスIDは、基本的にIDFAまたはIFA (広告の識別子)を指します。デバイスIDを取得するための、最も簡単なアプローチは、SDKのログレベルを“debug”に設定することです。デバッグログを有効にするには、以下を AppDelegate.mファイル内の didFinishLaunchingWithOptionsメソッドに追加することです。

    - (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
    {    
    	//Initialize InMobi SDK with your account ID
    [IMSdk initWithAccountID:@"Insert InMobi account ID here"];
    //Set log level to Debug
    [IMSdk setLogLevel:kIMSDKLogLevelDebug]; 
    	// Do your stuff.
    	return YES;
    }
    		

    デバッグモードでは、デバイスIDは以下の様にXCode開発者コンソールに出力されます。 “Publisher device ID is <device-id>”

    お客様はこのデバイスIDを デバイスIDボックスに入力できます。

  2. [診断]タブ上でテストモード時の広告ユニット別のレポート値を確認できます。実装が正しく行われたか確認するのに役立ちます。

  3. また、インタースティシャル広告のロードに成功すると、コンソール内に以下のInMobi SDKのログも出力されるはずです。

    [InMobi] InMobi SDK initialized with account id: <your account id here>

    [InMobi] Fetching interstitial ad for placement id: <your placement id here>

    [InMobi] Publisher device id is <device id here>

    [InMobi] Interstitial ad successfully fetched for placement id: <your placement id here>

  4. これで、InMobiテスト広告もアプリケーション上で表示できます。
  5. 広告の作成前にSDKが正しく初期化されない場合は、通常以下のログが表示されます。

    ** ERROR ** [InMobi] ___ Please initialize the SDK before creating a <ad format> ad

    ** ERROR ** [InMobi] ___ Account id cannot be null or empty. Please provide a valid Account id.

    [InMobi] Invalid account id passed to init. Please provide a valid account id.

キーとなるログの一覧を以下に記します。

SDK初期化

シナリオ ログ レベル ログ
NULLまたは空白のアカウントIDを渡した場合。 Error Account id cannot be null or empty. Please provide a valid Account id.
有効なアカウントIDを渡した場合。 Debug InMobi SDK initialized with account id: <account id>
無効なアカウントIDを渡した場合。 Error Invalid account id passed to init. Please provide a valid account id.
より新しいバージョンのSDKが入手可能な場合。 Debug A newer version (ver. 6.0.0) of the InMobi SDK is available! You are currently on an older version (ver. 5.3.1). Download the latest InMobi SDK from http://www.inmobi.com/products/sdk/#downloads

広告のライフサイクルで出力される主なログ

シナリオ ログ レベル ログ
ネットワークが使用できない状況で広告がリクエストされた場合。 Error Network not reachable currently. Please try again.
広告が読み込み中または利用可能な状態のときに広告がリクエストされた場合。 Error An ad load is already in progress. Please wait for the load to complete before requesting for another ad (Placement id : <placement id> ).
ユーザーが広告を閲覧中に広告がリクエストされた場合。 Error An ad is currently being viewed by the user. Please wait for the user to close the ad before requesting for another ad (Placement id : <placement id> ).
デバイスID Debug Publisher device id is <Device Id>

動画リワード広告インテグレーション時のログ

シナリオ ログ レベル ログ
SDKが初期化されていない場合。 Error Please initialize the SDK before creating a interstitial ad
無効なプレースメントIDでインタースティシャルを作成した場合。 Error Please provide a valid placement id to create a interstitial ad
インタースティシャル広告の読み込みが開始された場合。 Debug Fetching an interstitial ad for placement id: <placement id>
広告が正常に取得された場合。 Debug Interstitial ad successfully fetched for placement id: <placement id>
広告の取得に失敗した場合。 Error Failed to fetch Interstitial ad for placement id: <Placement id> with error:<Status code / message>
Webビューでインタースティシャル広告の読み込みが開始された場合。 Debug Started loading Interstitial ad markup in the webview for placement id: <Placement id>
インタースティシャル広告が正常にWebビューに読み込まれた場合。 Debug Successfully loaded Interstitial ad markup in the webview for placement id: <placement id>
Webビューにインタースティシャル広告を読み込めなかった場合。 Error Failed to load the Interstitial markup in the webview for placement id: <placement id>
インタースティシャル広告が表示された場合。 Debug Successfully displayed Interstitial for placement id: <placement id>
インタースティシャル広告が閉じられた場合。 Debug Interstitial ad dismissed for placement id: <placement id>
広告のステータスが表示Readyの前に広告を表示しようとした場合。 Error Ad Load is not complete. Please wait for the Ad to be in a ready state before calling show
全画面広告は、ビューコントローラーなしに表示できません。ビューコントローラーを渡して全画面広告を表示してください。 Error Full screen ad cannot be displayed without a view controller. Please pass a view controller to present the full screen ad.