curious4dev

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

*

広告IDが取得出来なかった理由がわかってきた。かな?

 

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

しばらく前からめぼしい更新を停止していた「カナかな?」ですが、地味にバージョン8.0まであげています。

理由は、ずっと取得出来ていなかった広告IDのデバッグのためです。

広告IDはgoogleのココに書いてある通りの物でして、広告ID情報というオブジェクトのインスタンスを取得して、そのインスタンスのgetID()メソッドでString型のadIDを取得する・・・という極シンプルなものなのですが。

なぜか実機でadIDが取得出来ない日々が続きました。エミュではそもそもadID系のデバッグが出来ませんので、非常に時間が掛かります。

最初は「みんなAD TrackingをOFFってるのかな。セキュリティ意識高い系だな」なんて思ってたのですが、明らかにそういう物の存在を知らない系の人が操作しても取得出来ていないのを目の当たりにしたため、本腰を入れて市場&実機デバッグに乗り出しました。

「main Threadではない、どこか別Threadから呼べよ」とgoogleのアソコに書いてありますので、普通に下記のような感じでThread生成して、その中で処理していました。

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

それでも取得出来ない。おかしいので、下記のようにアプリ側で発生したExceptionを収集して情報を集めてみます。この時点でバージョン7.0です。

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

ログを仕込んで動かされるのを待つと、本日11:16にplalaの誰かがIllegalStateExceptionを投げてくれていました。

ad03

IllegalStateExceptionは、googleのアソコにも書いてあるとおり、

// Do not call this function from the main thread. Otherwise, 
// an IllegalStateException will be thrown.

“main threadでコールするなよ。コールするとIllegalStateExceptionがthrowされるよ”と言っています。Threadをnewしてstartしても別スレとして認識してくれなかったみたいです。

Androidに於ける別スレッドの処理方法をググってみると、どうやらAsyncTaskというものが一般的のようです。

そこで急遽下記のようなクラスを1個こさえて・・・

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;

        }
    }
}

MainActivityからは、こんな感じで呼び出します。

            AdvertiseID adId = new AdvertiseID(this);
            adId.execute();

これで、AdvertiseIDクラスが処理を終えた後に、MainActivityのstrAdIdに値をしまってくれるはずです。クラスのプロパティをpublicにし、あまつさえ別クラスから値を変更するなんて、JAVA神様がいたら怒られるところですが、趣味なので良いのです。

近日中に誰かが動かしてくれると思うので、結果を楽しみに待っております。

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

 - アプリ開発

  関連記事

合理的な遅刻の言い訳生成アプリ。

お疲れ様です。高橋です。 寝坊と遅刻連絡について 平日の朝。iPhoneのアラー …

遅刻の言い訳アプリをリリースしてみた。

お疲れ様です。高橋です。 2/20あたりから、「合理的な遅刻の言い訳生成アプリ。 …

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

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

「寝坊した」人に自動的に遅刻の言い訳を提案する仕組みを稼働させてみた。

お疲れ様です。高橋です。 寝坊した人にアプリをオススメする仕組みを作りましたが、 …

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

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

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

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

上司離着席状態検知アプリ

お疲れ様です。高橋です。 上司離着席状態検知システムですが、 必要性を記載 回路 …

選挙運動シミュレータ「衆院選2014」が迷走してきた。

お疲れ様です。高橋です。 選挙運動シミュレーションゲーム「衆院選2014」の見た …

「カナかな?」を実機デバッグし、ログ送出機能を追加してリリースしてみた。

お疲れ様です。高橋です。 デバッグしてみた 先日リリースした、西野カナ風の歌詞を …

Androidアプリ上でLINEみたいな吹き出しでTextを囲んで表示してみた。

お疲れ様です。高橋です。 AndroidでLINEみたいにテキストの周りを吹き出 …