You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Xamarin.Forms Android端调用AdvertisingIdClient.GetAdvertisingIdInfo超时问题

Xamarin.Forms Android端获取AAID时触发TimeoutException

我正在开发一款支持Android和iOS的Xamarin.Forms跨平台应用,需要获取AAID与IDFA。在Android端开发中,调用AdvertisingIdClient.GetAdvertisingIdInfo方法时出现超时错误(约10秒后触发)。

我通过DependencyService从Forms层调用Android项目中的方法获取AAID,编译目标为Android 11.0。已完成以下配置操作,但问题依旧:

  • 添加了兼容Android 11的NuGet包:Xamarin.GooglePlayServices.Ads(120.3.0.3)和Xamarin.GooglePlayServices.Basement(117.6.0.4)
  • 创建了DependencyService的接口及Android端实现类
  • 在Forms层通过Task.Run在后台调用服务方法(不这么做会直接报错),代码如下:
IDeviceAdIdentifier service = DependencyService.Get<IDeviceAdIdentifier>();

var tadid = Task.Run(() =>
{
    var t = service.GetAdvertisingIdentifier();
    t.Wait();
    return t.Result;
});

tadid.Wait();
Idfa = tadid.Result;
  • 在Android端保存了MainActivity的Context
  • Android端服务实现代码:
[assembly: Dependency(typeof(TestAdId.Droid.Services.DeviceAdIdentifier))]
namespace TestAdId.Droid.Services
{
    public class DeviceAdIdentifier : TestAdId.Services.IDeviceAdIdentifier
    {
        public async Task<string> GetAdvertisingIdentifier()
        {
            if (MainActivity.Context == null) return "";
            string id = "";
            try
            {
                AdvertisingIdClient.SetShouldSkipGmsCoreVersionCheck(true);
                var adinfo = AdvertisingIdClient.GetAdvertisingIdInfo(MainActivity.Instance); // 也测试过初始化时保存的MainActivity.Context(Application context)
                if (adinfo != null)
                    return adinfo.Id;
            }
            catch (IOException ioerr)
            {
                return ioerr.Message;
            }
            catch (Exception err)
            {
                return err.Message;
            }
            return "";
        }
    }
}
  • AndroidManifest配置:
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android" android:versionCode="1" android:versionName="1.0" package="com.companyname.testadid" android:installLocation="auto">
    <uses-sdk android:minSdkVersion="25" android:targetSdkVersion="30" />
    <application android:label="TestAdId.Android" android:theme="@style/MainTheme" android:icon="@drawable/xamarin_logo">
        <meta-data android:name="com.google.android.gms.ads.AD_MANAGER_APP" android:value="true" />
        <meta-data android:name="com.google.android.gms.version" android:value="@integer/google_play_services_version" />
        
    </application>
    <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
    <uses-permission android:name="android.permission.INTERNET" />
</manifest>

在三星Galaxy A71设备上触发的错误信息:
Message: java.util.concurrent.TimeoutException: Timed out waiting for the service connection
StackTrace:

at Java.Interop.JniPeerMembers+JniStaticMethods.InvokeObjectMethod (System.String encodedMember, Java.Interop.JniArgumentValue* parameters) [0x00018] in <1921523bc22e407fa9a0855bdae29335>:0 
  at Google.Ads.Identifier.AdvertisingIdClient.GetAdvertisingIdInfo (Android.Content.Context context) [0x00027] in /Users/runner/work/1/s/generated/com.google.android.gms.play-services-ads-identifier/obj/Release/monoandroid90/generated/src/Google.Ads.Identifier.AdvertisingIdClient.cs:171 
  at TestAdId.Droid.Services.DeviceAdIdentifier.GetAdvertisingIdentifier () [0x00032] in C:\Working\Digital\Sources\TestAdId\TestAdId\TestAdId.Android\Services\DeviceAdIdentifier.cs:30 
  --- End of managed Java.IO.IOException stack trace ---
java.io.IOException: java.util.concurrent.TimeoutException: Timed out waiting for the service connection
    at com.google.android.gms.ads.identifier.AdvertisingIdClient.zzb(com.google.android.gms:play-services-ads-identifier@@17.0.1:16)
    at com.google.android.gms.ads.identifier.AdvertisingIdClient.getAdvertisingIdInfo(com.google.android.gms:play-services-ads-identifier@@17.0.1:3)
Caused by: java.util.concurrent.TimeoutException: Timed out waiting for the service connection
    at com.google.android.gms.common.BlockingServiceConnection.getServiceWithTimeout(com.google.android.gms:play-services-basement@@17.6.0:4)
    at com.google.android.gms.ads.identifier.AdvertisingIdClient.zzb(com.google.android.gms:play-services-ads-identifier@@17.0.1:14)
    ... 1 more

测试过其他可获取AAID的应用在该设备上可正常运行,希望得到排查帮助,若需更多信息或代码可告知。

内容的提问来源于stack exchange,提问作者Hervé Cyr

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.22 22:57:27