Google 添加包标识符后地图 API 不工作 - iOS

Google Map APIs not working after adding bundle identifier - iOS

我 Google 开发者控制台 我创建了一个 iOS 密钥,如下所示:

我只想将此密钥限制为一个应用程序,因此我 "Edit allowed iOS application" 将我的包 ID 添加到其中。我的包 ID 很容易在我的项目目标的常规选项卡中找到,如下所示:

我不知道它是否区分大小写,但我从那里准确地复制了标识符以添加到密钥中。如您所见,它不会弄错。我也按照Google的说明,每行一个bundle Identifier(我只输入一行):

Accept requests from an iOS application with one of the bundle identifiers listed below (Optional) One bundle identifier per line. Example: com.example.MyApp

Or if you leave this blank, requests will be accepted from any iOS application. Be sure to add bundle identifiers before using this key in production.

此屏幕显示我启用了所有必要的服务,可以肯定的是:

我的问题是,每当我向密钥添加包标识符时,我的应用程序就会停止工作。但是当我删除它时(现在 "Any application allowed" 如图所示),一切恢复正常。

任何人都可以告诉我这可能是什么原因造成的吗?

更新:澄清一下:当我将我的包 ID 添加到开发者控制台中的密钥时,现在我仍然可以在我的应用程序中使用附近的搜索。但是自动完成搜索和 Google URL 缩短器已停止工作..

添加 iOS 捆绑包 ID 时自动完成停止工作的原因是 Google Places API Web Service 不是专门为在 iOS 上使用而设计的。作为一个温和的提示,我建议你在本周晚些时候发生 Google I/O 之后四处看看 Google Places API for iOS。 =)

任何获得 403 的请求都应与额外的 header X-Ios-Bundle-Identifier 一起发送,其中应设置您的包 ID。这似乎没有记录,我只是通过在链接之间跳转找到的,参见 this...

我也运行遇到这个问题,按照@zhywu 上面的回答解决了

利用 URLSession/URLSessionDataTask 的 Swift 5 代码如下所示:

if var urlComponents = URLComponents(string: "https://www.googleapis.com/...") {
            ...
            guard let url = urlComponents.url else { return }

            var request = URLRequest(url: url)
            request.setValue(Bundle.main.bundleIdentifier ?? "", forHTTPHeaderField: "X-Ios-Bundle-Identifier")

            dataTask = defaultSession.dataTask(with: request) { ... }
            ...
}