谷歌地图在iPhone模拟器上无法工作

28

我已经逐步实现了“获取Google Maps SDK for iOS”的步骤。

最终模拟器运行正常,没有发现错误,但是地图除了标记以外没有任何详细信息。

如图片所示:

模拟器截图

此外,底部的输出显示以下消息:

2012年12月23日01:06:59.869 GogleMap[3680:c07] GMSZoomTableQuadTree缺少瓦片类型(mapType:10)的根缩放表 2012年12月23日01:07:00.042 GogleMap[3680:1b03] Google Maps SDK for iOS版本:1.0.1.1154 2012年12月23日01:07:00.375 GogleMap[3680:c07] ClientParametersRequest失败,还剩3次尝试。 错误域=DASHConnectionError Code=100 “操作无法完成。 (DASHConnectionError error 100.)”

请求帮助,谢谢。


你尝试在实际设备上运行它,看看是否有任何反应了吗? - Yo_Its_Az
嘿,你是怎么跟着步骤走的?我在控制台申请了API密钥访问,但还没有收到回复。除此之外,按照步骤所述,你在哪里找到了“Google Maps SDK for iOS”以启用它在服务中的功能? - DD_
显示地图需要多长时间? - Uma Madhavi
这对我有用 https://dev59.com/dmUo5IYBdhLWcg3wvRlF#37459488 - user4034301
21个回答

63
已解决:我认为我们在这个过程中都忽略了一个小但非常重要的步骤。

为了开始,需要在Google APIs控制台上启用Google Maps SDK for iOS服务,以及其他Google API。

enter image description here

一旦您在Google APIs Console中启用了iOS版的GoogleMap SDK,您的应用程序将在下一次运行时正确加载瓷砖。

3
2019年了,同样的事情仍在发生,你在iOS SDK的凭证页面上设置了所有内容,但没有任何提醒告诉你还需要启用SDK。 - Tiago Mendes

8

@user1924208 我也遇到了同样的问题。我在互联网上不断搜索答案,但不幸的是,我认为我们没有希望了。谷歌API控制台可能向您显示的是Google Maps v.3的API密钥,而不是Google Maps iOS的API密钥。因此,当您使用它作为您的API密钥时,验证请求将始终失败。

似乎他们还没有为iOS版本发行许多API密钥,无论出于什么原因。尽管很烦人,但您只需等待收到来自他们的电子邮件(不太确定何时会收到...)。

您可以确认这一点,因为用任何随机字符串替换当前API密钥都会产生相同的结果。顺便说一下,这也会在模拟器和实际设备上产生相同的结果,我已经进行了测试。

更新

我刚刚收到了来自Google Maps的电子邮件,通知我我的API密钥现已可用。我用GMSServices替换了MKMapKit,现在一切都正常运行。看起来他们现在更愿意发布API密钥了,所以希望您也能很快获得您的API密钥。


你是如何按照步骤进行的?我在控制台申请了API密钥访问,但还没有收到回复。除此之外,根据步骤,你在哪里找到了“Google Maps SDK for iOS”以便在服务中启用它? - DD_
我也没有找到“Google Maps SDK for iOS”密钥。看起来这是在他们联系您并授予访问权限时从您的Google API控制台解锁的内容。 - manderson
是的,我也这么认为!很奇怪。 - DD_
来吧,真的需要将应用程序放到应用商店吗?我只想学习SDK,因此我在注册表单中输入了应用程序名称:HelloWorld。这就是为什么我无法得到响应的原因吗? - Yeung

6

注意,确保您在服务选项卡中还启用了“Google Maps SDK for iOS”。

我曾遇到类似的错误,直到意识到我只生成了API密钥,但忘记了启用服务。解决了我的问题。

SDKDemos[160:907] ClientParametersRequest failed, 0 attempts remaining (0 vs 5). 
Error Domain=com.google.Maps.GMSDASHConnection Code=100 
"The operation couldn’t be completed. (com.google.Maps.GMSDASHConnection error 100.)"

3

我曾经也遇到了类似的问题,但我确信API密钥是正确的,因为SDK包中的示例项目使用的是与我在实际应用程序中使用的bundle ID相同的API密钥。最新版(1.2)的SDK实际上会记录一个警告,如果您的API密钥似乎无效则会失败。 未能显示地图的原因是我没有在项目设置的目标摘要选项卡中填写版本号。事实证明,您绝对需要在Info.plist中设置CFBundleVersion才能使谷歌地图工作,否则地图将保持空白,不会显示任何错误或警告,甚至不会发出任何Web请求。


1
我不得不改变构建号,即使它已经存在。然后它就可以工作了。无论如何,谢谢! - cloudsurfin
谢谢!这让我非常疯狂!我的 info plist 中的 CFBundleVersion 没有得到正确的填充。 - Tyler

2
我遇到了同样的问题。我认为问题出在我的项目的“bundle identifier”与Google APIs控制台中的某个bundle identifier不同。
所以我为我的Google APIs控制台添加了更多的bundle identifier:从项目导航器中选择你的项目本身,选择你的应用程序的目标。在“摘要”选项卡中,记住你的“Bundle Identifier”字符串。
转到Google APIs控制台页面,在控制台中选择API访问面板,在iOS应用程序密钥部分中,选择“编辑允许的iOS应用程序...”,并添加你在上面记住的bundle identifier。重新运行你的项目,完成!

2

请确保从模拟器选项的“功能”->“位置”->“Apple”中启用位置功能。

输入图像描述


1

这个错误表明使用无效的密钥来初始化Google地图:

[GMSServices provideAPIKey:@"YOUR_API_KEY"];

这个密钥是由谷歌专门为iOS SDK发放的(显然只给了一些特定的人);Google Maps SDK v2和v3的密钥在苹果上不起作用。

确认错误确实是由于无效密钥引起的方法是通过显示一个图钉。图钉不需要有效的密钥,因此它将在空地图视图对象上可见。从入门页面https://developers.google.com/maps/documentation/ios/start#add_a_map编写示例应该会导致应用程序显示一个空的地图视图(黄色背景和中心的图钉)。

保证图钉可见的最好方法是对相机和标记使用完全相同的坐标,请参见代码片段:

GMSCameraPosition *camera = [GMSCameraPosition cameraWithLatitude:43.65
                                                        longitude:-79.45
                                                             zoom:6];

mapView_ = [GMSMapView mapWithFrame:CGRectZero camera:camera];

mapView_.myLocationEnabled = YES;
self.view = mapView_;

GMSMarkerOptions *markerOptions = [[GMSMarkerOptions alloc] init];
markerOptions.position = CLLocationCoordinate2DMake(43.65, -79.45);
markerOptions.title = @"Greater Toronto Area";

[mapView_ addMarkerWithOptions:markerOptions];

1

从不同角度跟进这个问题:

在较新版本的Google Maps框架中存在一个错误,如果应用程序在后台运行,则无法实例化/创建/添加地图到父视图。

当您这样做时,生成的地图除了左下角的Google标志外,将完全显示为空白。原因是OpenGL渲染在后台不被操作系统允许;一旦恢复到前台,只需要重新启动渲染器即可。

谷歌终于解决了这个问题(大约经过一年时间),请升级到最新版本。

如果您使用的是Google for Business:

pod 'Google-Maps-iOS-SDK-for-Business', '~> 1.11.1'

这个问题的复现可以在旧版本中这里找到。

视觉复现:

OpenGL Bug


免费版和商业计划有不同的SDK吗?我问这个问题是因为我正在使用我的个人帐户为公司启动项目,直到购买与谷歌的服务合同获得批准。一旦他们这样做了,我就得到了我们公司的密钥并将其放入应用程序中。在模拟器上一切正常,但在设备上,我得到了死亡之棕色屏幕。我记录了provideAPIKey返回的bool,每次都是“是”。控制台中的bundle是正确的。我可以让Directions和GeoCode服务正常工作,但我无法显示地图。 - PruitIgoe
@PruitIgoe 是的,普通客户和企业客户有不同的SDK,并且设置每个客户的网站也不同。 - iwasrobbed
1
谢谢,我最终解决了。不得不说,我完全对谷歌开发者控制台的UI / UX印象不佳。它真的一点都不直观,只是让人很难操作。 - PruitIgoe

1
我遇到同样的问题,后来我去了谷歌控制台,点击了“生成新密钥”,然后新的密钥可以使用了!

1

确保您未更改应用程序的

[捆绑标识符]

。它应该与您生成API密钥时使用的标识符匹配。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接