Загрузка фона iOS останавливается через 30 секунд, когда приложение находится в фоновом режиме - резюме, когда приложениIOS

Программируем под IOS
Ответить
Anonymous
 Загрузка фона iOS останавливается через 30 секунд, когда приложение находится в фоновом режиме - резюме, когда приложени

Сообщение Anonymous »

Я работаю над проектом .NET MAUI и внедряю загрузки фоновых файлов в моем приложении для iOS, используя NSURLSession с фоновой конфигурацией. Я могу начать загрузку, и она продолжается в течение 30 секунд после того, как приложение переходит на задний план. Однако после этого загрузка заполучивает. Когда я возвращаю приложение обратно на передний план, загрузка возобновляется и завершается.

Код: Выделить всё

public class BackgroundUploadDelegate : NSUrlSessionDataDelegate
{
private SemaphoreSlim _semaphore;
public SemaphoreSlim Semaphore { get; set; }

private NSMutableData _responseData;
public NSMutableData ResponseData { get; set; }

public override void DidReceiveData(NSUrlSession session, NSUrlSessionDataTask dataTask, NSData data)
{
_responseData = new NSMutableData();
_responseData.AppendData(data);
}

public override void DidCompleteWithError(NSUrlSession session, NSUrlSessionTask task, NSError error)
{
if (error != null)
{
Console.WriteLine("Error: " + error.LocalizedDescription);
RetryTask(task);
}
Semaphore?.Release();
}

private void RetryTask(NSUrlSessionTask task)
{
task.Resume();
}

public override void DidFinishEventsForBackgroundSession(NSUrlSession session)
{
var appDelegate = UIApplication.SharedApplication.Delegate as AppDelegate;
appDelegate?.BackgroundSessionCompletionHandler?.Invoke();
}
}
< /code>
Конфигурация сеанса: < /p>
   var config = NSUrlSessionConfiguration.CreateBackgroundSessionConfiguration("backgroundUpload");
config.Discretionary = false;
config.SessionSendsLaunchEvents = true;
config.WaitsForConnectivity = true;
config.AllowsCellularAccess = true;
config.AllowsExpensiveNetworkAccess = true;
config.AllowsConstrainedNetworkAccess = true;

NSOperationQueue backgroundQueue = new NSOperationQueue
{
MaxConcurrentOperationCount = 3,
Name = "backgroundUpload"
};

var delegateInstance = new BackgroundUploadDelegate();
var session = NSUrlSession.FromConfiguration(config, delegateInstance, backgroundQueue);
< /code>
Отправка запроса: < /p>
((BackgroundUploadDelegate)session.Delegate).Semaphore = new SemaphoreSlim(0);
var uploadTask = session.CreateUploadTask(request);
uploadTask.Resume();
((BackgroundUploadDelegate)session.Delegate).Semaphore.Wait();
Это то, что мне нужно изменить в конфигурации или делегате?

Подробнее здесь: https://stackoverflow.com/questions/795 ... nd-resumes
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «IOS»