@@ -26,23 +26,12 @@ struct GenerativeAIService {
2626 /// The Firebase SDK version in the format `fire/<version>`.
2727 static let firebaseVersionTag = " fire/ \( FirebaseVersion ( ) ) "
2828
29- private let projectID : String
30-
31- /// Gives permission to talk to the backend.
32- private let apiKey : String
33-
34- private let appCheck : AppCheckInterop ?
35-
36- private let auth : AuthInterop ?
29+ private let firebaseInfo : FirebaseInfo
3730
3831 private let urlSession : URLSession
3932
40- init ( projectID: String , apiKey: String , appCheck: AppCheckInterop ? , auth: AuthInterop ? ,
41- urlSession: URLSession ) {
42- self . projectID = projectID
43- self . apiKey = apiKey
44- self . appCheck = appCheck
45- self . auth = auth
33+ init ( firebaseInfo: FirebaseInfo , urlSession: URLSession ) {
34+ self . firebaseInfo = firebaseInfo
4635 self . urlSession = urlSession
4736 }
4837
@@ -180,14 +169,14 @@ struct GenerativeAIService {
180169 private func urlRequest< T: GenerativeAIRequest > ( request: T ) async throws -> URLRequest {
181170 var urlRequest = URLRequest ( url: request. url)
182171 urlRequest. httpMethod = " POST "
183- urlRequest. setValue ( apiKey, forHTTPHeaderField: " x-goog-api-key " )
172+ urlRequest. setValue ( firebaseInfo . apiKey, forHTTPHeaderField: " x-goog-api-key " )
184173 urlRequest. setValue (
185174 " \( GenerativeAIService . languageTag) \( GenerativeAIService . firebaseVersionTag) " ,
186175 forHTTPHeaderField: " x-goog-api-client "
187176 )
188177 urlRequest. setValue ( " application/json " , forHTTPHeaderField: " Content-Type " )
189178
190- if let appCheck {
179+ if let appCheck = firebaseInfo . appCheck {
191180 let tokenResult = await appCheck. getToken ( forcingRefresh: false )
192181 urlRequest. setValue ( tokenResult. token, forHTTPHeaderField: " X-Firebase-AppCheck " )
193182 if let error = tokenResult. error {
@@ -198,10 +187,16 @@ struct GenerativeAIService {
198187 }
199188 }
200189
201- if let auth, let authToken = try await auth. getToken ( forcingRefresh: false ) {
190+ if let auth = firebaseInfo. auth, let authToken = try await auth. getToken (
191+ forcingRefresh: false
192+ ) {
202193 urlRequest. setValue ( " Firebase \( authToken) " , forHTTPHeaderField: " Authorization " )
203194 }
204195
196+ if firebaseInfo. app. isDataCollectionDefaultEnabled {
197+ urlRequest. setValue ( firebaseInfo. googleAppID, forHTTPHeaderField: " X-Firebase-AppId " )
198+ }
199+
205200 let encoder = JSONEncoder ( )
206201 urlRequest. httpBody = try encoder. encode ( request)
207202 urlRequest. timeoutInterval = request. options. timeout
@@ -260,6 +255,7 @@ struct GenerativeAIService {
260255 // Log specific RPC errors that cannot be mitigated or handled by user code.
261256 // These errors do not produce specific GenerateContentError or CountTokensError cases.
262257 private func logRPCError( _ error: BackendError ) {
258+ let projectID = firebaseInfo. projectID
263259 if error. isVertexAIInFirebaseServiceDisabledError ( ) {
264260 VertexLog . error ( code: . vertexAIInFirebaseAPIDisabled, """
265261 The Vertex AI in Firebase SDK requires the Vertex AI in Firebase API \
0 commit comments