Xamarin iOS DidReceiveRemoteNotification приостанавливает вызовы HttpClient SendAsync () - PullRequest
0 голосов
/ 07 октября 2018

У меня есть проект 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 () в фоновую задачу, но проблема осталась.

Буду признателен за любые указатели.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...