Aktualizace aplikace Xamarin.iOS na pozadí

Aktualizace na pozadí je proces probuzení aplikace, která je pozastavená nebo není spuštěná, a aktualizuje ji novým obsahem. iOS nabízí tři možnosti aktualizace obsahu na pozadí:

  1. Služba monitorování oblastí a významné změny polohy – rozhraní API podporující polohu aktivují aktualizace na pozadí na základě změn v umístění uživatele. Tato rozhraní API je možné použít s uvážením k aktualizaci obsahu v aplikacích s iOSem 6, které nejsou založené na umístění, kde nejsou k dispozici další možnosti.
  2. Načítání na pozadí (iOS 7+) – dočasný přístup k aktualizaci nekritického obsahu, který se často aktualizuje .
  3. Vzdálená oznámení (iOS 7+) – Aplikace, které přijímají nabízená oznámení, můžou pomocí oznámení aktivovat aktualizace obsahu na pozadí. Tuto metodu lze použít k aktualizaci důležitého časově citlivého obsahu, který se aktualizuje sporadicky .

Základní informace o těchto možnostech najdete v následujících částech.

Monitorování oblastí a významné změny umístění

iOS poskytuje dvě rozhraní API podporující umístění s možnostmi na pozadí:

  1. Monitorování oblastí je proces nastavení oblastí s hranicemi a probuzení zařízení, když uživatel vstoupí do oblasti nebo ji ukončí. Oblasti jsou kruhové a můžou mít různou velikost. Když uživatel překročí hranici oblasti, zařízení se probouzí, aby událost zvládlo, obvykle aktivací oznámení nebo zahájením úkolu. Monitorování oblastí vyžaduje GPS a zvyšuje využití baterie a dat.
  2. Služba významných změn polohy je jednodušší a úspora energie dostupná pro zařízení s mobilními rádiy. Aplikace, která naslouchá významným změnám polohy, bude upozorněna, když zařízení přepne věže buněk. Tuto službu lze použít k probuzení pozastavené nebo ukončené aplikace a poskytuje příležitost ke kontrole nového obsahu na pozadí. Aktivita na pozadí je omezená na přibližně 10 sekund, pokud není spárovaná s úlohou na pozadí .

Aplikace nepotřebuje umístění UIBackgroundMode pro použití těchto rozhraní API pracujících s umístěním. Vzhledem k tomu, že iOS nesleduje typy úloh, které se můžou spustit, když se zařízení probouzejí změnami v umístění uživatele, poskytují tato rozhraní API alternativní řešení pro aktualizaci obsahu na pozadí v iOSu 6. Mějte na paměti, že aktivace aktualizací na pozadí pomocí rozhraní API založených na poloze bude kreslit na prostředky zařízení a může zmást uživatele, kteří nerozumí tomu, proč aplikace vyžaduje přístup ke své poloze. Při implementaci monitorování oblastí nebo významných změn umístění pro zpracování na pozadí v aplikacích, které ještě nepoužívají rozhraní API pro umístění, použijte volitelné nastavení.

Aplikace využívající monitorování polohy pro zpracování na pozadí zpřístupňují chybu v iOSu 6: pokud se potřeby aplikace nevejdou do kategorie potřebné na pozadí, má omezené možnosti na pozadí. Díky zavedení dvou nových rozhraní API poskytuje iOS 7 (a vyšší) možnosti načítání na pozadí a vzdálených oznámení pro více aplikací. Následující dvě části představují tato nová rozhraní API.

Načtení na pozadí (iOS 7 a vyšší)

V iOSu 6 potřebovala aplikace zadávat do popředí čas načíst nový obsah a krátce prezentovat uživatele s obsahem, který už viděli. Načtení na pozadí umožňuje aplikacím načíst nová data před spuštěním aplikace uživatelem a poskytnout uživateli nejaktuálnější obsah.

Pokud chcete implementovat načítání na pozadí, upravte soubor Info.plist a zaškrtněte políčka Povolit režimy pozadí a Načítání pozadí:

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

V dalším AppDelegatekroku přepište metodu FinishedLaunching tak, aby nastavil minimální interval načítání. V tomto příkladu necháme operační systém rozhodnout, jak často se má načítat nový obsah:

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

Nakonec proveďte načtení přepsáním PerformFetch metody v souboru AppDelegatea předáním obslužné rutiny dokončení. Obslužná rutina dokončení je delegát, který přebírá 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);
}

Po dokončení aktualizace obsahu dáme operačnímu systému vědět voláním obslužné rutiny dokončení s odpovídajícím stavem. iOS nabízí tři možnosti pro stav obslužné rutiny dokončení:

  1. UIBackgroundFetchResult.NewData – Volá se při načtení nového obsahu a aplikace byla aktualizována.
  2. UIBackgroundFetchResult.NoData – Volá se při načítání nového obsahu, ale není k dispozici žádný obsah.
  3. UIBackgroundFetchResult.Failed - Užitečné pro zpracování chyb, je volána, když se načtení nepodařilo projít.

Aplikace používající funkci Načítání na pozadí můžou volat, aby aktualizovaly uživatelské rozhraní z pozadí. Když uživatel aplikaci otevře, uživatelské rozhraní bude aktuální a zobrazí nový obsah. Tím se také aktualizuje snímek přepínače aplikací aplikace, aby uživatel viděl, kdy má aplikace nový obsah.

Důležité

Po PerformFetch zavolání aplikace má přibližně 30 sekund, aby se zahájilo stahování nového obsahu a volání bloku obslužné rutiny dokončení. Pokud to trvá příliš dlouho, aplikace se ukončí. Při stahování médií nebo jiných velkých souborů zvažte použití funkce Načítání na pozadí se službou Pro přenos pozadí.

BackgroundFetchInterval

Ve výše uvedeném vzorovém kódu necháme operační systém rozhodnout, jak často se má načíst nový obsah nastavením minimálního intervalu načtení na BackgroundFetchIntervalMinimumhodnotu . iOS nabízí tři možnosti pro interval načítání:

  1. BackgroundFetchIntervalNever - Řekněte systému, aby nikdy nenačítá nový obsah. Tuto možnost použijte k vypnutí načítání v určitých situacích, například v případě, že uživatel není přihlášený. Toto je výchozí hodnota pro interval načítání.
  2. BackgroundFetchIntervalMinimum - Nechte systém rozhodnout, jak často se má načítat na základě vzorů uživatelů, životnosti baterie, využití dat a potřeb jiných aplikací.
  3. BackgroundFetchIntervalCustom – Pokud víte, jak často se obsah aplikace aktualizuje, můžete po každém načtení zadat interval "spánku", během kterého bude aplikace znemožněna načítání nového obsahu. Jakmile je tento interval vzhůru, systém určí, kdy se má načíst obsah.

Oba BackgroundFetchIntervalMinimum systémy se BackgroundFetchIntervalCustom spoléhají na plánování načítání. Tento interval je dynamický a přizpůsobuje se potřebám zařízení a také zvykům jednotlivých uživatelů. Pokud například jeden uživatel každé ráno kontroluje aplikaci a každý hodinu další kontroluje, iOS zajistí, aby byl obsah aktuální pro oba uživatele pokaždé, když aplikaci otevřou.

Pro aplikace, které se často aktualizují nekriticky, by se mělo použít načítání na pozadí. U aplikací s důležitými aktualizacemi by se měla používat vzdálená oznámení. Vzdálená oznámení jsou založená na načítání na pozadí a sdílejí stejnou obslužnou rutinu dokončení. Dále se podíváme na vzdálená oznámení.

Vzdálená oznámení (iOS 7 a novější)

Nabízená oznámení jsou zprávy JSON odesílané od poskytovatele do zařízení prostřednictvím služby Apple Push Notification (APNs).

Příchozí nabízená oznámení v iOSu 6 oznámí systému upozornění, že se v aplikaci stalo něco zajímavého. Kliknutím na oznámení se aplikace přetáhne z pozastaveného nebo ukončeného stavu a aplikace začne aktualizovat obsah. iOS 7 (a vyšší) rozšiřuje běžná nabízená oznámení tím, že aplikacím před oznámením uživatele umožní aktualizovat obsah na pozadí, aby uživatel mohl aplikaci otevřít a prezentovat s novým obsahem okamžitě.

Pokud chcete implementovat vzdálená oznámení, upravte soubor Info.plist a zaškrtněte políčka Povolit režimy pozadí a Vzdálená oznámení :

Background Mode set to Enable Background Modes and Remote notifications

Dále nastavte content-available příznak samotného nabízeného oznámení na hodnotu 1. Aplikace tak před zobrazením výstrahy informuje o načtení nového obsahu:

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

V AppDelegate přepište metoduDidReceiveRemoteNotification, aby zkontrolovala datovou část oznámení pro dostupný obsah, a zavolejte příslušný blok obslužné rutiny dokončení:

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

Vzdálená oznámení by se měla používat pro občasné aktualizace obsahu, který je pro funkčnost aplikace zásadní. Další informace o vzdálených oznámeních najdete v příručce Xamarin Push Notifications v iOSu .

Důležité

Vzhledem k tomu, že mechanismus aktualizace ve vzdálených oznámeních je založen na načtení na pozadí, musí aplikace začít stahovat nový obsah a volat blok obslužné rutiny dokončení do 30 sekund od přijetí oznámení, nebo iOS ukončí aplikaci. Při stahování médií nebo jiných velkých souborů na pozadí zvažte spárování vzdálených oznámení se službou Pro přenos pozadí.

Bezobslužná vzdálená oznámení

Vzdálená oznámení představují jednoduchý způsob, jak informovat aplikace o aktualizacích a začít načítat nový obsah, ale existují případy, kdy nemusíme uživatele informovat, že se něco změnilo. Pokud například uživatel označí soubor příznakem pro synchronizaci, nemusíme ho při každé aktualizaci souboru informovat. Synchronizace souborů není překvapivá událost, ani nevyžaduje okamžitou pozornost uživatele. Uživatelé očekávají, že soubor bude aktuální, když ho otevřou.

V případech podobných výše umožňuje iOS odesílat nabízená oznámení bez upozornění. Pokud chcete běžné oznámení převést na tiché, jednoduše odeberte upozornění z datové části oznámení:

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

Omezení rychlosti

Největší rozdíl mezi normálními a tichými oznámeními z pohledu vývojáře je, že tiché nabízení jsou omezené rychlostí. Služba APN zpozdí doručení tichých nabízených oznámení do zařízení, pokud se rychlost nabízení příliš zvýší. To zajistí, že aplikace nevyprázdní prostředky zařízení s příliš mnoha tichými oznámeními.

ApNs ale umožní bezobslužná oznámení "piggyback" spolu s normálním vzdáleným oznámením nebo udržováním odezvy. Vzhledem k tomu, že běžná oznámení nejsou omezená rychlostí, je možné je použít k nabízení tichých oznámení z APN do zařízení, jak je znázorněno v následujícím diagramu:

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

Důležité

Apple podporuje vývojáře, aby odesílali bezobslužná nabízená oznámení, kdykoli aplikace vyžaduje, a nechala apNs naplánovat doručení.

V této části jsme probrali různé možnosti aktualizace obsahu na pozadí pro spouštění úloh, které se nevejdou do kategorie potřebné na pozadí. Teď se podívejme na některá z těchto rozhraní API v akci.

Další: Část 4 – Návody pro iOS na pozadí