diff --git a/FirebaseAI/CHANGELOG.md b/FirebaseAI/CHANGELOG.md index 82d0494387d..8a923e651e4 100644 --- a/FirebaseAI/CHANGELOG.md +++ b/FirebaseAI/CHANGELOG.md @@ -1,3 +1,8 @@ +# 12.7.0 +- [fixed] Fixed support for API keys with iOS+ app + [Bundle ID restrictions](https://docs.cloud.google.com/docs/authentication/api-keys#adding-application-restrictions) + by setting the `x-ios-bundle-identifier` header. (#15475) + # 12.6.0 - [feature] Added support for [Server Prompt Templates](https://firebase.google.com/docs/ai-logic/server-prompt-templates/get-started). diff --git a/FirebaseAI/Sources/GenerativeAIService.swift b/FirebaseAI/Sources/GenerativeAIService.swift index 3807c56ea6b..8591980cf86 100644 --- a/FirebaseAI/Sources/GenerativeAIService.swift +++ b/FirebaseAI/Sources/GenerativeAIService.swift @@ -179,6 +179,9 @@ struct GenerativeAIService { } else { urlRequest.setValue(firebaseInfo.apiKey, forHTTPHeaderField: "x-goog-api-key") } + if let bundleID = Bundle.main.bundleIdentifier { + urlRequest.setValue(bundleID, forHTTPHeaderField: "x-ios-bundle-identifier") + } urlRequest.setValue( "\(GenerativeAIService.languageTag) \(GenerativeAIService.firebaseVersionTag)", forHTTPHeaderField: "x-goog-api-client" diff --git a/FirebaseAI/Sources/Types/Internal/Live/LiveSessionService.swift b/FirebaseAI/Sources/Types/Internal/Live/LiveSessionService.swift index 05ec6918cc5..a2fd31b34e9 100644 --- a/FirebaseAI/Sources/Types/Internal/Live/LiveSessionService.swift +++ b/FirebaseAI/Sources/Types/Internal/Live/LiveSessionService.swift @@ -365,6 +365,9 @@ actor LiveSessionService { var urlRequest = URLRequest(url: url) urlRequest.timeoutInterval = requestOptions.timeout urlRequest.setValue(firebaseInfo.apiKey, forHTTPHeaderField: "x-goog-api-key") + if let bundleID = Bundle.main.bundleIdentifier { + urlRequest.setValue(bundleID, forHTTPHeaderField: "x-ios-bundle-identifier") + } urlRequest.setValue( "\(GenerativeAIService.languageTag) \(GenerativeAIService.firebaseVersionTag)", forHTTPHeaderField: "x-goog-api-client" diff --git a/FirebaseAI/Tests/Unit/TestUtilities/GenerativeModelTestUtil.swift b/FirebaseAI/Tests/Unit/TestUtilities/GenerativeModelTestUtil.swift index 84062c58a2a..ed07b25850d 100644 --- a/FirebaseAI/Tests/Unit/TestUtilities/GenerativeModelTestUtil.swift +++ b/FirebaseAI/Tests/Unit/TestUtilities/GenerativeModelTestUtil.swift @@ -69,6 +69,9 @@ enum GenerativeModelTestUtil { XCTAssertEqual(firebaseAppID, dataCollection ? "My app ID" : nil) XCTAssertEqual(appVersion, dataCollection ? expectedAppVersion : nil) + let bundleID = request.value(forHTTPHeaderField: "x-ios-bundle-identifier") + XCTAssertEqual(bundleID, Bundle.main.bundleIdentifier) + if let authToken { XCTAssertEqual( request.value(forHTTPHeaderField: "Authorization"),