Фоновая выборка не выполняется на устройстве
У меня есть приложение Xamarin IOS, для которого я хочу реализовать фоновую выборку. Когда я запускаю его на симуляторе, он работает как положено. Но на устройстве это никогда не выполняется.
В AppDelegate "FinishedLaunching" я установил минимальный интервал:
UIApplication.SharedApplication.SetMinimumBackgroundFetchInterval(UIApplication.BackgroundFetchIntervalMinimum);
и я реализовал метод выполнения выборки:
public override async void PerformFetch(UIApplication application,
Action<UIBackgroundFetchResult> completionHandler)
{
UIBackgroundFetchResult fetchResult;
try
{
Debug.Write("Start background fetch.");
bool canResolve = Mvx.CanResolve<IBusinessFacade>();
if (!canResolve) return;
var businessFacade = Mvx.Resolve<IBusinessFacade>();
//Nach Zeitstempel neu laden
var reloadChangesResult = await businessFacade.ReloadByTimestamp();
//Aktualisieren der Kontakte
ReloadContactsFromAddressBook();
var resultReload = await businessFacade.ReloadContacts();
//Ich Kontakt neu laden und bei Änderung Service notifizieren
var reloadMeResult = await businessFacade.ReloadMeContact();
if (reloadMeResult.Success)
{
if (reloadMeResult.Result.AnyValueChanged || reloadMeResult.Result.HashChanged)
{
var updateMeResult = await businessFacade.UpdateMeContactToService();
}
}
//Notifikationen laden
var reloadRequestsResult = await businessFacade.ReloadRequests();
//Pusk aktualisieren
var pushResult = await businessFacade.RegisterPush();
// check if there where new data downloaded.
if (reloadChangesResult.Result || reloadRequestsResult.Result)
{
fetchResult = UIBackgroundFetchResult.NewData;
}
else
{
fetchResult = UIBackgroundFetchResult.NoData;
}
}
catch (Exception ex)
{
Debug.Write(ex);
Analytics.TrackEvent("Exception: Background Fetch", new Dictionary<string, string>
{
{"Exception", ex.ToString()}
});
fetchResult = UIBackgroundFetchResult.Failed;
}
completionHandler(fetchResult);
}
private async void ReloadContactsFromAddressBook()
{
var addressBook = new AddressBookService();
var dbFactory = new DbFactory();
var contactDataService = new ContactDataService(new ContactRepository(dbFactory), new SettingsAdapter(new Settings()));
var phonebookContacts = addressBook.GetAllContacts();
HashSet<string> contacts = new HashSet<string>((await contactDataService.GetAllContacts()).Select(r => r.IdAddressbook));
var listNewContacts = phonebookContacts.Where(c => !contacts.Contains(c.AddressBookId));
foreach (var contact in listNewContacts)
{
ContactEntity ce = new ContactEntity
{
IdAddressbook = contact.AddressBookId,
DisplayName = contact.DisplayName,
IdService = 0,
DisplayImage = contact.Image,
DisplayBirthDate = contact.Events.FirstOrDefault(r => r.EventType == Models.Enums.EventType.Birthday)?.EventDate ?? DateTime.MinValue,
DisplayPhoneNumber = string.Empty
};
await contactDataService.SaveContact(ce);
}
}
Фоновые режимы включены в моем info.plist:
<key>UIBackgroundModes</key>
<array>
<string>fetch</string>
<string>remote-notification</string>
</array>
Я нацеливаюсь на IOS 10 и выше. Xamarin IOS Версия: 11.6.1.3
Что здесь может быть не так?