@@ -26,23 +26,12 @@ struct GenerativeAIService {
26
26
/// The Firebase SDK version in the format `fire/<version>`.
27
27
static let firebaseVersionTag = " fire/ \( FirebaseVersion ( ) ) "
28
28
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
37
30
38
31
private let urlSession : URLSession
39
32
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
46
35
self . urlSession = urlSession
47
36
}
48
37
@@ -180,14 +169,14 @@ struct GenerativeAIService {
180
169
private func urlRequest< T: GenerativeAIRequest > ( request: T ) async throws -> URLRequest {
181
170
var urlRequest = URLRequest ( url: request. url)
182
171
urlRequest. httpMethod = " POST "
183
- urlRequest. setValue ( apiKey, forHTTPHeaderField: " x-goog-api-key " )
172
+ urlRequest. setValue ( firebaseInfo . apiKey, forHTTPHeaderField: " x-goog-api-key " )
184
173
urlRequest. setValue (
185
174
" \( GenerativeAIService . languageTag) \( GenerativeAIService . firebaseVersionTag) " ,
186
175
forHTTPHeaderField: " x-goog-api-client "
187
176
)
188
177
urlRequest. setValue ( " application/json " , forHTTPHeaderField: " Content-Type " )
189
178
190
- if let appCheck {
179
+ if let appCheck = firebaseInfo . appCheck {
191
180
let tokenResult = await appCheck. getToken ( forcingRefresh: false )
192
181
urlRequest. setValue ( tokenResult. token, forHTTPHeaderField: " X-Firebase-AppCheck " )
193
182
if let error = tokenResult. error {
@@ -198,10 +187,16 @@ struct GenerativeAIService {
198
187
}
199
188
}
200
189
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
+ ) {
202
193
urlRequest. setValue ( " Firebase \( authToken) " , forHTTPHeaderField: " Authorization " )
203
194
}
204
195
196
+ if firebaseInfo. app. isDataCollectionDefaultEnabled {
197
+ urlRequest. setValue ( firebaseInfo. googleAppID, forHTTPHeaderField: " X-Firebase-AppId " )
198
+ }
199
+
205
200
let encoder = JSONEncoder ( )
206
201
urlRequest. httpBody = try encoder. encode ( request)
207
202
urlRequest. timeoutInterval = request. options. timeout
@@ -260,6 +255,7 @@ struct GenerativeAIService {
260
255
// Log specific RPC errors that cannot be mitigated or handled by user code.
261
256
// These errors do not produce specific GenerateContentError or CountTokensError cases.
262
257
private func logRPCError( _ error: BackendError ) {
258
+ let projectID = firebaseInfo. projectID
263
259
if error. isVertexAIInFirebaseServiceDisabledError ( ) {
264
260
VertexLog . error ( code: . vertexAIInFirebaseAPIDisabled, """
265
261
The Vertex AI in Firebase SDK requires the Vertex AI in Firebase API \
0 commit comments