@@ -28,11 +28,11 @@ enum Strings {
28
28
static let releaseEndpointUrlTemplate =
29
29
" https://firebaseapptesters.googleapis.com/v1alpha/devices/-/testerApps/%@/installations/%@/releases "
30
30
static let findReleaseEndpointUrlTemplate =
31
- " https://firebaseapptesters.googleapis.com/v1alpha/projects/%@/installations/%@/releases:find "
31
+ " https://firebaseapptesters.googleapis.com/v1alpha/projects/%@/installations/%@/releases:find?compositeBinaryId.displayVersion=%@&compositeBinaryId.buildVersion=%@&compositeBinaryId.codeHash=%@ "
32
32
static let createFeedbackEndpointUrlTemplate =
33
33
" https://firebaseapptesters.googleapis.com/v1alpha/%@/feedbackReports "
34
34
static let uploadImageEndpointUrlTemplate =
35
- " https://firebaseapptesters.googleapis.com/v1alpha/%@/feedbackReports "
35
+ " https://firebaseapptesters.googleapis.com/upload/ v1alpha/%@:uploadArtifact "
36
36
static let commitFeedbackEndpointUrlTemplate =
37
37
" https://firebaseapptesters.googleapis.com/v1alpha/%@:commit "
38
38
static let installationsAuthHeader = " X-Goog-Firebase-Installations-Auth "
@@ -46,6 +46,8 @@ enum Strings {
46
46
static let GoogleUploadProtocolRaw = " raw "
47
47
static let GoogleUploadFileNameHeader = " X-Goog-Upload-File-Name "
48
48
static let GoogleUploadFileName = " screenshot.png "
49
+ static let contentTypeHeader = " Content-Type "
50
+ static let jsonContentType = " application/json "
49
51
}
50
52
51
53
enum AppDistributionApiError : NSInteger {
@@ -74,10 +76,6 @@ struct FeedbackReport: Codable {
74
76
var text : String ?
75
77
}
76
78
77
- struct CreateFeedbackReportRequest : Codable {
78
- var feedbackReport : FeedbackReport
79
- }
80
-
81
79
@objc ( FIRFADApiServiceSwift) open class ApiService : NSObject {
82
80
@objc ( generateAuthTokenWithCompletion: ) public static func generateAuthToken( completion: @escaping ( _ identifier: String ? ,
83
81
_ authTokenResult: InstallationsAuthTokenResult ? ,
@@ -196,6 +194,19 @@ struct CreateFeedbackReportRequest: Codable {
196
194
)
197
195
}
198
196
197
+ private static func buildFindReleaseUrl( projectNumber: String , identifier: String ,
198
+ displayVersion: String , buildVersion: String ,
199
+ codeHash: String ) -> String {
200
+ return String (
201
+ format: Strings . findReleaseEndpointUrlTemplate,
202
+ projectNumber,
203
+ identifier,
204
+ displayVersion,
205
+ buildVersion,
206
+ codeHash
207
+ )
208
+ }
209
+
199
210
static func findRelease( app: FirebaseApp , installations: InstallationsProtocol ,
200
211
urlSession: URLSession , displayVersion: String ,
201
212
buildVersion: String , codeHash: String ,
@@ -204,39 +215,17 @@ struct CreateFeedbackReportRequest: Codable {
204
215
generateAuthToken ( installations: installations) { identifier, authTokenResult, error in
205
216
// TODO(tundeagboola) The backend may not accept project ID here in which case
206
217
// we'll have to figure out a way to get the project number
207
- let urlString = String (
208
- format: Strings . findReleaseEndpointUrlTemplate,
209
- app,
210
- identifier!
211
- )
212
- guard var urlComponents = URLComponents ( string: urlString) else {
213
- // TODO(tundeagboola) We should throw exceptions here insead of piping errors
214
- Logger . logError ( " Unable to build URL for findRelease request " )
215
- return
216
- }
217
- let compositeBinaryId = CompositeBinaryId (
218
+ let urlString = buildFindReleaseUrl (
219
+ projectNumber: app. options. gcmSenderID,
220
+ identifier: identifier!,
218
221
displayVersion: displayVersion,
219
222
buildVersion: buildVersion,
220
223
codeHash: codeHash
221
224
)
222
- guard let compositeBinaryIdData = try ? JSONEncoder ( ) . encode ( compositeBinaryId) else {
223
- // TODO(tundeagboola) We should throw exceptions here insead of piping errors
224
- Logger . logError ( " Unable to build URL for findRelease request " )
225
- return
226
- }
227
- urlComponents. queryItems = [ URLQueryItem (
228
- name: Strings . compositeBinaryIdQueryParamName,
229
- value: String ( data: compositeBinaryIdData, encoding: . utf8)
230
- ) ]
231
- guard let url = urlComponents. url else {
232
- // TODO(tundeagboola) We should throw exceptions here insead of piping errors
233
- Logger . logError ( " Unable to build URL for findRelease request " )
234
- return
235
- }
236
225
let request = self . createHttpRequest (
237
226
app: app,
238
227
method: Strings . httpGet,
239
- url: url ,
228
+ url: URL ( string : urlString ) ,
240
229
authTokenResult: authTokenResult!
241
230
)
242
231
let findReleaseDataTask = urlSession
@@ -292,9 +281,9 @@ struct CreateFeedbackReportRequest: Codable {
292
281
url: urlString,
293
282
authTokenResult: authTokenResult
294
283
)
295
- let createFeedbackRequest =
296
- CreateFeedbackReportRequest ( feedbackReport: FeedbackReport ( text: feedbackText) )
297
- request. httpBody = try ? JSONEncoder ( ) . encode ( createFeedbackRequest )
284
+ request . setValue ( Strings . jsonContentType , forHTTPHeaderField : Strings . contentTypeHeader )
285
+ let feedbackReport = FeedbackReport ( text: feedbackText)
286
+ request. httpBody = try ? JSONEncoder ( ) . encode ( feedbackReport )
298
287
let createFeedbackTask = urlSession
299
288
. dataTask ( with: request as URLRequest ) { data, response, error in
300
289
var fadError = error
@@ -370,6 +359,8 @@ struct CreateFeedbackReportRequest: Codable {
370
359
Strings . GoogleUploadFileNameHeader,
371
360
forHTTPHeaderField: Strings . GoogleUploadFileName
372
361
)
362
+ // TODO(tundeagboola) Add support for jpegs
363
+ request. httpBody = image. pngData ( )
373
364
let uploadImageTask = urlSession
374
365
. dataTask ( with: request as URLRequest ) { data, response, error in
375
366
var fadError = error
0 commit comments