広告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を投げてくれていました。
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神様がいたら怒られるところですが、趣味なので良いのです。
近日中に誰かが動かしてくれると思うので、結果を楽しみに待っております。
以上、よろしくお願い致します。
関連記事
-
-
リリースした事をスッカリ忘れていた2つのアプリの今について。
お疲れ様です。高橋です。 最近すっかりArduinoにハマってしまって、Andr …
-
-
西野カナ風な歌詞自動生成「カナかな?」をリリースしてみた。
お疲れ様です。高橋です。 昨日はずっと助詞に関する実装をしていたのですが、どうし …
-
-
街頭インタビュー 実機デバッグ結果
お疲れ様です。高橋です。 先日リリースした街頭インタビューアプリの実機デバッグ、 …
-
-
androidアプリの作り方
お疲れ様です。高橋です。 androidアプリの作り方は、ググったところ大体下記 …
-
-
選挙運動シミュレータ「衆院選2014」が迷走してきた。
お疲れ様です。高橋です。 選挙運動シミュレーションゲーム「衆院選2014」の見た …
-
-
「寝坊した」人に自動的に遅刻の言い訳を提案する仕組みを稼働させてみた。
お疲れ様です。高橋です。 寝坊した人にアプリをオススメする仕組みを作りましたが、 …
-
-
西野カナ風な歌詞を自動生成するアプリ「西野カナかな?」を作ってみた。
お疲れ様です。高橋です。 先日実験した「西野カナは本当に会いたいのか、調べてみた …
-
-
街頭インタビュー リリースしてみた
お疲れ様です。高橋です。 リリース 街頭インタビューアプリをリリースしました。 …
-
-
Androidで8bitサウンドをモノフォニックな感じで実装してみた。
お疲れ様です。高橋です。 Arduino+YMZ294で、8bitサウンドがマイ …
-
-
街頭インタビュー 実装 #2
お疲れ様です。高橋です。 本日の実装状況 街頭インタビューを構成する要素を、徹底 …

