Skip to content

COMPASS SDK for Android Apps

kamata edited this page Mar 8, 2017 · 1 revision

COMPASS SDK for Android

開発環境

  • 対象 OS
    API レベル 16 以上

  • 最新の Android Studio を使用

  • 利用する Google Play Services ライブラリ

    • Base Client Library
    • Google Location and Activity Recognition (位置情報を利用する場合)
    • Google Mobile Ads (AdMob Mediation を利用する場合)

実装手順

COMPASS SDK を導入する

ダウンロードしたファイルを解凍し, COMPASS SDK と COMPASS SDK が利用しているライブラリを導入する.

位置情報を利用する場合, Google Location and Activity Recognition のライブラリを導入するため, build.gradle (Module:app) に以下を追加する. ライブラリは最新版を利用すること.

	dependencies {
	 	compile project(':compasssdk')
	 	compile 'com.google.android.gms:play-services-base:10.2.0'
	 	// 位置情報を利用する場合
	 	compile 'com.google.android.gms:play-services-location:10.2.0'
	} 

AdMob Mediation を利用する場合, Google Mobile Ads のライブラリを導入するため, build.gradle (Module:app) に以下を追加する. ライブラリは最新版を利用すること.

	dependencies {
	 	compile project(':compasssdk')
	 	compile 'com.google.android.gms:play-services-base:10.2.0'
	 	// AdMob Mediation を利用する場合
	 	compile 'com.google.android.gms:play-services-ads:10.2.0'
	} 

import COMPASSSDK

SDK を使用するための設定

  1. strings.xml に使用する広告枠コードを追加する

    インライン広告枠を使用する場合に以下を設定

    	<string name="inline_spot_id">発行されたインライン広告枠コード</string>

    インターステシャル広告を使用する場合に以下を設定

    	<string name="interstitial_spot_id">発行されたインターステシャル広告枠コード</string>
  2. AndroidManifest.xml にユーザパーミッションを追加する

        <uses-permission android:name="android.permission.INTERNET" />
        <uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />
        <uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" />
  3. AndroidManifest.xml にメタデータを追加する

    インライン広告枠を使用する場合に以下を設定

        <meta-data android:value="@string/inline_spot_id"
        	android:name="CompassSDKInlineSpotID" />

    インターステシャル広告枠を使用する場合に以下を設定

        <meta-data android:value="@string/interstitial_spot_id"
        	android:name="CompassSDKInterstitialSpotID" />
  4. 「ビルド」→「Clean Project」を選択し, クリーンビルドを行う

Configure COMPASS SDK

インライン広告設定手順

(Android 4.2.2 以前を対象としたはアプリ一つの View に対して 10 以下の広告数にすること)

  1. インライン広告を表示させる場所の XML レイアウトに FrameLayout を挿入して ID などを設定する

    	<FrameLayout
    	    android:id="@+id/compassInlineFrame"
    	    android:layout_width="wrap_content"
    	    android:layout_height="wrap_content"
    	    android:layout_centerHorizontal="true"
    	    android:layout_marginTop="10dp" />
  2. インライン広告を表示させる場所の Java ファイルに以下のクラスをインポートする

    	import jp.microad.compass.smartphone.sdk.android.CompassError;
    	import jp.microad.compass.smartphone.sdk.android.CompassInlineFragment;
    	import jp.microad.compass.smartphone.sdk.android.CompassInlineViewCallback;
  3. 上記にインポートされたクラスのインターフェイスを実装する

    	public class 〇〇 extends 〇〇 implements CompassInlineViewCallback {
    	    .   
    	    .
    	    .
    	} 
  4. メンバ変数に以下の宣言を追加する

    	CompassInlineFragment compassInlineFragment;
  5. インライン広告の読み込みを行い広告を表示する

    COMPASS SDK に位置情報を渡さないで広告を表示する場合は, 以下の処理を追加する

    	compassInlineFragment = CompassInlineFragment.load(activity, R.id.compassInlineFrame); 

    COMPASS SDK に位置情報を渡して広告を表示する場合は, 以下の処理を追加する

    	compassInlineFragment = CompassInlineFragment.load(activity, R.id.compassInlineFrame, location); 
  6. onActivityResult メソッドに以下のの処理を追加する

    	if (compassInlineFragment != null) {
    	    compassInlineFragment.onActivityResult(requestCode, resultCode, data);
    	}
  7. CompassInlineViewCallback のメソッドを実装する

    	@Override
    	public void onLoadSuccess(int i) {
    	    // 広告をロードが成功した場合の処理
    	    // 不要であればこのメソッドを空にしてください
    	}
    	
    	@Override
    	public void onShow(int i) {
    	    // 広告をロードが成功した場合の処理
    	    // 不要であればこのメソッドを空にしてください
    	}
    	
    	@Override
    	public void onLoadFailure(int i, CompassError.Code code, Throwable throwable) {
    	    // 広告をロードが成功した場合の処理
    	    // 不要であればこのメソッドを空にしてください
    	}

use COMPASS inline

インライン広告のメソッド一覧
メソッド名 引数 引数概要 戻り値 概要
load activity:FragmentActivity
layoutId:int
広告表示するアクティビティ,
レイアウト ID
CompassInlineFragment インライン広告を読み込むメソッド
load activity:FragmentActivity
layoutId:int
location:Location
広告表示するアクティビティ,
レイアウト ID
位置情報
CompassInlineFragment インライン広告を位置情報を設定して読み込むメソッド
redraw activity:FragmentActivity
layoutId:int
広告表示するアクティビティ,
レイアウト ID
void 広告の再描画を行うメソッド
getRotationSecond - - int rotation の時間を取得する
setSpotId layoutId:int
spotId:String
新しい spotID を設定するレイアウト ID,
新しく設定するインライン広告用の spotID
void 新しい spotID を設定する
clearSpotId - - void XML ファイルで設定している spotID に戻す

WebView 単体版 (ListView 対応)

  • Activity の干渉を受けるため, 画面の再描画が起きると広告が消えます.
  • 親要素の View 構成に影響を受けます.(表示領域など)
  • 広告の再描画を行う場合は redraw メソッドを使用します. この際は IMP も再計測されます.
  • ListView アプリでご利用の際は Webview 単体版にて実装をお願いします.
  • ListView 内に同一広告 ID で複数表示することも可能です.

実装方法は下記通りになります

  1. 対象の XML レイアウトに WebView を挿入して ID などを設定する

    	<WebView
    	    android:id="@+id/webview"
    	    android:layout_width="wrap_content"
    	    android:layout_height="wrap_content" />
  2. 対象の Java ファイルに以下のクラスをインポートする

    	import jp.microad.compass.smartphone.sdk.android.CompassWebViewCreator;
  3. メンバ変数に以下の宣言を追加する

    	CompassWebViewCreator compassWebViewCreator = new CompassWebViewCreator();
  4. 表示させたいタイミングで以下の処理を呼び出す

    COMPASS SDKに 位置情報を渡さないで広告を表示する場合は, 以下の処理を追加する

    	compassWebViewCreator.displayAds(webview, webviewPosition, context, spotId);

    COMPASS SDK に位置情報を渡して広告を表示する場合は, 以下の処理を追加する

    	compassWebViewCreator.displayAds(webview, webviewPosition, context, spotId, location); 

use COMPASS Webview-standlone

CompassWebViewCreator のメソッド一覧
メソッド名 引数 引数概要 戻り値 概要
displayAds webView:WebView
webViewNo:int
context:Context
spotID:String
広告を表示する WebView,
WebView の連番,
コンテキスト,
SpotID
void 広告を表示するメソッド
displayAds webView:WebView
webViewNo:int
context:Context
spotID:String
location:Location
広告を表示する WebView,
WebView の連番,
コンテキスト,
SpotID,
位置情報
void 位置情報を設定して広告を表示するメソッド

インターステシャル広告設定手順

インターステシャル広告を使用する場合に設定する

  1. インターステシャル広告を表示させる場所の Java ファイルに以下のクラスをインポートする

    	import jp.microad.compass.smartphone.sdk.android.CompassError;
    	import jp.microad.compass.smartphone.sdk.android.CompassInterstitialFragment;
    	import jp.microad.compass.smartphone.sdk.android.CompassInterstitialViewCallback;
  2. 上記にインポートされたクラスのインターフェイスを実装する

    	public class 〇〇 extends 〇〇 implements CompassInterstitialViewCallback {
    	    .
    	    .
    	    .
    	}
  3. メンバ変数に以下の宣言を追加する

    	CompassInterstitialFragment compassInterstitialFragment;
  4. インターステシャル広告を表示させたいタイミングに, 以下の処理を追加する

    COMPASS SDK に位置情報を渡さないで広告を表示する場合は, 以下の処理を追加する

    	compassInterstitialFragment = CompassInterstitialFragment.showAd(activity);

    COMPASS SDK に位置情報を渡して広告を表示する場合は, 以下の処理を追加する

    	compassInterstitialFragment = CompassInterstitialFragment.showAd(activity, location);
  5. onActivityResult メソッドに以下の処理を挿入する

     	if (compassInterstitialFragment != null) { 
     	    compassInterstitialFragment.onActivityResult(requestCode, resultCode, data);
    	}
  6. CompassInterstitialViewCallback のメソッドを実装する

    	@Override
    	public void onLoadSuccess(int i) {
    	    // 広告をロードが成功した場合の処理
    	    // 不要であればこのメソッドを空にしてください
    	}
    		
    	@Override
    	public void onShow(int i) {
    	    // 広告をロードが成功した場合の処理
    	    // 不要であればこのメソッドを空にしてください
    	}
    		
    	@Override
    	public void onLoadFailure(int i, CompassError.Code code, Throwable throwable) {
    	    // 広告をロードが成功した場合の処理
    	    // 不要であればこのメソッドを空にしてください
    	}
    	
    	@Override
    	public void onDismiss(final int id) {
    		// インターステシャル広告を閉じた場合の処理
    		// 不要であればこのメソッドを空にしてください
    	}

use COMPASS interstitial

インターステシャル広告のクラス詳細
メソッド名 引数 引数概要 戻り値 概要
showAd activity:FragmentActivity
layoutId:int
広告表示するアクティビティ,
レイアウト ID
CompassInterstitialFragment インターステシャル広告の表示を行うメソッド
showAd activity:FragmentActivity
layoutId:int
location:Location
広告表示するアクティビティ,
レイアウト ID,
位置情報
CompassInterstitialFragment インターステシャル広告の表示を位置情報を設定して行うメソッド
dismiss - - void ポップアップウィンドウを閉じる
getRotationSecond - - int rotation の時間を取得する
setSpotId spotId:String 新しく設定するインターステシャル広告用の spotID void 新しい spotId を設定する
clearSpotId - - void XML ファイルで設定している spotID に戻す

エラーメッセージ

COMPASS SDK では, 以下のエラーメッセージを出力します

タグ名 メッセージ 詳細
MainActivity INVALID_AD_TYPE 広告枠コードのタイプ不一致
MainActivity ERROR_SYSTEM システムエラー
MainActivity RESPONSE_IS_NULL レスポンスが null
MainActivity FAILURE_RTB レスポンスの取得失敗

広告が表示されない場合

  • 広告読み込み時にアプリケーションが落ちた場合
    AndroidManifest.xml のメタデータに広告枠コードが設定されているか, 確認をしてください.

  • 広告を読み込んでも広告が表示されずエラーメッセージが出力しない場合
    広告枠コードの値が正しくない可能性があります. 広告枠コードが正しいか確認してください.

  • 「Tag:MainActivity,Text:INVALID_AD_TYPE」が発生した場合
    広告枠コードの種別と View の種別が一致していません, 広告枠コードが間違っていないか確認してください.

  • 「Tag:MainActivity,Text:ERROR_SYSTEM」や「Tag:MainActivity,Text:RESPONSE_IS_NULL」「Tag:MainActivity,Text:FAILURE_RTB」が発生した場合
    API からのレスポンスに問題があります. 営業担当者に問い合わせをしてください.

AdMob Mediation を使う場合

事前

  • COMPASS SDK と COMPASS SDK が利用しているライブラリを導入
  • AndroidManifest.xml にユーザパーミッションを追加
  • クリーンビルドを行う
  • AdMob 管理画面でアプリを登録
  • AdMob 導入と設定を行う (参考: Firebase-Admob 手順 )
  • 必要であれば, ProGuard Settings を設定 (参考: Configure ProGuard Settings)
AdMob 管理画面場でカスタムイベントを作成

Add Custom Event

項目
Class Name インライン広告を表示したい場合
jp.microad.compass.smartphone.sdk.android.AdMob.CompassAdMobInlineAdapter
インターステシャル広告を表示したい場合
jp.microad.compass.smartphone.sdk.android.AdMob.CompassAdMobInterstitialAdapter
Label AdMob のリポートに使うラベル (変更不可能)
Parameter COMPASS で発行された広告 ID
バナーのカスタムイベントを実装する場合
  1. バナー広告を表示させる場所の XML レイアウトに AdView を挿入する

        <com.google.android.gms.ads.AdView
            android:id="@+id/adView"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_centerHorizontal="true"
            android:layout_alignParentBottom="true"
            ads:adSize="BANNER"
            ads:adUnitId="@string/banner_ad_unit_id">
        </com.google.android.gms.ads.AdView>
  2. strings.xml に使用する広告枠コードを追加する

    <string name="banner_ad_unit_id">AdMob で発行された広告 ID</string>
    
  3. バナー広告を表示させる場所の Java ファイルに以下のクラスをインポートする

    	import com.google.android.gms.ads.AdRequest;
    	import com.google.android.gms.ads.AdView;
  4. バナー広告の読み込みを行い広告を表示する

        AdView mAdView = (AdView)findViewById(R.id.adView);
        AdRequest request = new AdRequest.Builder().build();
        mAdView.loadAd(request);

Use COMPASS Inline through AdMob Mediation

AdView の詳しいことは Firebase AdView

インタースティシャルのカスタムイベントを実装する場合
  1. インタースティシャル広告を表示させる場所の Java ファイルに以下のクラスをインポートする

    	import com.google.android.gms.ads.AdListener;
    	import com.google.android.gms.ads.AdRequest;
    	import com.google.android.gms.ads.InterstitialAd;
  2. strings.xml に使用する広告枠コードを追加する

    <string name="interstitial_ad_unit_id">AdMob で発行された広告 ID</string>
    
  3. メンバ変数に以下の宣言を追加する

        private InterstitialAd interstitial;
  4. インタースティシャル広告の読み込みを行う

        @Override
        protected void onCreate(Bundle savedInstanceState) {
            .
            .
            .
    	    interstitial = new InterstitialAd(this);
    	    interstitial.setAdUnitId(getString(R.string.interstitial_ad_unit_id));
    	    interstitial.setAdListener(new AdListener() {
    	        @Override
    	        public void onAdClosed() {
    	            requestNewInterstitial();
    	        }
    	    });
    	    
    	    requestNewInterstitial();
    	}
    	    
        private void requestNewInterstitial() {
     	     AdRequest adRequest = new AdRequest.Builder()
                .build();
            interstitial.loadAd(adRequest);
        }
  5. インタースティシャル広告を表示する

    	interstitial.show();

Use COMPASS Interstitial through AdMob Mediation

InterstitialAd の詳しいことは Firebase InterstitialAd