Teilen über


Einführung in proaktive Vorschläge in Xamarin.iOS

In diesem Artikel wird gezeigt, wie Sie proaktive Vorschläge in der Xamarin.iOS-App verwenden, um das Engagement zu fördern, indem das System hilfreiche Informationen proaktiv dem Benutzer präsentieren kann.

Neu bei iOS 10 präsentieren proaktive Vorschläge Nachrichtenmöglichkeiten für Benutzer, um mit einer Xamarin.iOS-App zu interagieren, indem sie dem Benutzer proaktiv hilfreiche Informationen zu geeigneten Zeiten proaktiv präsentieren.

iOS 10 bietet neue Möglichkeiten, die Interaktion mit der App zu fördern, indem das System dem Benutzer zu geeigneten Zeiten proaktiv hilfreiche Informationen präsentieren kann. Genau wie iOS 9 die Möglichkeit bietet, der App mithilfe von Spotlight, Handoff und Siri Suggestions tiefe Suche hinzuzufügen (siehe Neue Such-APIs), mit iOS 10 kann eine App Funktionen verfügbar machen, die dem Benutzer vom System an den folgenden Speicherorten präsentiert werden können:

  • Der App-Switcher
  • Der Sperrbildschirm
  • CarPlay
  • Maps
  • Siri-Interaktionen
  • QuickType-Vorschläge

Die App macht diese Funktionalität für das System verfügbar, indem eine Sammlung von Technologien wie NSUserActivity, Webmarkup, Core Spotlight, MapKit, Medienwiedergabe und UIKit verwendet wird. Darüber hinaus erhält die Siri-Integration durch die Bereitstellung von proaktiver Vorschlagsunterstützung für die App kostenlos eine tiefere Siri-Integration.

Standortbasierte Vorschläge

Neu bei iOS 10 enthält die NSUserActivity Klasse eine MapItem Eigenschaft, mit der der Entwickler Standortinformationen bereitstellen kann, die in anderen Kontexten verwendet werden können. Wenn die App beispielsweise Restaurantbewertungen anzeigt, kann der Entwickler die MapItem Eigenschaft auf den Standort des Restaurants festlegen, das der Benutzer in der App anzeigt. Wenn der Benutzer zur Karten App wechselt, ist der Standort des Restaurants automatisch verfügbar.

Wenn die App die App-Suche unterstützt, kann sie die neuen Adresskomponenten der CSSearchableItemAttributesSet Klasse verwenden, um Speicherorte anzugeben, die der Benutzer möglicherweise besuchen möchte. Durch Festlegen der MapItem Eigenschaft werden die anderen Eigenschaften automatisch ausgefüllt.

Zusätzlich zum Festlegen der Latitude Eigenschaften der Longitude Adresskomponente wird empfohlen, auch die App die und PhoneNumbers die NamedLocation Eigenschaften anzugeben, damit Siri einen Aufruf an den Standort initiieren kann.

Webmarkupbasierte Vorschläge

iOS 9 wurde hinzugefügt, um strukturierte Datenmarkups in die Website einzuschließen, die die Inhalte anreichert, die Benutzer in Spotlight- und Safari-Suchergebnissen sehen (siehe Suche mit Webmarkup). iOS 10 bietet die Möglichkeit, standortbasiertes Markup (z . B. PostalAddress gemäß Schema.org) einzuschließen, um die Benutzererfahrung weiter zu verbessern. Wenn ein Benutzer beispielsweise eine auf der Website markierte Seite anzeigt, kann das System denselben Speicherort vorschlagen, wenn er Karten öffnet.

Textbasierte Vorschläge

UIKit wurde in iOS 10 um die TextContentType-Eigenschaft der UITextInputTraits-Klasse erweitert, um die semantische Bedeutung des Inhalts in einem Textbereich anzugeben. Mit diesen Informationen kann das System in der Regel automatisch den entsprechenden Tastaturtyp auswählen, AutoKorrekturvorschläge verbessern und Informationen aus anderen Apps und Websites proaktiv integrieren.

Wenn der Benutzer beispielsweise Text in ein Textfeld eingibt, das markiert UITextContentType.FullStreetAddressist, kann das System das Automatische Ausfüllen des Felds mit der Position vorschlagen, die der Benutzer kürzlich angezeigt hat.

Medienbasierte Vorschläge

Wenn die App Medien mit der MPPlayableContentManager-API wiederzugeben, ermöglicht iOS 10 Benutzern das Anzeigen des Albumbilds und die Wiedergabe von Medien über die App auf dem Sperrbildschirm.

Kontextbezogene Siri-Erinnerungen

Ermöglicht es dem Benutzer, Siri zu verwenden, um schnell eine Erinnerung zu erstellen, um die Inhalte anzuzeigen, die er aktuell in der App zu einem späteren Zeitpunkt anzeigt. Wenn sie beispielsweise eine Restaurantbewertung in der App anzeigen, könnten sie Siri aufrufen und sagen : "Erinnern Sie mich daran, wenn ich nach Hause komme." Siri würde die Erinnerung mit einem Link zur Rezension in der App generieren.

Kontaktbasierte Vorschläge

Ermöglicht es den Kontakten (und kontaktbezogenen Informationen) der App, in der Kontakt-App auf dem iOS-Gerät zusammen mit allen im System gespeicherten Benutzern anzuzeigen.

Freigabe basierende Vorschläge

Wenn eine Fahrfreigabe-App die MKDirectionsRequest-API verwendet, stellt iOS 10 sie in zeiten, in denen der Benutzer wahrscheinlich eine Fahrt wünscht, als Option im App-Switcher dar. Die App muss auch als Fahrfreigabe-App registriert werden, indem der MKDirectionsModeRideShare MKDirectionsApplicationSupportedModes-Schlüssel in der Info.plist Datei angegeben wird.

Wenn die App nur die Fahrfreigabe unterstützt, würde der Systemvorschlag mit "Fahrt zu..." beginnen, wenn andere Arten von Routingrichtung (z. B. Walking oder Bike) unterstützt werden, verwendet das System "Wegbeschreibungen abrufen zu..."

Wichtig

Das MKMapItem-Objekt , das die App empfängt, enthält möglicherweise keine Längen- und Breitengradinformationen und erfordert geocodierung.

Implementieren proaktiver Vorschläge

Das Hinzufügen von proaktiver Vorschlagsunterstützung zu einer Xamarin.iOS-App ist in der Regel so einfach wie die Implementierung einiger APIs oder das Erweitern einiger APIs, die die App möglicherweise bereits implementiert.

Proaktive Vorschläge arbeiten mit den Apps auf drei Standard Weisen zusammen:

  • NSUserActivity und Schema.org - NSUserActivity hilft dem System zu verstehen, mit welchen Informationen der Benutzer derzeit auf dem Bildschirm arbeitet. Schema.org fügt Webseiten ähnliche Fähigkeiten hinzu.
  • Standortvorschläge – Wenn die App standortbasierte Informationen anbietet oder nutzt, bieten diese API-Erweiterung neue Möglichkeiten, diese Informationen über Apps hinweg freizugeben.
  • Medien-App-Vorschläge – Das System kann die App und deren Medieninhalte basierend auf dem Kontext der Interaktion des Benutzers mit dem iOS-Gerät bewerben.

Und wird in der App unterstützt, indem Folgendes implementiert wird:

  • Handoff - NSUserActivity wurde in iOS 8 hinzugefügt, um Handoff zu unterstützen, die es dem Entwickler ermöglicht, eine Aktivität auf einem Gerät zu starten und dann auf einem anderen Fortzufahren (siehe Einführung in Handoff).
  • Spotlight-Suche – iOS 9 hat die Möglichkeit hinzugefügt, App-Inhalte aus den Spotlight-Suchergebnissen zu NSUserActivity bewerben (siehe Suche mit Core Spotlight).
  • Kontextbezogene Siri Erinnerungen - In iOS 10 wurde erweitert, um Siri schnell eine Erinnerung zu machen, um den Inhalt anzuzeigen, NSUserActivity den der Benutzer derzeit zu einem späteren Zeitpunkt in der App anzeigt.
  • Standortvorschläge – iOS 10 verbessert NSUserActivity die Erfassung von Orten, die innerhalb der App angezeigt werden, und fördert sie an vielen Stellen im gesamten System.
  • Kontextbezogene Siri-Anforderungen - NSUserActivity bieten Kontext zu den Informationen, die innerhalb der App präsentiert werden, für Siri, damit der Benutzer Wegbeschreibungen erhalten oder einen Anruf tätigen kann, um Siri innerhalb der App aufzurufen.
  • Kontaktinteraktionen – Neu in iOS 10, ermöglicht es Kommunikations-Apps, NSUserActivity von einem Kontakt Karte (in der Kontakte-App) als alternative Kommunikationsmethode heraufgestuft zu werden.

Alle diese Features haben eine gemeinsame Sache, sie verwenden alle NSUserActivity in einer Form oder einer anderen, um ihre Funktionalität bereitzustellen.

NSUserActivity

Wie oben erwähnt, hilft das System zu verstehen, NSUserActivity mit welchen Informationen der Benutzer derzeit auf dem Bildschirm arbeitet. NSUserActivity ist ein Mechanismus für die Zwischenspeicherung mit geringem Gewicht, um die Aktivität des Benutzers während der Navigation durch die App zu erfassen. Beispiel: Betrachten Sie eine Restaurant-App:

Der Zwischenspeicherungsmechanismus für NSUserActivity mit geringem Gewicht

Mit den folgenden Interaktionen:

  1. Wenn der Benutzer mit der App arbeitet, wird eine NSUserActivity erstellt, um den Zustand der App später neu zu erstellen.
  2. Wenn der Benutzer nach einem Restaurant sucht, wird das gleiche Muster der Erstellung von Aktivitäten befolgt.
  3. Und erneut, wenn der Benutzer ein Ergebnis anzeigt. In diesem letzten Fall zeigt der Benutzer einen Ort und in iOS 10 an, das System kennt bestimmte Konzepte (z. B. Standort- oder Kommunikationsinteraktionen).

Werfen Sie einen genaueren Blick auf den letzten Bildschirm:

Die NSUserActivity-Details

Hier erstellt die App eine NSUserActivity und wurde mit Informationen aufgefüllt, um den Zustand später neu zu erstellen. Die App enthält auch einige Metadaten, z. B. den Namen und die Adresse des Speicherorts. Mit dieser erstellten Aktivität informiert die App iOS, dass sie den aktuellen Zustand des Benutzers darstellt.

Die App entscheidet dann, ob die Aktivität zur Übergabe über die Luft angekündigt wird, als temporärer Wert für Standortvorschläge gespeichert oder dem Spotlight-Index auf dem Gerät zum Anzeigen in Suchergebnissen hinzugefügt wird.

Weitere Informationen zur Handoff- und Spotlight-Suche finden Sie in unseren Leitfäden "Handoff " und "iOS 9 Neue Such-APIs ".

Erstellen einer Aktivität

Vor dem Erstellen einer Aktivität muss ein Aktivitätstypbezeichner erstellt werden, um ihn zu identifizieren. Der Aktivitätstypbezeichner ist eine kurze Zeichenfolge, die dem NSUserActivityTypes Array der App-Datei hinzugefügt wird, die verwendet wird, um einen bestimmten Benutzeraktivitätstyp Info.plist eindeutig zu identifizieren. Es gibt einen Eintrag im Array für jede Aktivität, die die App unterstützt und für die App-Suche verfügbar macht. Weitere Details finden Sie in unserer Referenz zu Erstellen von Aktivitätstypbezeichnern.

Sehen Sie sich ein Beispiel für eine Aktivität an:

// Create App Activity
var activity = new NSUserActivity ("com.xamarin.platform");

// Define details
var info = new NSMutableDictionary ();
info.Add(new NSString("link"),new NSString("http://xamarin.com/platform"));

// Populate Activity
activity.Title = "The Xamarin Platform";
activity.UserInfo = info;

// Enable capabilities
activity.EligibleForSearch = true;
activity.EligibleForHandoff = true;
activity.EligibleForPublicIndexing = true;

// Inform system of Activity
activity.BecomeCurrent();

Eine neue Aktivität wird mithilfe eines Aktivitätstypbezeichners erstellt. Als Nächstes werden einige Metadaten erstellt, die die Aktivität definieren, damit dieser Zustand zu einem späteren Zeitpunkt wiederhergestellt werden kann. Anschließend erhält die Aktivität einen aussagekräftigen Titel und wird den Benutzerinformationen angefügt. Schließlich sind einige Funktionen aktiviert, und die Aktivität wird an das System gesendet.

Der obige Code könnte weiter verbessert werden, um Metadaten einzuschließen, die Kontext zu der Aktivität bieten, indem die folgenden Änderungen vorgenommen werden:

...

// Provide context
var attributes = new CSSearchableItemAttributeSet ("com.xamarin.location");
attributes.ThumbnailUrl = myThumbnailURL;
attributes.Keywords = new string [] { "software", "mobile", "language" };
activity.ContentAttributeSet = attributes;

// Inform system of Activity
activity.BecomeCurrent();

Wenn der Entwickler über eine Website verfügt, die dieselben Informationen wie die App anzeigen kann, kann die App die URL enthalten, und der Inhalt kann auf anderen Geräten angezeigt werden, auf denen die App nicht installiert ist (über Handoff):

// Restore on the web
activity.WebPageUrl = new NSUrl("http://xamarin.com/platform");

Wiederherstellen einer Aktivität

Um auf ein Suchergebnis (NSUserActivity) für die App zu reagieren, bearbeiten Sie die AppDelegate.cs Datei, und überschreiben Sie die ContinueUserActivity Methode. Zum Beispiel:

public override bool ContinueUserActivity (UIApplication application, NSUserActivity userActivity, UIApplicationRestorationHandler completionHandler)
{

    // Take action based on the activity type
    switch (userActivity.ActivityType) {
    case "com.xamarin.platform":
        // Restore the state of the app here...
        break;
    }

    return true;
}

Der Entwickler muss sicherstellen, dass dies derselbe Aktivitätstypbezeichner (com.xamarin.platform) ist wie die oben erstellte Aktivität. Die App verwendet die im Zustand NSUserActivity gespeicherten Informationen, um den Zustand wiederherzustellen, an dem der Benutzer aufgehört hat.

Vorteile der Erstellung einer Aktivität

Mit der minimalen Menge an Code, der oben dargestellt wird, kann die App jetzt drei neue iOS 10-Features nutzen:

  • Handoff
  • Blickpunktsuche
  • Kontextbezogene Siri-Erinnerungen

Im folgenden Abschnitt werden zwei weitere neue iOS 10-Features aktiviert:

  • Standortvorschläge
  • Kontextbezogene Siri-Anforderungen

Standortbasierte Vorschläge

Nehmen Sie sich das Beispiel der oben aufgeführten App für die Restaurantsuche an. Wenn sie alle Metadaten und Attribute implementiert NSUserActivity und ordnungsgemäß aufgefüllt hat, kann der Benutzer folgende Aktionen ausführen:

  1. Suchen Sie ein Restaurant in der App, bei dem sie einen Freund treffen möchten.
  2. Wenn der Benutzer mit dem Multitasking-App-Switcher von der App entfernt wird, zeigt das System automatisch einen Vorschlag (unten auf dem Bildschirm) an, um mithilfe ihrer bevorzugten Navigations-App Wegbeschreibungen zum Restaurant zu erhalten.
  3. Wenn der Benutzer zur Nachrichten-App wechselt und mit der Eingabe von "Los geht's" beginnt, schlägt die QuickType-Tastatur automatisch vor, in die Adresse des Restaurants einzufügen.
  4. Wenn der Benutzer zur Karten App wechselt, wird die Adresse des Restaurants automatisch als Ziel vorgeschlagen.
  5. Dies funktioniert auch für Drittanbieter-Apps (die unterstützung NSUserActivity), damit der Benutzer zu einer Ride-Sharing-App wechseln kann und die Adresse des Restaurants dort automatisch als Ziel vorgeschlagen wird.
  6. Es bietet auch Kontext zu Siri, sodass der Benutzer Siri innerhalb der Restaurant-App aufrufen und fragen kann "Wegbeschreibungen abrufen..." und Siri stellt Wegbeschreibungen zum Restaurant bereit, das der Benutzer anzeigt.

Alle oben genannten Funktionen haben eine gemeinsame Sache, sie geben an, wo der Vorschlag ursprünglich stammt. Im Fall des obigen Beispiels handelt es sich um die fiktive Restaurantbewertungs-App.

iOS 10 wurde erweitert, um diese Funktionalität für eine App durch mehrere kleine Änderungen und Ergänzungen zu vorhandenen Frameworks zu ermöglichen:

  • NSUserActivity enthält zusätzliche Felder zum Erfassen von Standortinformationen, die innerhalb der App angezeigt werden.
  • Es wurden mehrere Ergänzungen an MapKit und CoreSpotlight vorgenommen, um die Position zu erfassen.
  • Funktionen zur Standortsteuerung wurden Siri, Karten, Tastaturen, Multitasking und andere Apps innerhalb des Systems hinzugefügt.

Um standortbasierte Vorschläge zu implementieren, beginnen Sie mit dem oben dargestellten Aktivitätscode:

// Create App Activity
var activity = new NSUserActivity ("com.xamarin.platform");

// Define details
var info = new NSMutableDictionary ();
info.Add(new NSString("link"),new NSString("http://xamarin.com/platform"));

// Populate Activity
activity.Title = "The Xamarin Platform";
activity.UserInfo = info;

// Enable capabilities
activity.EligibleForSearch = true;
activity.EligibleForHandoff = true;
activity.EligibleForPublicIndexing = true;

// Provide context
var attributes = new CSSearchableItemAttributeSet ("com.xamarin.location");
attributes.ThumbnailUrl = myThumbnailURL;
attributes.Keywords = new string [] { "software", "mobile", "language" };
activity.ContentAttributeSet = attributes;

// Restore on the web
activity.WebPageUrl = new NSUrl("http://xamarin.com/platform");

// Inform system of Activity
activity.BecomeCurrent();

Wenn die App MapKit verwendet, ist sie so einfach wie das Hinzufügen der aktuellen Karte MKMapItem zur Aktivität:

// Save MKMapItem location
activity.MapItem = myMapItem;

Wenn die App mapKit nicht verwendet, kann sie die App-Suche übernehmen und die folgenden neuen Attribute für den Standort angeben:

// Provide context
var attributes = new CSSearchableItemAttributeSet ("com.xamarin.location");
...

attributes.NamedLocation = "Apple Inc.";
attributes.SubThoroughfare = "1";
attributes.Thoroughfare = "Infinite Loop";
attributes.City = "Cupertino";
attributes.StateOrProvince = "CA";
attributes.Country = "United States";
attributes.Latitude = 37.33072;
attributes.Longitude = 122.029674;
attributes.PhoneNumbers = new string[]{"(800) 275-2273"};
attributes.SupportsPhoneCalls = true;
attributes.SupportsNavigation = true;

Sehen Sie sich den obigen Code im Detail an. Zuerst ist der Name des Speicherorts in jeder Instanz erforderlich:

attributes.NamedLocation = "Apple Inc.";

Anschließend ist die textbasierte Beschreibung des Speicherorts für textbasierte Instanzen (z. B. die QuickType-Tastatur) erforderlich:

attributes.SubThoroughfare = "1";
attributes.Thoroughfare = "Infinite Loop";
attributes.City = "Cupertino";
attributes.StateOrProvince = "CA";
attributes.Country = "United States";

Der Breiten- und Längengrad sind optional, stellen Sie jedoch sicher, dass der Benutzer an den genauen Ort weitergeleitet wird, an den die App sie senden möchte, sodass er einbezogen werden sollte:

attributes.Latitude = 37.33072;
attributes.Longitude = 122.029674;

Durch Festlegen der Telefonnummern kann die App Zugriff auf Siri erhalten, damit der Benutzer Siri aus der App aufrufen kann, indem er etwas wie "Diesen Ort anrufen" sagt:

attributes.PhoneNumbers = new string[]{"(800) 275-2273"};

Schließlich kann die App angeben, ob die Instanz für Navigations- und Telefonanrufe geeignet ist:

attributes.SupportsPhoneCalls = true;
attributes.SupportsNavigation = true;

Implementieren von Kontaktinteraktionen

Neu in iOS 10 sind Kommunikations-Apps tief in die Kontakte-App aus dem Kontakt-Karte integriert. Für Apps, die Kontaktinteraktionen implementiert haben, kann der Benutzer die Informationen der jeweiligen App bestimmten Personen in ihren Kontakten hinzufügen. Und wenn sie beispielsweise oben in einem Karte auf die Schaltfläche "Schnelle Aktion" klicken, um eine Nachricht zu senden, wird die angefügte App als Option zum Senden der Nachricht aufgeführt.

Wenn eine Drittanbieter-App ausgewählt ist, kann sie gespeichert und als Standardeinstellung angezeigt werden, um der angegebenen Person das nächste Mal zu melden, wenn der Benutzer sie das nächste Mal kontaktieren möchte.

Kontaktinteraktionen werden in der App mithilfe NSUserActivity und dem neuen Intents-Framework implementiert, das in iOS 10 eingeführt wurde. Weitere Details zur Arbeit mit Intents finden Sie in unseren Leitfäden "Understanding SiriKit Concepts " und "Implementing SiriKit ".

Spenden von Interaktionen

Sehen Sie sich an, wie die App Interaktionen spenden kann:

Übersicht über interaktionen

Die App erstellt ein INInteraction Objekt, das einen Intent (INIntent), Teilnehmer und Metadaten enthält. Die Absicht stellt eine Benutzeraktion dar, z. B. einen Videoanruf oder das Senden einer Sms. Die Teilnehmer umfassen die Personen , die die Kommunikation erhalten. Die Metadaten definieren Zusätzliche Informationen wie das erfolgreiche Senden der Nachricht usw.

Der Entwickler erstellt nie direkt eine Instanz von INIntent oder INIntentResponse, sie verwendet eine der spezifischen untergeordneten Klassen (basierend auf der Aufgabe, die die App im Auftrag des Benutzers ausführt), die von diesen übergeordneten Klassen erben. Beispiel: INSendMessageIntent Zum INSendMessageIntentResponse Senden einer Textnachricht.

Sobald die Interaktion vollständig ausgefüllt ist, rufen Sie die DonateInteraction Methode auf, um das System darüber zu informieren, dass die Interaktion zur Verwendung verfügbar ist.

Wenn der Benutzer mit der App über die Kontakt-Karte interagiert, wird die Interaktion mit einer NSUserActivitygebündelt, die dann zum Starten der App verwendet wird:

Die Interaktion wird mit einer NSUserActivity gebündelt, die zum Starten der App verwendet wird.

Sehen Sie sich das folgende Beispiel für eine Send Message Intent an:

using System;
using Foundation;
using UIKit;
using Intents;

namespace MonkeyNotification
{
  public class DonateInteraction
  {
    #region Constructors
    public DonateInteraction ()
    {
    }
    #endregion

    #region Public Methods
    public void SendMessageIntent (string text, INPerson from, INPerson[] to)
    {

      // Create App Activity
      var activity = new NSUserActivity ("com.xamarin.message");

      // Define details
      var info = new NSMutableDictionary ();
      info.Add (new NSString ("message"), new NSString (text));

      // Populate Activity
      activity.Title = "Sent MonkeyChat Message";
      activity.UserInfo = info;

      // Enable capabilities
      activity.EligibleForSearch = true;
      activity.EligibleForHandoff = true;
      activity.EligibleForPublicIndexing = true;

      // Inform system of Activity
      activity.BecomeCurrent ();

      // Create message Intent
      var intent = new INSendMessageIntent (to, text, "", "MonkeyChat", from);

      // Create Intent Reaction
      var response = new INSendMessageIntentResponse (INSendMessageIntentResponseCode.Success, activity);

      // Create interaction
      var interaction = new INInteraction (intent, response);

      // Donate interaction to the system
      interaction.DonateInteraction ((err) => {
        // Handle donation error
        ...
      });
    }
    #endregion
  }
}

Wenn Sie diesen Code im Detail betrachten, wird eine Instanz NSUserActivity erstellt und aufgefüllt (wie im Abschnitt "Erstellen einer Aktivität " oben gezeigt). Als Nächstes erstellt sie eine Instanz von INSendMessageIntent (die von ) erbt INIntentund füllt sie mit den Details der gesendeten Nachricht auf:

var intent = new INSendMessageIntent (to, text, "", "MonkeyChat", from);

Es INSendMessageIntentResponse wird eine erstellt und die NSUserActivity oben erstellte Übergeben:

var response = new INSendMessageIntentResponse (INSendMessageIntentResponseCode.Success, activity);

Es INInteraction wird aus dem soeben erstellten Send Message Intent (INSendMessageIntent) und Response (INSendMessageIntentResponse) erstellt:

var interaction = new INInteraction (intent, response);

Schließlich wird das System über die Interaktion benachrichtigt:

// Donate interaction to the system
interaction.DonateInteraction ((err) => {
  // Handle donation error
  ...
});

Ein Abschlusshandler wird übergeben, in dem die App auf die erfolgreiche oder fehlgeschlagene Spende reagieren kann.

Bewährte Methoden für Aktivitäten

Apple schlägt beim Arbeiten mit Aktivitäten die folgenden bewährten Methoden vor:

  • Wird für faule Nutzlastupdates verwendet NeedsSave .
  • Stellen Sie sicher, dass ein starker Verweis auf die aktuelle Aktivität erhalten bleibt.
  • Übertragen Sie nur kleine Nutzlasten, die nur genügend Informationen enthalten, um den Zustand wiederherzustellen.
  • Stellen Sie sicher, dass die Aktivitätstypbezeichner eindeutig und beschreibend sind, indem Sie die Reverse-DNS-Notation verwenden, um sie anzugeben.

Schema.org

Wie oben gezeigt, hilft das System zu verstehen, NSUserActivity mit welchen Informationen der Benutzer derzeit auf dem Bildschirm arbeitet. Schema.org fügt Webseiten ähnliche Fähigkeiten hinzu.

Schema.org können die gleichen Arten von standortbasierten Interaktionen für die Website bereitstellen. Apple hat die neuen Standortvorschläge genauso gut entwickelt, wenn sie in Safari wie in einer nativen App angezeigt werden.

Einige Schema.org Hintergrund:

  • Es bietet einen offenen Web-Markup-Vokabularstandard.
  • Es funktioniert, indem strukturierte Metadaten auf Webseiten eingeschlossen werden.
  • Es gibt über 500 Schemas, die verschiedene Konzepte darstellen.
  • Durch die Implementierung auf der Website kann der Entwickler einige der Vorteile der Verwendung NSUserActivity in einer nativen App erwerben.

Die Schemas werden in einer Struktur wie einer Struktur angeordnet, bei der bestimmte Typen wie Restaurant von allgemeineren Typen wie " Local Business" erben. Weitere Informationen finden Sie unter Schema.org.

Beispiel: Wenn die Webseite die folgenden Daten enthält:

<script type="application/ld+json">
{
  "@context":"http://schema.org",
  "@type":"Restaurant",
  "telephone":"(415) 781-1111",
  "url":"https://www.yanksing.com",
  "address":{
    "@type":"PostalAddress",
    "streetAddress":"101 Spear St",
    "addressLocality":"San Francisco",
    "postalCode":"94105",
    "addressRegion":"CA"
  },
  "aggregateRating":{
    "@type":"AggregateRating",
    "ratingValue":"3.5",
    "reviewCount":"2022"
  }
}
</script>

Wenn der Benutzer diese Seite in Safari besucht und dann zu einer anderen App gewechselt hat, werden die Standortinformationen von der Seite erfasst und als Standortvorschlag in anderen Teilen des Systems angeboten (wie in "Aktivitäten oben").

Safari extrahiert alles auf einer Webseite, die einer der folgenden Schemaeigenschaften entspricht:

  • PostalAddress
  • GeoCoordinates
  • Eine Telefoneigenschaft.

Weitere Informationen finden Sie in unserem Suchhandbuch mit Webmarkup .

Nutzung von Standortvorschlägen

In diesem nächsten Abschnitt wird der Verbrauch des Standortvorschlags behandelt, der aus anderen Teilen des Systems (z. B. der Karten-App) oder anderen Drittanbieter-Apps stammt.

Es gibt zwei Standard Möglichkeiten, wie die App Standortvorschläge nutzen kann:

  • Über die QuickType-Tastatur.
  • Verwenden Sie die Standortinformationen direkt in Routing-Apps.

Positionsvorschläge und die QuickType-Tastatur

Wenn die App Adressen in textbasierten Formaten behandelt, kann die App Standortvorschläge über die QuickType-Benutzeroberfläche nutzen. iOS 10 erweitert die QuickType-Benutzeroberfläche mit den folgenden Features:

  • Die App kann Hinweise zur semantischen Absicht für Textfelder auf der Benutzeroberfläche hinzufügen.
  • Die App kann proaktive Vorschläge in der App erhalten.
  • Die App kann von einer verbesserten Autokorrektur profitieren.

Mit der neuen TextContentType Eigenschaft der Textfeldsteuerelemente in iOS 10 kann der Entwickler die semantische Absicht für den Wert definieren, den der Benutzer in ein bestimmtes Feld eingeben wird. Zum Beispiel:

var textField = new UITextField();
textField.TextContentType = UITextContentType.FullStreetAddress;

Würde dem System mitteilen, dass die App erwartet, dass der Benutzer eine vollständige Straße in das angegebene Feld eingibt. Dadurch kann die QuickType-Tastatur automatisch Standortvorschläge auf der Tastatur bereitstellen, wenn der Benutzer einen Wert in dieses Feld eingibt.

Im Folgenden finden Sie einige der gängigeren Typen, die dem Entwickler in der UITextContentType statischen Klasse zur Verfügung stehen:

  • Name
  • GivenName
  • FamilyName
  • Location
  • FullStreetAddress
  • AddressCityAndState
  • TelephoneNumber
  • EmailAddress

Vorschläge zum Routing von Apps und Speicherorten

In diesem Abschnitt wird die Verwendung von Standortvorschlägen direkt in einer Routing-App erläutert. Damit die Routing-App diese Funktionalität hinzufügen kann, nutzt der Entwickler das vorhandene MKDirectionsRequest Framework wie folgt:

  • So bewerben Sie die App in Multitasking.
  • So registrieren Sie die App als Routing-App.
  • So behandeln Sie das Starten der App mit einem MapKit-Objekt MKDirectionsRequest .
  • Um iOS die Möglichkeit zu geben, die App dem Benutzer zu geeigneten Zeitpunkten vorzuschlagen, basierend auf der Benutzerbindung.

Wenn die App mit einem MapKit-Objekt MKDirectionsRequest gestartet wird, sollte sie dem Benutzer automatisch Wegbeschreibungen zum angeforderten Speicherort geben oder eine Benutzeroberfläche präsentieren, die es dem Benutzer erleichtert, Wegbeschreibungen zu erhalten. Zum Beispiel:

using System;
using Foundation;
using UIKit;
using MapKit;
using CoreLocation;

namespace MonkeyChat
{
  [Register ("AppDelegate")]
  public class AppDelegate : UIApplicationDelegate, IUISplitViewControllerDelegate
  {
    ...

    public override bool OpenUrl (UIApplication app, NSUrl url, NSDictionary options)
    {
      if (MKDirectionsRequest.IsDirectionsRequestUrl (url)) {
        var request = new MKDirectionsRequest (url);
        var coordinate = request.Destination?.Placemark.Location?.Coordinate;
        var address = request.Destination.Placemark.AddressDictionary;
        if (coordinate.IsValid()) {
          var geocoder = new CLGeocoder ();
          geocoder.GeocodeAddress (address, (place, err) => {
            // Handle the display of the address

          });
        }
      }

      return true;
    }
  }    
}

Sehen Sie sich diesen Code im Detail an. Es überprüft, ob es sich um eine gültige Zielanforderung handelt:

if (MKDirectionsRequest.IsDirectionsRequestUrl(url)) {

Wenn dies der Grund ist, wird eine MKDirectionsRequest aus der URL erstellt:

var request = new MKDirectionsRequest(url);

Neu in iOS 10 kann die App eine Adresse senden, die keine Geokoordinaten enthält, sodass der Entwickler die Adresse codieren muss:

var geocoder = new CLGeocoder();
geocoder.GeocodeAddress(address, (place, err)=> {
  // Handle the display of the address

});

Vorschläge für Medien-Apps

Wenn die App medientyps wie eine Podcast-App oder Streamingmedieninhalte wie Audio oder Video verarbeitet, kann die App mit iOS 10 medienvorschläge im System nutzen.

Für Apps, die Medien verarbeiten, unterstützt iOS die folgenden Verhaltensweisen:

  • iOS fördert Apps, die der Benutzer wahrscheinlich basierend auf dem vorherigen Verhalten verwendet.
  • Vorschläge im Zusammenhang mit der App werden in Spotlight und der Heutigen Ansicht präsentiert.
  • Wenn die App einen der folgenden Auslöser erfüllt, kann sie auf einen Vorschlag für den Sperrbildschirm erhöht werden:
    • Nach dem Anschließen von Kopfhörern oder einem Bluetooth-Gerät wird eine Verbindung hergestellt.
    • Nach dem Einsteigen in ein Auto.
    • Nach der Ankunft zu Hause oder bei der Arbeit.

Durch einschließen eines einfachen API-Aufrufs in iOS 10 kann der Entwickler eine ansprechendere Sperrbildschirmumgebung für Benutzer der Medien-App erstellen. Mithilfe der MPPlayableContentManager Klasse zum Verwalten der Medienwiedergabe werden vollständige Mediensteuerelemente (z. B. die von der Musik-App dargestellten) auf dem Sperrbildschirm für die App angezeigt.

using System;
using MediaPlayer;
using UIKit;

namespace MonkeyPlayer
{
  public class PlayableContentDelegate : MPPlayableContentDelegate
  {
    #region Constructors
    public PlayableContentDelegate ()
    {
    }
    #endregion

    #region Override methods
    public override void InitiatePlaybackOfContentItem (MPPlayableContentManager contentManager, Foundation.NSIndexPath indexPath, Action<Foundation.NSError> completionHandler)
    {
      // Access the media item to play
      var item = LoadMediaItem (indexPath);

      // Populate the lock screen
      PopulateNowPlayingItem (item);

      // Prep item to be played
      var status = PreparePlayback (item);

      // Call completion handler
      completionHandler (null);
    }
    #endregion

    #region Public Methods
    public MPMediaItem LoadMediaItem (Foundation.NSIndexPath indexPath)
    {
      var item = new MPMediaItem ();

      // Load item from media store
      ...

      return item;
    }

    public void PopulateNowPlayingItem (MPMediaItem item)
    {
      // Get Info Center and album art
      var infoCenter = MPNowPlayingInfoCenter.DefaultCenter;
      var albumArt = (item.Artwork == null) ? new MPMediaItemArtwork (UIImage.FromFile ("MissingAlbumArt.png")) : item.Artwork;

      // Populate Info Center
      infoCenter.NowPlaying.Title = item.Title;
      infoCenter.NowPlaying.Artist = item.Artist;
      infoCenter.NowPlaying.AlbumTitle = item.AlbumTitle;
      infoCenter.NowPlaying.PlaybackDuration = item.PlaybackDuration;
      infoCenter.NowPlaying.Artwork = albumArt;
    }

    public bool PreparePlayback (MPMediaItem item)
    {
      // Prepare media item for playback
      ...

      // Return results
      return true;
    }
    #endregion
  }
}

Zusammenfassung

In diesem Artikel wurden proaktive Vorschläge behandelt und gezeigt, wie der Entwickler sie verwenden kann, um den Datenverkehr zur Xamarin.iOS-App zu fördern. Er behandelte den Schritt zur Implementierung proaktiver Vorschläge und präsentierter Nutzungsrichtlinien.