I’m trying to track the download progress of file with task.progress.obeserve, in PlayGround everything works correctly:
While in React Native, when calling from React Native UI to swift code, it does not invoke task.progress.observe:
@objc(downloadFileFromGoogleDrive:authHeader:savedEncryptedFileUri:withResolver:withRejecter:)
func downloadFileFromGoogleDrive(uri: String, authHeader: String, savedEncryptedFileUri: String, resolve: @escaping RCTPromiseResolveBlock, reject: @escaping RCTPromiseRejectBlock) -> Void {
guard let url = URL(string: uri) else {
reject("Invalid URL", nil, nil)
return
}
var urlRequest = URLRequest(url: url)
urlRequest.httpMethod = "GET"
urlRequest.setValue(authHeader, forHTTPHeaderField: "Authorization")
print("================================================")
let task = URLSession.shared.dataTask(with: urlRequest) {data, response, error in
if ((error) != nil) {
reject("request failed", error?.localizedDescription, error)
return
}
guard let httpResponse = response as? HTTPURLResponse, httpResponse.statusCode == 200 else {
reject("download failed", String(describing: response), nil)
return
}
guard let data = data else {
reject("no data received", nil, nil)
return
}
let url = URL(fileURLWithPath: savedEncryptedFileUri)
do {
try data.write(to: url)
resolve(true)
} catch {
reject("cannot load data", String(describing: response), nil)
}
}
let observation = task.progress.observe(.fractionCompleted) { progress, _ in
print(progress.fractionCompleted)
}
task.resume()
}