curious4dev

中国旅行、Arduinoなどを使った電子工作、その他色々。

*

【完全版】 Androidで広告ID(Advertising ID)を取得する方法

 

お疲れ様です。高橋です。

非常に長い時間掛けて他人に実機デバッグをやってもらう事、はや1ヶ月。やっと取得する事が出来ました。広告ID。めちゃくちゃ苦労したので、ここに記念にまとめておきます。

まとめ: 広告ID(Advertising ID)を取得するまで

Windows7/64bit/Eclipse4.2.1(JUNO)環境の場合。

1. Google Play servicesをAndroid SDK Managerから落としてくる。

adid00

2. LibraryをEclipseのProjectとしてimportする。

Eclipseの下記メニューを開いて・・・

adid02

そして、Android/Excisting Android Code Into Workspaceを選びます。

adid03

ルート・ディレクトリーに

ECLIPSE_HOME/sdk/extras/google/google_play_services/libproject

を指定して、google-play-services_libをプロジェクトとして読み込みます。

adid01

3. 広告IDを仕込みたいプロジェクトに、取り込んだgoogle play servicesを参照させる。

仕込みたいプロジェクトのディレクトリでメニューを表示させ、Androidタブを開き、追加ボタンを押します。

adid04

そして先ほど取り込んだgoogle-play-services_libを選択しOKを押します。

adid05

んで、OK。

adid06

4. AndroidManifest.xmlにパラメータを設定する。

AndroidManifest.xmlを開いて、applicationタグの中のどこかに、下記meta-dataタグを仕込みます。

 <meta-data
 android:name="com.google.android.gms.version"
 android:value="@integer/google_play_services_version" />

5. 広告IDを取得するクラスを準備する。

下記には例としてAdvertiseIDというクラス名で作成します。

package jp.curious4dev.nishinokanakana;

import java.io.IOException;

import com.google.android.gms.ads.identifier.AdvertisingIdClient;
import com.google.android.gms.common.GooglePlayServicesNotAvailableException;
import com.google.android.gms.common.GooglePlayServicesRepairableException;

import android.os.AsyncTask;

public class AdvertiseID extends AsyncTask<Void, Void, String> {

    private MainActivity mainActivity;

    public AdvertiseID(MainActivity activity) {
        mainActivity = activity;
    }

    @Override
    protected String doInBackground(Void... params) {
        String strAdId = "";
        try {
            AdvertisingIdClient.Info info = AdvertisingIdClient.getAdvertisingIdInfo(mainActivity);
            if (info.isLimitAdTrackingEnabled() == false) {
                strAdId = info.getId();
            } else {
                strAdId = "Limit Ad Tracking is Enabled.";
            }
        } catch (IllegalStateException e) {
            strAdId = "IllegalStateException";
        } catch (GooglePlayServicesRepairableException e) {
            strAdId = "GooglePlayServicesRepairableException";
        } catch (IOException e) {
            strAdId = "IOException";
        } catch (GooglePlayServicesNotAvailableException e) {
            strAdId = "GooglePlayServicesNotAvailableException";
        }
        return strAdId;
    }

    @Override
    protected void onPostExecute(String advertisingID) {
        if (advertisingID != null) {
            mainActivity.strAdId = advertisingID;

        }
    }
}

6. 広告ID取得クラスを使う箇所のコードを書く。

    public void postLog(String action) {

        this.strAction = action;

        if (strAdId.equals("") == true) {
            AdvertiseID adId = new AdvertiseID(this);
            adId.execute();
        }

        postLog();

    }

    public void postLog() {

        Thread adIdPostThread = new Thread(new Runnable() {
            @Override
            public void run() {

                // post log with advertisement id to curious4dev

                // パラメータを生成
                ArrayList params = new ArrayList();
                params.add(new BasicNameValuePair("app_id", strAppId));
                params.add(new BasicNameValuePair("adid", strAdId));
                params.add(new BasicNameValuePair("act", strAction));
                // パラメータをクエリに変換
                String query = URLEncodedUtils.format(params, "UTF-8");
                HttpGet httpGet = new HttpGet(strUrl + query);
                DefaultHttpClient client = new DefaultHttpClient();
                try {
                    client.execute(httpGet);
                } catch (Exception e) {

                }

            }
        });
        adIdPostThread.start();
    }

7. 実機試験

AndroidManifest.xmlにmeta-dataを仕込み、いざリリースします。リリース後に誰かに実験台になってもらい、広告IDが正しく取得&送出出来たか確認します。

無事、謎の36byteの広告IDを取得する事が出来ました。

adid07

 

 

 

あーーーースッキリした。

以上、よろしくお願い致します。

 - アプリ開発

  関連記事

Androidアプリで画面遷移してもBGMが鳴り続けるようにしてみた。

お疲れ様です。高橋です。 先日無事にDAWで楽曲を作成してandroidアプリか …

遅刻の言い訳提案システム 稼働四日目

お疲れ様です。高橋です。 本日も遅刻の言い訳提案システムのデータの分析と改善のた …

遅刻の言い訳アプリ ~ボタンの幅を動的に決定~

お疲れ様です。高橋です。 遅刻の言い訳アプリを着々と実装しています。 全体進捗 …

androidアプリの作り方

お疲れ様です。高橋です。 androidアプリの作り方は、ググったところ大体下記 …

8bit音アプリを実機デバッグし、モスキート音モードを追加してみた。

お疲れ様です。高橋です。 今日会社でAndroidを持っている人にインストールし …

Androidアプリ作りと設計

お疲れ様です。高橋です。 ウォーターフォール型人間である私は、作りたいものをイメ …

8bitサウンドを出すAndroidアプリをリリースしてみた。

お疲れ様です。高橋です。 先日の「Androidで8bitサウンドをモノフォニッ …

リリースした事をスッカリ忘れていた2つのアプリの今について。

お疲れ様です。高橋です。 最近すっかりArduinoにハマってしまって、Andr …

AndroidアプリでHoloGraphLibraryを使ってグラフ描画してみた

お疲れ様です。高橋です。 先日、総務省の統計APIをコールしてデータを取得してく …

TwitterアナリティクスからCSVがダウンロード出来ない

お疲れ様です。高橋です。 TwitterアナリティクスのCSV 遅刻の言い訳提案 …