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

C# Maui iOS调用Google Roads API遇「该平台不支持操作」错误

问题详情

我尝试使用Google API Roads库实现道路匹配功能,调用异步方法:

GoogleMaps.Roads.SnapToRoad.QueryAsync(request).GetAwaiter();

运行代码时触发错误:Operation is not supported on this platform

最初的代码写法是:

var response = await GoogleMaps.Roads.SnapToRoad.QueryAsync(request).Result;

但这要求调用该代码的方法必须标记为async,只是把问题转移到了调用栈更早的位置。

我也无法使用OnCompleted,因为它需要先调用GetAwaiter,完全搞不清问题出在哪里。

设备环境:iOS 16.7.4、Xcode 15.2、Visual Studio 17.8.6


编辑:已更新为异步Task函数
依然在以下代码处触发相同错误:

var response = await GoogleMaps.Roads.SnapToRoad.QueryAsync(request);

当前完整代码如下:

public static async Task<List<Position>> snapToRoad(List<Position> gpsPos)
{
    List<Position> result = new List<Position>();
    List<List<Position>> subLists = ListExtensions.ChunkBy<Position>(gpsPos, 100);
    foreach (List<Position> gPos in subLists)
    {
        Coordinate[] requestPath = gPos
        .Select(geo => new Coordinate((double)geo.Latitude, (double)geo.Longitude))
        .ToArray();

        SnapToRoadsRequest request = new SnapToRoadsRequest
        {
            Key = MAPS_KEY,
            Path = requestPath
        };
        var response = await GoogleMaps.Roads.SnapToRoad.QueryAsync(request);
        foreach (SnappedPoint sp in response.SnappedPoints)
        {
            result.Add(new Position(sp.Location.Latitude, sp.Location.Longitude));
        }
    }

    return result;
}

该方法由按钮点击事件启动的新线程调用:

async void btnSomething_Click(object sender, EventArgs e)
{
    Thread trd = new Thread(async () =>
    {
        var snapped = await MapUtils.snapToRoad(rawCordList);
    });
    trd.IsBackground = true;
    trd.Start();
}
解决方案
  • 移除手动创建的Thread,改用原生异步等待
    你在Thread内部使用异步委托会破坏异步上下文,iOS平台对非UI线程的异步操作有严格限制。直接在按钮事件中异步调用即可,无需手动开线程:

    async void btnSomething_Click(object sender, EventArgs e)
    {
        var snapped = await MapUtils.snapToRoad(rawCordList);
        // 此处可处理返回结果,Xamarin.Forms的await会自动切回UI线程更新界面
    }
    
  • 检查Google Maps Roads库的平台兼容性
    错误提示“Operation is not supported on this platform”大概率是库版本与iOS 16.7.4不兼容:

    • 更新对应NuGet包到最新稳定版
    • 查看库文档,确认是否支持iOS 16.x版本
  • 禁止混用.Result和await
    最初代码中的await ... .Result是错误用法,会导致死锁,直接使用await即可,这也是你更新代码的正确方向,但要保证调用链的异步上下文正确。

  • 确认API密钥权限
    登录Google Cloud控制台,检查API密钥是否开启了Roads API权限,并且允许当前iOS应用的Bundle ID访问(若设置了应用限制)。部分库会将权限错误包装为平台不支持的异常。


内容的提问来源于stack exchange,提问作者Pontus Holmberg

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.26 07:45:32