Wie erzwinge ich Hintergrund -Uploads mit Firebase -Speicher mit Swift?IOS

Programmierung für iOS
Anonymous
 Wie erzwinge ich Hintergrund -Uploads mit Firebase -Speicher mit Swift?

Post by Anonymous »

Ich lade kleine Dateien in Firebase Storage hoch, ungefähr 276 KB pro Stück. Die App kann eine kleine Handvoll dieser Uploads pro Tag aus dem Hintergrund durchführen. Das gewünschte Verhalten ist, dass wenn die App beschließt, die Uploads hochzuladen, und im Hintergrund beginnen und während die App im Hintergrund ist, ohne dass der Benutzer interagieren muss. < /P>
Mein aktueller Code ist dies. Diese Logik funktioniert, wenn sich Ihr Gerät unter guten Bedingungen befindet. Wenn Ihr Gerät jedoch gering ist oder auf Mobilfunkdaten ausgeführt wird, scheint das System den Hintergrund -Upload zu blockieren. < /P>

Code: Select all

    public func uploadAudioToFirebase(fileName: String, audioPath: URL, completion: @escaping (Result) -> Void) {
let storage = Storage.storage()
let storageRef = storage.reference()

let audioName = fileName + ".m4a"
let audioRef = storageRef.child("audios/" + audioName)

let metadata = StorageMetadata()
metadata.contentType = "audio/x-m4a"

audioRef.putFile(from: audioPath, metadata: metadata) { metadata, error in
if let error = error {
completion(.failure(error))
return
}

guard let uploadMetadata = metadata else {
completion(.failure(NSError(domain: "MetadataError", code: -1, userInfo: [NSLocalizedDescriptionKey: "No metadata available"])))
return
}

audioRef.downloadURL { (url, error) in
guard let downloadURL = url else {
completion(.failure(error!))
return
}

completion(.success(downloadURL.absoluteString))

}
}
}
< /code>
Zuerst habe ich versucht, noch kleinere Dateien zum Hochladen zu erstellen. Ich habe mit einer Datei mit einer Größe von 145 KB getestet, aber dies schien das Verhalten nicht zu ändern. Laut den Dokumenten wird das System jedoch automatisch diskretionär 
auf true festgelegt, wenn das Upload vom Hintergrund startet. Geben Sie die Kontrolle über das System zurück, um zu wählen, wann das Upload stattfindet. Aber soweit ich das erkennen kann, hat dies das gleiche Verhalten, als wäre es nicht da. < /P>

Code: Select all

    public func uploadAudioToFirebase(fileName: String, audioPath: URL, completion: @escaping (Result) -> Void) {
var taskId: UIBackgroundTaskIdentifier = .invalid
taskId = UIApplication.shared.beginBackgroundTask(withName: "AudioUpload") {
UIApplication.shared.endBackgroundTask(taskId)
taskId = .invalid
}

let storage = Storage.storage()
let storageRef = storage.reference()
let audioName = fileName + ".m4a"
let audioRef = storageRef.child("audios/\(audioName)")

let metadata = StorageMetadata()
metadata.contentType = "audio/x-m4a"

audioRef.putFile(from: audioPath, metadata: metadata) { metadata, error in
if let error = error {
completion(.failure(error))
if taskId != .invalid {
UIApplication.shared.endBackgroundTask(taskId)
}
return
}

audioRef.downloadURL { (url, error) in
if let error = error {
completion(.failure(error))
} else if let downloadURL = url {
completion(.success(downloadURL.absoluteString))
}

if taskId != .invalid {
UIApplication.shared.endBackgroundTask(taskId)
}
}
}
}
Meine nächste Idee war es, den BGTaskScheduler mit bgAppreFreshtask zu verwenden. Aber ich weiß nicht, ob dies das aktuelle Verhalten tatsächlich verändert. Soweit ich BgAppReFreshtask angeben kann, wird das System auswählen, wann regelmäßig kleine Aufgaben erledigt werden sollen. Was ich denke, wird die gleiche Zeit sein, die es bereits entscheidet, dh wenn es eine WLAN und eine gute Akkulaufzeit hat. Es scheint bereits eine Art Hintergrundverwaltung zu erstellen. Es kann möglicherweise bereits den BGTaskScheduler verwenden. Ich habe gelesen, dass Sie möglicherweise stille Push -Benachrichtigungen für so etwas verwenden können? Dies hat jedoch Einschränkung und ich bin mir nicht sicher, wie gut es mit einem Firebase -Upload funktioniert.>

Quick Reply

Change Text Case: 
   
  • Similar Topics
    Replies
    Views
    Last post