如何以编程方式在Android中获取广告ID

use*_*543 30 android

我想以编程方式获取用户广告ID.我使用了以下开发者网站的代码.但它不起作用

         Info adInfo = null;
          try {
            adInfo = AdvertisingIdClient.getAdvertisingIdInfo(getApplicationContext());

          } catch (IOException e) {
            // Unrecoverable error connecting to Google Play services (e.g.,
            // the old version of the service doesn't support getting AdvertisingId).

          } catch (GooglePlayServicesNotAvailableException e) {
            // Google Play services is not available entirely.
          } catch (IllegalStateException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        } catch (GooglePlayServicesRepairableException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
          final String id = adInfo.getId();
          final boolean isLAT = adInfo.isLimitAdTrackingEnabled();
Run Code Online (Sandbox Code Playgroud)

如何以编程方式获取用户的广告ID?请帮我

小智 40

我可能会迟到但这可能会帮助别人!

    AsyncTask<Void, Void, String> task = new AsyncTask<Void, Void, String>() {
        @Override
        protected String doInBackground(Void... params) {
            AdvertisingIdClient.Info idInfo = null;
            try {
                idInfo = AdvertisingIdClient.getAdvertisingIdInfo(getApplicationContext());
            } catch (GooglePlayServicesNotAvailableException e) {
                e.printStackTrace();
            } catch (GooglePlayServicesRepairableException e) {
                e.printStackTrace();
            } catch (IOException e) {
                e.printStackTrace();
            }
            String advertId = null;
            try{
                advertId = idInfo.getId();
            }catch (NullPointerException e){
                e.printStackTrace();
            }

            return advertId;
        }

        @Override
        protected void onPostExecute(String advertId) {
            Toast.makeText(getApplicationContext(), advertId, Toast.LENGTH_SHORT).show();
        }

    };
    task.execute();
Run Code Online (Sandbox Code Playgroud)


Pra*_*rma 18

获取GAID(Google的广告ID)

1.下载最新的Google Play服务SDK.
2.导入代码并将其添加为库项目.
3.修改AndroidManifest.xml.

<meta-data
        android:name="com.google.android.gms.version"
        android:value="@integer/google_play_services_version" />
Run Code Online (Sandbox Code Playgroud)

4.启用ProGuard的萎缩,混淆你的代码在project.properties这一行

 proguard.config=${sdk.dir}/tools/proguard/proguard-android.txt:proguard-project.txt
Run Code Online (Sandbox Code Playgroud)

5.proguard-project.txt中添加规则.

     -keep class * extends java.util.ListResourceBundle {
    protected Object[][] getContents();  }

 -keep public class com.google.android.gms.common.internal.safeparcel.SafeParcelable {
        public static final *** NULL;      }

    -keepnames @com.google.android.gms.common.annotation.KeepName class *
    -keepclassmembernames class * {
        @com.google.android.gms.common.annotation.KeepName *;
    }

    -keepnames class * implements android.os.Parcelable {
        public static final ** CREATOR;
    }
Run Code Online (Sandbox Code Playgroud)

6.在工作线程中调用AdvertisingIdClient.getAdvertisingIdInfo(getApplicationContext()).getId()以获取String中的id.像这样

        AsyncTask<Void, Void, String> task = new AsyncTask<Void, Void, String>() {
        @Override
        protected String doInBackground(Void... params) {
            AdvertisingIdClient.Info idInfo = null;
            try {
                idInfo = AdvertisingIdClient.getAdvertisingIdInfo(getApplicationContext());
            } catch (GooglePlayServicesNotAvailableException e) {
                e.printStackTrace();
            } catch (GooglePlayServicesRepairableException e) {
                e.printStackTrace();
            } catch (Exception e) {
                e.printStackTrace();
            }
            String advertId = null;
            try{
                advertId = idInfo.getId();
            }catch (Exception e){
                e.printStackTrace();
            }
            return advertId;
        }
        @Override
        protected void onPostExecute(String advertId) {
            Toast.makeText(getApplicationContext(), advertId, Toast.LENGTH_SHORT).show();
        }
    };
    task.execute();
Run Code Online (Sandbox Code Playgroud)

请享用!

要么

https://developervisits.wordpress.com/2016/09/09/android-2/


Wah*_*Haq 9

如果有人有兴趣在AdvertisingIdRx-ing时尝试取出部件,那么这可能会有所帮助.

private void fetchAndDoSomethingWithAdId() {
    Observable.fromCallable(new Callable<String>() {
        @Override
        public String call() throws Exception {
            return AdvertisingIdClient.getAdvertisingIdInfo(context).getId();
        }
    })
              .subscribeOn(Schedulers.io())
              .observeOn(AndroidSchedulers.mainThread())
              .subscribe(new Action1<String>() {
                  @Override
                  public void call(String id) {
                     //do what you want to do with id for e.g using it for tracking
                  }
              }, new Action1<Throwable>() {
                  @Override
                  public void call(Throwable throwable) {
                      throwable.printStackTrace();
                  }
              });
}
Run Code Online (Sandbox Code Playgroud)

  • 在这里使用Consumer而不是Action1用于RxJava2. (4认同)

小智 9

您可以onCreate(Bundle savedInstanceState)在活动中调用以下函数

并在 logcat 中搜索 UIDMY,然后它将显示如下 ID:I/UIDMY: a1cf5t4e-9eb2-4342-b9dc-10cx1ad1abe1

void getUIDs()
{
    AsyncTask.execute(new Runnable() {
        @Override
        public void run() {
            try {
                AdvertisingIdClient.Info adInfo = AdvertisingIdClient.getAdvertisingIdInfo(SplashScreen.this);
                String myId = adInfo != null ? adInfo.getId() : null;
             
                Log.i("UIDMY", myId);
            } catch (Exception e) {
                Toast toast = Toast.makeText(context, "error occurred ", Toast.LENGTH_SHORT);
                toast.setGravity(gravity, 0,0);
                toast.show();
            }
        }
    });
}
Run Code Online (Sandbox Code Playgroud)


Tim*_*ähr 8

从后台线程获取广告ID:

    AsyncTask.execute(new Runnable() {
        @Override
        public void run() {
            try {
                AdvertisingIdClient.Info adInfo = AdvertisingIdClient.getAdvertisingIdInfo(mContext);
                String adId = adInfo != null ? adInfo.getId() : null;
                // Use the advertising id
            } catch (IOException | GooglePlayServicesRepairableException | GooglePlayServicesNotAvailableException exception) {
                // Error handling if needed
            }
        }
    });
Run Code Online (Sandbox Code Playgroud)

我添加了null检查以防止任何崩溃。如果发生异常,Google示例实现代码将崩溃NullPointerException


小智 5

现代方法是在 Kotlin 中使用协程,因为 AsyncTask 现在已被 Android 弃用。这是我如何做到的:

import com.google.android.gms.ads.identifier.AdvertisingIdClient
import kotlinx.coroutines.Dispatchers
import kotlinx.coroutines.withContext

class AdvertisingInfo(val context: Context) {

    private val adInfo = AdvertisingIdClient(context.applicationContext)

    suspend fun getAdvertisingId(): String =
        withContext(Dispatchers.IO) {
            //Connect with start(), disconnect with finish()
            adInfo.start()
            val adIdInfo = adInfo.info
            adInfo.finish()
            adIdInfo.id
        }
}
Run Code Online (Sandbox Code Playgroud)

当您准备使用广告 ID 时,您需要调用另一个挂起函数:

suspend fun applyDeviceId(context: Context) {
    val advertisingInfo = AdvertisingInfo(context)
    // Here is the suspending function call, 
    // in this case I'm assigning it to a static object
    MyStaticObject.adId = advertisingInfo.getAdvertisingId()
}
Run Code Online (Sandbox Code Playgroud)


Ton*_*ark 0

您需要使用异步任务运行代码

尝试这个

在 SDK 中使用新的 Android 广告商 ID