UWP中MapLocationFinder始终返回InvalidCredentials问题求助
我之前在UWP项目里也碰到过一模一样的问题,除了设置MapService.ServiceToken之外,还有几个容易被忽略的排查方向,你可以逐一试试:
确认Bing Maps密钥的类型是否正确
一定要创建Universal Windows App类型的密钥,而不是Web服务、移动应用或者其他类型。登录Bing Maps开发者后台,找到你的密钥,检查它的“Key type”字段,选错类型的话哪怕密钥本身是对的,也会触发认证失败。检查密钥的应用限制配置
如果你的密钥设置了应用限制(比如指定Package SID),务必保证UWP应用的Package SID和后台配置的完全一致:- 在Visual Studio中打开项目属性,切换到「打包」标签,点击「查看详细信息」,复制里面的Package SID;
- 回到Bing Maps后台,找到对应密钥的“Application restrictions”,确认设置的SID和你复制的完全匹配(注意不要多空格或者少字符)。
如果不需要限制,也可以暂时把限制改成「无」,测试是否能正常调用。
确保设置ServiceToken的时机足够早
MapService.ServiceToken必须在调用任何地图相关API(包括MapLocationFinder.FindLocationsAsync())之前设置,建议放在App.xaml.cs的OnLaunched方法最开始,或者页面的OnNavigatedTo方法里。还要检查代码中有没有后续逻辑不小心覆盖了这个值(比如误设为空字符串)。直接验证密钥的有效性
用Bing Maps的REST API直接测试你的密钥是否可用:
在浏览器中访问:http://dev.virtualearth.net/REST/v1/Locations?q=Seattle&key=你的Bing Maps密钥如果返回包含地理位置信息的JSON,说明密钥本身没问题;如果仍然返回InvalidCredentials,那可能是密钥被禁用或者创建时出现了异常,建议重新创建一个新的密钥,并且不要设置任何应用限制先测试。
检查UWP应用的功能声明
打开Package.appxmanifest,确认已经添加了以下功能:Internet (Client):必须添加,因为地图服务需要联网调用;Location:如果你的应用需要获取用户位置,这个功能也不能少(虽然不一定直接导致认证错误,但缺少可能引发其他关联问题)。
清理项目并重新部署
有时候Visual Studio的缓存或者旧的部署文件会导致奇怪的问题:- 点击菜单栏的「Build」->「Clean Solution」;
- 手动删除项目目录下的
bin和obj文件夹; - 重新生成项目并部署到测试设备上。
如果以上方法都试过还是不行,可以登录Bing Maps开发者控制台查看API调用日志,里面会有更详细的错误细节,帮助定位问题。
内容的提问来源于stack exchange,提问作者Hjalmar

