Freigeben über


Aktualisieren einer Xamarin.iOS-App im Hintergrund

Die Hintergrundaktualisierung ist der Vorgang, bei dem eine Anwendung aktiviert wird, die angehalten wird oder nicht ausgeführt wird, und sie mit neuen Inhalten aktualisiert wird. iOS bietet drei Optionen zum Aktualisieren von Inhalten im Hintergrund:

  1. Region Monitoring and Significant Location Changes Service : Standortbezogene APIs lösen Hintergrundupdates basierend auf Änderungen am Standort des Benutzers aus. Diese APIs können diskret verwendet werden, um Inhalte in nicht standortbasierten iOS 6-Anwendungen zu aktualisieren, in denen keine anderen Optionen verfügbar sind.
  2. Hintergrundabruf (iOS 7+): Ein zeitlicher Ansatz zum Aktualisieren nicht kritischer Inhalte, die häufig aktualisiert werden .
  3. Remotebenachrichtigungen (iOS 7+): Anwendungen, die Pushbenachrichtigungen empfangen, können die Benachrichtigungen verwenden, um Aktualisierungen von Hintergrundinhalten auszulösen. Diese Methode kann verwendet werden , um wichtige, zeitabhängige Inhalte zu aktualisieren, die sporadisch aktualisiert werden .

In den folgenden Abschnitten werden die Grundlagen dieser Optionen behandelt.

Regionsüberwachung und wichtige Standortänderungen

iOS bietet zwei standortbezogene APIs mit Hintergrundfunktionen:

  1. Die Regionsüberwachung ist der Prozess zum Einrichten von Regionen mit Grenzen und zum Aufwecken des Geräts, wenn der Benutzer eine Region betritt oder verlässt. Regionen sind kreisförmig und können unterschiedlich groß sein. Wenn der Benutzer eine Regionsgrenze überschreitet, wird das Gerät aktiviert, um das Ereignis zu behandeln. In der Regel wird eine Benachrichtigung ausgelöst oder eine Aufgabe gestartet. Die Regionsüberwachung erfordert GPS und erhöht die Akku- und Datennutzung.
  2. Der Dienst für signifikante Standortänderungen ist eine einfachere, stromsparende Option, die für Geräte mit Mobilfunkgeräten verfügbar ist. Eine Anwendung, die auf wesentliche Standortänderungen lauscht, wird benachrichtigt, wenn das Gerät die Mobilfunkmasten wechselt. Dieser Dienst kann verwendet werden, um eine angehaltene oder beendete Anwendung zu reaktivieren, und bietet die Möglichkeit, im Hintergrund nach neuen Inhalten zu suchen. Die Hintergrundaktivität ist auf etwa 10 Sekunden beschränkt, es sei denn, sie wird mit einer Hintergrundaufgabe gekoppelt.

Eine Anwendung benötigt den Speicherort UIBackgroundMode nicht, um diese standortbasierten APIs zu verwenden. Da iOS die Arten von Aufgaben nicht nachverfolgt, die ausgeführt werden können, wenn das Gerät durch Änderungen am Standort des Benutzers geweckt wird, bieten diese APIs eine Umgebung zum Aktualisieren von Inhalten im Hintergrund unter iOS 6. Beachten Sie, dass das Auslösen von Hintergrundupdates mit standortbasierten APIs gerätebezogene Ressourcen bezieht und Benutzer verwirren kann, die nicht verstehen, warum eine Anwendung Zugriff auf ihren Standort benötigt. Verwenden Sie Diskretion beim Implementieren der Regionsüberwachung oder signifikanter Standortänderungen für die Hintergrundverarbeitung in Anwendungen, die noch nicht die Standort-APIs verwenden.

Apps, die die Standortüberwachung für die Hintergrundverarbeitung verwenden, machen einen Fehler in iOS 6 offen: Wenn die Anforderungen einer Anwendung nicht in eine im Hintergrund erforderliche Kategorie passen, verfügt sie über begrenzte Hintergrundoptionen. Mit der Einführung von zwei neuen APIs, Hintergrundabruf und Remotebenachrichtigungen, bietet iOS 7 (und höher) Hintergrundmöglichkeiten für weitere Anwendungen. In den nächsten beiden Abschnitten werden diese neuen APIs vorgestellt.

Hintergrundabruf (iOS 7 und höher)

In iOS 6 benötigte eine Anwendung, die in den Vordergrund eintritt, Zeit, um neue Inhalte zu laden und Benutzern kurz Inhalte zu präsentieren, die sie bereits gesehen haben. Mithilfe des Hintergrundabrufs können Anwendungen neue Daten laden, bevor ein Benutzer die Anwendung startet, und dem Benutzer den aktuellsten Inhalt bereitstellen.

Um den Hintergrundabruf zu implementieren, bearbeiten Sie Info.plist , und aktivieren Sie die Kontrollkästchen Hintergrundmodi undHintergrundabruf aktivieren:

Bearbeiten Sie info.plist, und aktivieren Sie die Kontrollkästchen Hintergrundmodi und Hintergrundabruf aktivieren.

Überschreiben Sie als Nächstes in die AppDelegate-Methode, FinishedLaunching um das minimale Abrufintervall festzulegen. In diesem Beispiel lassen wir das Betriebssystem entscheiden, wie oft neue Inhalte abgerufen werden sollen:

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

Führen Sie schließlich den Abruf aus, indem Sie die PerformFetch -Methode in überschreiben AppDelegateund einen Vervollständigungshandler übergeben. Der Vervollständigungshandler ist ein Delegat, der einen UIBackgroundFetchResultbenötigt:

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

Wenn wir mit dem Aktualisieren von Inhalten fertig sind, informieren wir das Betriebssystem darüber, indem wir den Vervollständigungshandler mit dem entsprechenden status aufrufen. iOS bietet drei Optionen für vervollständigungshandler status:

  1. UIBackgroundFetchResult.NewData – Wird aufgerufen, wenn neuer Inhalt abgerufen und die Anwendung aktualisiert wurde.
  2. UIBackgroundFetchResult.NoData – Wird aufgerufen, wenn der Abruf für neuen Inhalt ausgeführt wurde, aber kein Inhalt verfügbar ist.
  3. UIBackgroundFetchResult.Failed – Nützlich für die Fehlerbehandlung, wird dies aufgerufen, wenn der Abruf nicht ausgeführt werden konnte.

Anwendungen, die Den Hintergrundabruf verwenden, können Aufrufe tätigen, um die Benutzeroberfläche aus dem Hintergrund zu aktualisieren. Wenn der Benutzer die App öffnet, ist die Benutzeroberfläche auf dem neuesten Stand und zeigt neue Inhalte an. Dadurch wird auch die App Switcher-Momentaufnahme der Anwendung aktualisiert, sodass der Benutzer sehen kann, wann die Anwendung über neue Inhalte verfügt.

Wichtig

Nach dem PerformFetch Aufruf hat die Anwendung etwa 30 Sekunden Zeit, um den Download neuer Inhalte zu starten und den Vervollständigungshandlerblock aufzurufen. Wenn dies zu lange dauert, wird die App beendet. Erwägen Sie beim Herunterladen von Medien oder anderen großen Dateien die Verwendung des Hintergrundabrufs mit dem Hintergrundübertragungsdienst .

BackgroundFetchInterval

Im obigen Beispielcode lassen wir das Betriebssystem entscheiden, wie oft neue Inhalte abgerufen werden sollen, indem wir das mindeste Abrufintervall auf BackgroundFetchIntervalMinimumfestlegen. iOS bietet drei Optionen für das Abrufintervall:

  1. BackgroundFetchIntervalNever – Weisen Sie das System an, nie neue Inhalte abzurufen. Verwenden Sie dies, um den Abruf in bestimmten Situationen zu deaktivieren, z. B. wenn der Benutzer nicht angemeldet ist. Dies ist der Standardwert für das Abrufintervall.
  2. BackgroundFetchIntervalMinimum – Lassen Sie das System basierend auf Benutzermustern, Akkulaufzeit, Datennutzung und den Anforderungen anderer Anwendungen entscheiden, wie oft abgerufen werden soll.
  3. BackgroundFetchIntervalCustom - Wenn Sie wissen, wie oft der Inhalt einer Anwendung aktualisiert wird, können Sie nach jedem Abruf ein Ruhezustandsintervall angeben, in dem die Anwendung am Abrufen neuer Inhalte gehindert wird. Sobald dieses Intervall festgelegt ist, bestimmt das System, wann Inhalte abgerufen werden sollen.

BackgroundFetchIntervalCustom Sowohl als auch BackgroundFetchIntervalMinimum verlassen Sie sich auf das System, um Abrufe zu planen. Dieses Intervall ist dynamisch und passt sich den Anforderungen des Geräts sowie den Gewohnheiten des einzelnen Benutzers an. Wenn beispielsweise ein Benutzer eine Anwendung jeden Morgen und ein anderer jede Stunde überprüft, stellt iOS sicher, dass der Inhalt bei jedem Öffnen der Anwendung für beide Benutzer auf dem neuesten Stand ist.

Hintergrundabruf sollte für Anwendungen verwendet werden, die häufig mit nicht kritischen Inhalten aktualisiert werden. Für Anwendungen mit kritischen Updates sollten Remotebenachrichtigungen verwendet werden. Remotebenachrichtigungen basieren auf Hintergrundabrufen und verwenden denselben Vervollständigungshandler. Als Nächstes erfahren Sie mehr über Remotebenachrichtigungen.

Remotebenachrichtigungen (iOS 7 und höher)

Pushbenachrichtigungen sind JSON-Nachrichten, die von einem Anbieter über den Apple Push Notification Service (APNs) an ein Gerät gesendet werden.

In iOS 6 teilt eine eingehende Pushbenachrichtigung das System mit, den Benutzer darauf hinzuweisen, dass in einer Anwendung etwas Interessantes passiert ist. Durch Klicken auf die Benachrichtigung wird die Anwendung aus dem Zustand angehalten oder beendet, und die App beginnt mit der Aktualisierung des Inhalts. iOS 7 (und höher) erweitert normale Pushbenachrichtigungen, indem Anwendungen die Möglichkeit erhalten, Inhalte im Hintergrund zu aktualisieren, bevor sie den Benutzer benachrichtigen, sodass der Benutzer die Anwendung öffnen und sofort neue Inhalte erhalten kann.

Um Remotebenachrichtigungen zu implementieren, bearbeiten Sie Info.plist , und aktivieren Sie die Kontrollkästchen Hintergrundmodi und Remotebenachrichtigungen aktivieren:

Hintergrundmodus: Aktivieren von Hintergrundmodi und Remotebenachrichtigungen

Legen Sie als Nächstes das content-available Flag für die Pushbenachrichtigung selbst auf 1 fest. Dadurch kann die Anwendung neue Inhalte abrufen, bevor die Warnung angezeigt wird:

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

Überschreiben Sie im AppDelegate die -Methode, um die DidReceiveRemoteNotification Benachrichtigungsnutzlast auf verfügbaren Inhalt zu überprüfen, und rufen Sie den entsprechenden Vervollständigungshandlerblock auf:

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

Remotebenachrichtigungen sollten für seltene Updates mit Inhalten verwendet werden, die für die Funktionalität der Anwendung von entscheidender Bedeutung sind. Weitere Informationen zu Remotebenachrichtigungen finden Sie im Leitfaden zu Xamarin-Pushbenachrichtigungen in iOS .

Wichtig

Da der Updatemechanismus in Remotebenachrichtigungen auf hintergrundbasiertem Abruf basiert, muss die Anwendung den Download neuer Inhalte starten und den Vervollständigungshandlerblock innerhalb von 30 Sekunden nach Empfang der Benachrichtigung aufrufen, andernfalls beendet iOS die Anwendung. Erwägen Sie, Remotebenachrichtigungen mit dem Hintergrundübertragungsdienst zu koppeln, wenn Medien oder andere große Dateien im Hintergrund heruntergeladen werden.

Automatische Remotebenachrichtigungen

Remotebenachrichtigungen sind eine einfache Möglichkeit, Anwendungen über Updates zu benachrichtigen und das Abrufen neuer Inhalte zu starten, aber es gibt Fälle, in denen wir den Benutzer nicht darüber informieren müssen, dass sich etwas geändert hat. Wenn ein Benutzer beispielsweise eine Datei für die Synchronisierung kennzeichnet, müssen wir sie nicht jedes Mal benachrichtigen, wenn die Datei aktualisiert wird. Die Dateisynchronisierung ist kein überraschendes Ereignis und erfordert auch nicht die unmittelbare Aufmerksamkeit des Benutzers. Benutzer erwarten nur, dass die Datei beim Öffnen auf dem neuesten Stand ist.

In Fällen wie dem oben genannten ermöglicht iOS das automatische Senden von Pushbenachrichtigungen , d. h. ohne Warnung. Um eine reguläre Benachrichtigung in eine unbeaufsichtigte zu verwandeln, entfernen Sie einfach die Warnung aus der Benachrichtigungsnutzlast:

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

Begrenzung der Bandbreite

Der größte Unterschied zwischen normalen und unbeaufsichtigten Benachrichtigungen aus Entwicklersicht besteht darin, dass unbeaufsichtigte Pushvorgänge ratenarm sind. APNs verzögern die Übermittlung von automatischen Pushvorgängen an das Gerät, wenn die Pushrate zu hoch wird. Dadurch wird sichergestellt, dass Anwendungen Geräteressourcen nicht mit zu vielen automatischen Benachrichtigungen belasten.

APNs lassen jedoch automatische Benachrichtigungen neben einer normalen Remotebenachrichtigung oder einer Keep-Alive-Antwort "huckepack" zu. Da reguläre Benachrichtigungen keine Ratenbegrenzung haben, können sie verwendet werden, um gespeicherte unbeaufsichtigte Benachrichtigungen von den APNs auf das Gerät zu pushen, wie im folgenden Diagramm veranschaulicht:

Regelmäßige Benachrichtigungen können verwendet werden, um gespeicherte unbeaufsichtigte Benachrichtigungen von den APNs an das Gerät zu pushen, wie in diesem Diagramm veranschaulicht.

Wichtig

Apple fordert Entwickler auf, automatische Pushbenachrichtigungen zu senden, wann immer die Anwendung es erfordert, und die APNs ihre Übermittlung planen zu lassen.

In diesem Abschnitt haben wir die verschiedenen Optionen zum Aktualisieren von Inhalten im Hintergrund behandelt, um Aufgaben auszuführen, die nicht in eine im Hintergrund erforderliche Kategorie passen. Nun sehen wir uns einige dieser APIs in Aktion an.

Weiter: Teil 4 – Exemplarische Vorgehensweisen für iOS-Hintergrundinformationen