我正在开发一个最小的测试应用程序,以使用 AndroidX 库获取 Google Advertising ID。我尝试按照 Google 的文档检索广告 ID:https ://developer.android.com/training/articles/ad-id
但是,AdvertisingIdClient.isAdvertisingIdProviderAvailable()
总是返回 false,并且,正如预期的那样,onFailure()
future 回调的方法被触发,但异常No compatible AndroidX Advertising ID Provider available.
。我已经在 3 部手机上对此进行了测试,其中 1 部有 SIM 卡和运营商(Android 9),而其中 2 部没有(Android 9 和 10)。
我找不到任何有关如何获取或使用“Androidx 广告 ID 提供程序”来使我的最小示例工作的文档(即检索我可以在调试器或日志中看到的广告 ID,即使它没有被使用任何地方)。任何人都可以阐明解决此异常吗?这是我正在使用的代码。我在调用MoreExecutors.directExecutor()
中添加了一个调用,addCallback
因为谷歌的代码不能按原样工作(看起来它已经过时了)。
MainActivity.kt
class MainActivity : AppCompatActivity() {
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_main)
val isProviderAvailable: Boolean = AdvertisingIdClient.isAdvertisingIdProviderAvailable(this)
Log.i("Provider is available: ", isProviderAvailable.toString())
val x = Runnable { run { determineAdvertisingInfo() } }
x.run()
}
private fun determineAdvertisingInfo() {
val advertisingIdInfoListenableFuture =
AdvertisingIdClient.getAdvertisingIdInfo(applicationContext)
addCallback(
advertisingIdInfoListenableFuture,
object : FutureCallback<AdvertisingIdInfo> {
override fun onSuccess(adInfo: AdvertisingIdInfo?) {
val id: String? = adInfo?.id
val providerPackageName: String? = adInfo?.providerPackageName
val isLimitTrackingEnabled: Boolean? = adInfo?.isLimitAdTrackingEnabled
}
override fun onFailure(t: Throwable) {
Log.e("=====", "Failed to connect to Advertising ID provider.")
}
}, MoreExecutors.directExecutor()
)
}
}
分级文件
apply plugin: 'com.android.application'
apply plugin: 'kotlin-android'
apply plugin: 'kotlin-android-extensions'
android {
compileSdkVersion 29
buildToolsVersion "29.0.2"
defaultConfig {
applicationId "redacted"
minSdkVersion 14
targetSdkVersion 29
versionCode 1
versionName "1.0"
testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner"
}
buildTypes {
release {
minifyEnabled false
proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro'
}
}
}
dependencies {
implementation fileTree(dir: 'libs', include: ['*.jar'])
implementation "org.jetbrains.kotlin:kotlin-stdlib-jdk7:$kotlin_version"
implementation 'androidx.appcompat:appcompat:1.1.0'
implementation 'androidx.core:core-ktx:1.1.0'
implementation 'androidx.constraintlayout:constraintlayout:1.1.3'
testImplementation 'junit:junit:4.12'
androidTestImplementation 'androidx.test.ext:junit:1.1.1'
androidTestImplementation 'androidx.test.espresso:espresso-core:3.2.0'
implementation 'androidx.ads:ads-identifier:1.0.0-alpha03'
implementation 'com.google.guava:guava:28.0-android'
implementation 'com.google.android.gms:play-services-analytics:17.0.0'
}
我不为此致力于 Kotlin,所以如果你有 Java 解决方案,请发表。