У меня есть проект Xamarion iOS, и я обнаружил, что DidReceiveRemoteNotification () будет приостанавливать вызовы HttpClient.SendAsync, если он запускается из фона.
Использование VS 2017 Community на Win10 с удаленным подключением к MacMini + xCode /Моно и тестирование на iPhone7 @ 11.4.1.
Вот код:
public override async void DidReceiveRemoteNotification(UIApplication application, NSDictionary userInfo, Action<UIBackgroundFetchResult> completionHandler)
{
Debug.WriteLine("Calling getMyRestData()");
getMyRestData();
Debug.WriteLine("Completed getMyRestData()");
completionHandler(UIBackgroundFetchResult.NewData);
}
public async void getMyRestData()
{
var request = new HttpRequestMessage(HttpMethod.Get, "https://www.yahoo.com");
HttpClient client = new HttpClient();
Debug.WriteLine("getRestTest send request");
var response = await client.SendAsync(request);
Debug.WriteLine("getRestTest got request ");
}
Push-уведомление молчит, как указано ниже: {"aps": {"content-available": 1}}
С приложением на переднем плане, я получаю ожидаемые результаты в представлении Отладка
[0:] Calling getMyRestData()
[0:] getRestTest send request
[0:] Completed getMyRestData()
[0:] getRestTest got request
Однако, с приложением в фоновом режиме, хотя DidReceiveRemoteNotification запускается,он приостанавливает вызов HttpClient.sendAsync, результаты в представлении «Отладка»:
[0:] Calling getMyRestData()
[0:] getRestTest send request
[0:] Completed getMyRestData()
И если затем я возвращаю приложение на передний план, вызов завершается:
Thread started: <Thread Pool> #12
[0:] getRestTest got request
Это поведениевсе происходит менее чем за 30 секунд.
Вопрос: это ожидаемое поведение?В идеале я хотел бы, чтобы приложение получало данные из API Rest и обновляло базу данных sqlite при получении push-уведомления.
Я копал несколько дней и нашел только один похожий вопрос:рекомендуется использовать beginBackgroundTask * + endBackgroundTask.Я попытался обернуть getMyRestData () в фоновую задачу, но проблема осталась.
Буду признателен за любые указатели.