Udostępnij za pośrednictwem


Aktualizowanie aplikacji platformy Xamarin.iOS w tle

Odświeżanie w tle to proces przebudzenia aplikacji, która jest zawieszona lub nie jest uruchomiona, i aktualizuje ją przy użyciu nowej zawartości. System iOS udostępnia trzy opcje odświeżania zawartości w tle:

  1. Monitorowanie regionów i usługa istotnych zmian lokalizacji — interfejsy API obsługujące lokalizację wyzwalają aktualizacje w tle na podstawie zmian w lokalizacji użytkownika. Te interfejsy API mogą być używane z swobodą odświeżania zawartości w aplikacjach systemu iOS 6 opartych na lokalizacji, gdzie inne opcje nie są dostępne.
  2. Pobieranie w tle (iOS 7+) — tymczasowe podejście do odświeżania niekrytycznej zawartości, która często aktualizuje element .
  3. Powiadomienia zdalne (iOS 7+) — aplikacje odbierające powiadomienia wypychane mogą używać powiadomień do wyzwalania odświeżeń zawartości w tle. Ta metoda może służyć do aktualizowania przy użyciu ważnej, wrażliwej na czas zawartości, która sporadycznie aktualizuje element .

W poniższych sekcjach opisano podstawy tych opcji.

Monitorowanie regionów i istotne zmiany lokalizacji

System iOS udostępnia dwa interfejsy API obsługujące lokalizację z funkcjami w tle:

  1. Monitorowanie regionów to proces konfigurowania regionów z granicami i przebudzenie urządzenia po wejściu lub wyjściu z regionu. Regiony są cykliczne i mogą mieć różny rozmiar. Gdy użytkownik przekroczy granicę regionu, urządzenie wznawia się w celu obsługi zdarzenia, zwykle przez wyzwolenie powiadomienia lub rozpoczęcie zadania. Monitorowanie regionów wymaga GPS i zwiększa zużycie baterii i danych.
  2. Usługa Istotne zmiany lokalizacji to prostsza opcja oszczędzania energii dostępna dla urządzeń z radiami komórkowymi. Aplikacja nasłuchuje znaczących zmian lokalizacji zostanie powiadomiona, gdy urządzenie przełącza wieże komórek. Ta usługa może służyć do wznawiania zawieszonej lub zakończonej aplikacji i umożliwia sprawdzenie nowej zawartości w tle. Działanie w tle jest ograniczone do około 10 sekund, chyba że jest sparowane z zadaniem w tle .

Aplikacja nie potrzebuje lokalizacji UIBackgroundMode do korzystania z tych interfejsów API obsługujących lokalizację. Ponieważ system iOS nie śledzi typów zadań, które mogą być uruchamiane po przebudzeniu urządzenia przez zmiany w lokalizacji użytkownika, te interfejsy API zapewniają obejście umożliwiające aktualizowanie zawartości w tle w systemie iOS 6. Należy pamiętać, że wyzwalanie aktualizacji w tle za pomocą interfejsów API opartych na lokalizacji będzie czerpać z zasobów urządzenia i może mylić użytkowników, którzy nie rozumieją, dlaczego aplikacja wymaga dostępu do ich lokalizacji. Użyj uznania podczas implementowania monitorowania regionów lub znaczących zmian lokalizacji na potrzeby przetwarzania w tle w aplikacjach, które nie korzystają już z interfejsów API lokalizacji.

Aplikacje korzystające z monitorowania lokalizacji na potrzeby przetwarzania w tle uwidaczniają wadę w systemie iOS 6: jeśli potrzeby aplikacji nie pasują do kategorii niezbędnej w tle, ma ona ograniczone opcje w tle. Wraz z wprowadzeniem dwóch nowych interfejsów API pobieranie w tle i zdalne powiadomienia, system iOS 7 (i nowsze) zapewnia możliwości korzystania z dodatkowych aplikacji w tle. W kolejnych dwóch sekcjach przedstawiono te nowe interfejsy API.

Pobieranie w tle (system iOS 7 i nowsze)

W systemie iOS 6 aplikacja wprowadzająca pierwszy plan potrzebowała czasu na załadowanie nowej zawartości, krótko przedstawiając użytkowników z zawartością, którą już widzieli. Pobieranie w tle umożliwia aplikacjom ładowanie nowych danych przed uruchomieniem aplikacji przez użytkownika i udostępnienie użytkownikowi najbardziej aktualnej zawartości.

Aby zaimplementować pobieranie w tle, zmodyfikuj plik Info.plist i zaznacz pola wyboru Włącz tryby tła i Pobieranie tła:

Edit the Info.plist and check the Enable Background Modes and Background Fetch check boxes

Następnie w metodzie AppDelegatezastąp metodę FinishedLaunching , aby ustawić minimalny interwał pobierania. W tym przykładzie pozwolimy systemowi operacyjnemu zdecydować, jak często pobierać nową zawartość:

public override bool FinishedLaunching (UIApplication application, NSDictionary launchOptions)
{
  UIApplication.SharedApplication.SetMinimumBackgroundFetchInterval (UIApplication.BackgroundFetchIntervalMinimum);
  return true;
}

Na koniec wykonaj pobieranie, przesłaniając metodę PerformFetch w AppDelegatepliku i przekazując procedurę obsługi uzupełniania. Procedura obsługi uzupełniania to delegat, który przyjmuje element UIBackgroundFetchResult:

public override void PerformFetch (UIApplication application, Action<UIBackgroundFetchResult> completionHandler)
{
  // Check for new data, and display it
  ...
  
  // Inform system of fetch results
  completionHandler (UIBackgroundFetchResult.NewData);
}

Gdy skończymy aktualizować zawartość, powiadomimy system operacyjny, wywołując procedurę obsługi uzupełniania z odpowiednim stanem. System iOS oferuje trzy opcje stanu procedury obsługi ukończenia:

  1. UIBackgroundFetchResult.NewData — Wywoływana po pobraniu nowej zawartości, a aplikacja została zaktualizowana.
  2. UIBackgroundFetchResult.NoData - Wywoływane, gdy pobieranie nowej zawartości przechodziło, ale żadna zawartość nie jest dostępna.
  3. UIBackgroundFetchResult.Failed — Przydatne w przypadku obsługi błędów jest to wywoływane, gdy pobieranie nie mogło przejść.

Aplikacje korzystające z funkcji Pobierania w tle mogą wykonywać wywołania w celu zaktualizowania interfejsu użytkownika z poziomu tła. Gdy użytkownik otworzy aplikację, interfejs użytkownika będzie aktualny i wyświetla nową zawartość. Spowoduje to również zaktualizowanie migawki przełącznika aplikacji, aby użytkownik mógł zobaczyć, kiedy aplikacja ma nową zawartość.

Ważne

Po PerformFetch wywołaniu aplikacja ma około 30 sekund na rozpoczęcie pobierania nowej zawartości i wywołanie bloku obsługi uzupełniania. Jeśli będzie to trwać zbyt długo, aplikacja zostanie zakończona. Rozważ użycie funkcji Pobierania w tle z usługą transferu w tle podczas pobierania multimediów lub innych dużych plików.

BackgroundFetchInterval

W powyższym przykładowym kodzie pozwolimy systemowi operacyjnemu zdecydować, jak często pobierać nową zawartość, ustawiając minimalny interwał pobierania na BackgroundFetchIntervalMinimumwartość . System iOS oferuje trzy opcje interwału pobierania:

  1. BackgroundFetchIntervalNever - Poinformuj system, aby nigdy nie pobierał nowej zawartości. Użyj tej opcji, aby wyłączyć pobieranie w pewnych sytuacjach, na przykład wtedy, gdy użytkownik nie jest zalogowany. Jest to wartość domyślna dla interwału pobierania.
  2. BackgroundFetchIntervalMinimum — Pozwól systemowi zdecydować, jak często pobierać na podstawie wzorców użytkownika, żywotność baterii, użycie danych i potrzeby innych aplikacji.
  3. BackgroundFetchIntervalCustom — Jeśli wiesz, jak często zawartość aplikacji jest aktualizowana, możesz określić interwał "uśpienia" po każdym pobraniu, podczas którego aplikacja nie będzie mogła pobierać nowej zawartości. Po upływie tego interwału system określi, kiedy pobrać zawartość.

Zarówno BackgroundFetchIntervalMinimum system, jak i BackgroundFetchIntervalCustom polega na zaplanowaniu pobierania. Ten interwał jest dynamiczny, dostosowujący się do potrzeb urządzenia, a także nawyków poszczególnych użytkowników. Jeśli na przykład jeden użytkownik sprawdza aplikację codziennie rano, a drugi sprawdza co godzinę, system iOS zapewni, że zawartość jest aktualna dla obu użytkowników za każdym razem, gdy otworzy aplikację.

Pobieranie w tle powinno być używane dla aplikacji, które często aktualizują zawartość niekrytyczną. W przypadku aplikacji z aktualizacjami krytycznymi należy używać powiadomień zdalnych. Powiadomienia zdalne są oparte na pobieraniu w tle i współużytkują tę samą procedurę obsługi uzupełniania. Następnie przyjrzymy się zdalnym powiadomieniom.

Powiadomienia zdalne (system iOS 7 i nowsze)

Powiadomienia wypychane to komunikaty JSON wysyłane od dostawcy do urządzenia za pomocą usługi Apple Push Notification Service (APNs).

W systemie iOS 6 przychodzące powiadomienia wypychane informują system o powiadomieniu użytkownika, że coś interesującego wydarzyło się w aplikacji. Kliknięcie powiadomienia spowoduje ściągnięcie aplikacji ze stanu zawieszonego lub zakończonego, a aplikacja rozpocznie aktualizowanie zawartości. System iOS 7 (i nowsze) rozszerza zwykłe powiadomienia wypychane, dając aplikacjom szansę na aktualizację zawartości w tle przed powiadomieniem użytkownika, dzięki czemu użytkownik może otworzyć aplikację i natychmiast wyświetlić nową zawartość.

Aby zaimplementować powiadomienia zdalne, zmodyfikuj plik Info.plist i zaznacz pola wyboru Włącz tryby w tle i powiadomienia zdalne:

Background Mode set to Enable Background Modes and Remote notifications

Następnie ustaw flagę content-available powiadomienia wypychaną na wartość 1. Dzięki temu aplikacja będzie mogła pobrać nową zawartość przed wyświetleniem alertu:

'aps' {
  'content-available': 1,
  'alert': 'Something new has happened in your app!''
}

W aplikacji AppDelegate zastąpij metodę DidReceiveRemoteNotification , aby sprawdzić ładunek powiadomień pod kątem dostępnej zawartości i wywołać odpowiedni blok procedury obsługi uzupełniania:

public override void DidReceiveRemoteNotification (UIApplication application, NSDictionary userInfo, Action<UIBackgroundFetchResult> completionHandler)
{
  if([content-available]) {
    // fetch content
    completionHandler (UIBackgroundFetchResult.NewData);
  }
}

Powiadomienia zdalne powinny być używane do rzadko aktualizowania zawartości, która ma kluczowe znaczenie dla funkcjonalności aplikacji. Aby uzyskać więcej informacji na temat powiadomień zdalnych, zobacz Przewodnik dotyczący powiadomień wypychanych platformy Xamarin w systemie iOS .

Ważne

Ponieważ mechanizm aktualizacji w powiadomieniach zdalnych jest oparty na pobieraniu w tle, aplikacja musi rozpocząć pobieranie nowej zawartości i wywołać blok obsługi uzupełniania w ciągu 30 sekund od otrzymania powiadomienia lub system iOS zakończy aplikację. Rozważ parowanie powiadomień zdalnych z usługą transferu w tle podczas pobierania multimediów lub innych dużych plików w tle.

Dyskretne powiadomienia zdalne

Powiadomienia zdalne to prosty sposób powiadamiania aplikacji o aktualizacjach i rozpoczynania pobierania nowej zawartości, ale istnieją przypadki, w których nie musimy powiadamiać użytkownika o zmianie. Jeśli na przykład użytkownik flaguje plik do synchronizacji, nie musimy powiadamiać ich za każdym razem, gdy plik zostanie zaktualizowany. Synchronizacja plików nie jest zaskakującym zdarzeniem ani nie wymaga natychmiastowej uwagi użytkownika. Użytkownicy oczekują, że plik będzie aktualny po jego otwarciu.

W przypadku przypadków takich jak powyższy system iOS umożliwia dyskretne wysyłanie powiadomień wypychanych — czyli bez alertu. Aby przekształcić regularne powiadomienie w dyskretny, po prostu usuń alert z ładunku powiadomienia:

'aps' {
  'content-available': 1
}

Limity szybkości

Największą różnicą między normalnymi i dyskretnymi powiadomieniami z perspektywy dewelopera jest to, że dyskretne wypychania są ograniczone szybkością. Sieci APNs opóźnią dostarczanie dyskretnych wypychań do urządzenia, jeśli szybkość wypychania będzie zbyt wysoka. Ma to na celu zapewnienie, że aplikacje nie opróżniają zasobów urządzeń za pomocą zbyt wielu powiadomień dyskretnych.

Jednak usługa APNs pozwoli dyskretnym powiadomieniom "piggyback" obok normalnego powiadomienia zdalnego lub zachować żywą odpowiedź. Ponieważ regularne powiadomienia nie są ograniczone, mogą służyć do wypychania przechowywanych dyskretnych powiadomień z usługi APNs do urządzenia, jak pokazano na poniższym diagramie:

Regular notifications can be used to push stored silent notifications from the APNs to the device, as illustrated by this diagram

Ważne

Firma Apple zachęca deweloperów do wysyłania dyskretnych powiadomień wypychanych za każdym razem, gdy aplikacja wymaga, i pozwoli usłudze APNs zaplanować ich dostarczanie.

W tej sekcji omówiliśmy różne opcje odświeżania zawartości w tle w celu uruchamiania zadań, które nie mieszczą się w kategorii niezbędnej w tle. Teraz zobaczmy niektóre z tych interfejsów API w akcji.

Dalej: Część 4 — Przewodniki po tle dla systemu iOS