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 die Interaktion zu fördern, indem das System hilfreiche Informationen proaktiv automatisch dem Benutzer bereitstellen kann.

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

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

  • Der App-Umschalter
  • Der Sperrbildschirm
  • CarPlay
  • Karten
  • Siri-Interaktionen
  • QuickType-Vorschläge

Die App macht diese Funktionalität für das System verfügbar, indem sie eine Sammlung von Technologien wie NSUserActivity, Web markup, Core Spotlight, MapKit, Media Player und UIKit verwendet. Darüber hinaus wird durch die Bereitstellung proaktiver Vorschläge unterstützung für die App eine tiefere Siri-Integration kostenlos.

Standortbasierte Vorschläge

Die Klasse ist neu in iOS 10 und NSUserActivity enthält eine MapItem Eigenschaft, die es dem Entwickler ermöglicht, Standortinformationen bereitzustellen, 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 und Longitude der Adresskomponente wird empfohlen, dass die App auch die NamedLocation Eigenschaften und PhoneNumbers bereitstellt, damit Siri einen Aufruf des Standorts initiieren kann.

Web markupbasierte Vorschläge

iOS 9 wurde hinzugefügt, um strukturiertes Datenmarkup in die Website einzuschließen, das die Inhalte anreichert, die Benutzern in den Suchergebnissen Spotlight und Safari angezeigt werden (siehe Suchen mit Webmarkup). iOS 10 fügt die Möglichkeit hinzu, standortbasiertes Markup (z. B . PostalAddress gemäß Schema.org), um die Benutzerfreundlichkeit weiter zu verbessern. Wenn ein Benutzer beispielsweise eine Standortseite auf der Website anzeigt, kann das System beim Öffnen von Karten denselben Speicherort vorschlagen.

Textbasierte Vorschläge

UIKit wurde in iOS 10 erweitert, um die TextContentType-Eigenschaft der UITextInputTraits-Klasse einzuschließen , um die semantische Bedeutung des Inhalts in einem Textbereich anzugeben. Wenn diese Informationen vorhanden sind, kann das System in der Regel automatisch den entsprechenden Tastaturtyp auswählen, Vorschläge zur Automatischkorrektur 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 vorschlagen, das Feld automatisch mit dem Speicherort zu füllen, den der Benutzer kürzlich angezeigt hat.

Medienbasierte Vorschläge

Wenn die App Medien mit der MPPlayableContentManager-API wiedergibt, können Benutzer mit iOS 10 das Albumcover anzeigen und Medien über die App auf dem Sperrbildschirm wiedergeben.

Kontextbezogene Siri-Erinnerungen

Ermöglicht dem Benutzer, Siri zu verwenden, um schnell eine Erinnerung an den Inhalt vorzunehmen, den er derzeit in der App zu einem späteren Zeitpunkt anzeigt. Wenn sie beispielsweise eine Restaurantbewertung in der App anzeigen würden, könnten sie Siri aufrufen und sagen : "Erinnern Sie mich daran, wenn ich nach Hause komme." Siri generiert die Erinnerung mit einem Link zur Überprüfung in der App.

Kontaktbasierte Vorschläge

Ermöglicht es, dass die Kontakte der App (und kontaktbezogene Informationen) in der Kontakt-App auf dem iOS-Gerät zusammen mit allen im System gespeicherten Benutzerkontakten angezeigt werden.

Mitfahrfreigabe basierende Vorschläge

Wenn eine Mitfahrfreigabe-App die MKDirectionsRequest-API verwendet, stellt iOS 10 sie im App-Switcher als Option bereit, wenn der Benutzer wahrscheinlich eine Fahrt wünscht. Die App muss auch als Mitfahrfreigabe-App registriert werden, indem Sie den MKDirectionsModeRideShare für den MKDirectionsApplicationSupportedModes-Schlüssel in der Info.plist Datei angeben.

Wenn die App nur ride sharing unterstützt, beginnt der Systemvorschlag mit "Get a ride to...". Wenn andere Arten von Routingrichtung (z. B. Walking oder Bike) unterstützt werden, verwendet das System "Wegbeschreibungen abrufen nach...".

Wichtig

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

Implementieren proaktiver Vorschläge

Das Hinzufügen proaktiver Vorschläge 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 funktionieren mit den Apps auf drei Standard Arten:

  • 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 Funktionen hinzu.
  • Standortvorschläge : Wenn die App standortbasierte Informationen anbietet oder nutzt, bieten diese API-Erweiterung neue Möglichkeiten, diese Informationen appsübergreifend freizugeben.
  • Vorschläge für Medien-Apps : Das System kann die App und ihre Medieninhalte basierend auf dem Kontext der Interaktion des Benutzers mit dem iOS-Gerät heraufstufen.

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

  • Übergabe - NSUserActivity wurde in iOS 8 hinzugefügt, um Handoff zu unterstützen, das 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 Search – iOS 9 hat die Möglichkeit hinzugefügt, App-Inhalte aus den Spotlight-Suchergebnissen mit NSUserActivity höherzustufen (siehe Suchen mit Core Spotlight).
  • Kontextbezogene Siri-Erinnerungen : In iOS 10 wurde erweitert, damit Siri schnell eine Erinnerung an die Inhalte erstellen kann, NSUserActivity die der Benutzer derzeit in der App zu einem späteren Zeitpunkt anzeigt.
  • Standortvorschläge : iOS 10 wird verbessert NSUserActivity , um Standorte zu erfassen, die in der App angezeigt werden, und sie an vielen Stellen im gesamten System zu fördern.
  • Kontextbezogene Siri-Anforderungen - NSUserActivity stellt Kontext zu den Informationen bereit, die siri in der App angezeigt werden, sodass der Benutzer Wegbeschreibungen abrufen oder einen Anruf tätigen kann, um Siri in der App zu aufrufen.
  • Kontaktinteraktionen : Neu in iOS 10, ermöglicht es, NSUserActivity Kommunikations-Apps von einem Kontakt Karte (in der Kontakte-App) als alternative Kommunikationsmethode heraufzusteigen.

Alle diese Features haben eines gemeinsam: Sie alle verwenden NSUserActivity in der einen oder anderen Form, 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 einfacher Zwischenspeicherungsmechanismus für den Zustand, um die Aktivität des Benutzers zu erfassen, während er durch die App navigiert. 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 ein NSUserActivity erstellt, um den Zustand der App später neu zu erstellen.
  2. Wenn der Benutzer nach einem Restaurant sucht, wird das gleiche Muster beim Erstellen von Aktivitäten befolgt.
  3. Und wieder, wenn der Benutzer ein Ergebnis anzeigt. In diesem letzten Fall zeigt der Benutzer einen Standort an, und in iOS 10 ist das System bestimmten Konzepten (z. B. Standort- oder Kommunikationsinteraktionen) bewusster.

Sehen Sie sich den letzten Bildschirm genauer an:

Details zu NSUserActivity

Hier erstellt die App ein NSUserActivity , und es wurde mit Informationen aufgefüllt, um den Zustand später neu zu erstellen. Die App enthält auch einige Metadaten wie den Namen und die Adresse des Standorts. Nachdem diese Aktivität erstellt wurde, teilt die App iOS mit, dass sie den aktuellen Status des Benutzers darstellt.

Die App entscheidet dann, ob die Aktivität für Handoff over-the-air angekündigt, als temporärer Wert für Standortvorschläge gespeichert oder dem Spotlight-Index auf dem Gerät zur Anzeige in Suchergebnissen hinzugefügt wird.

Weitere Informationen zur Handoff- und Spotlightsuche finden Sie in den Anleitungen Einführung in handoff und iOS 9 New Search APIs .

Erstellen einer Aktivität

Vor dem Erstellen einer Aktivität muss ein Aktivitätstypbezeichner erstellt werden, um sie zu identifizieren. Der Aktivitätstypbezeichner ist eine kurze Zeichenfolge, die dem NSUserActivityTypes Array der App-Datei hinzugefügt wird, mit der ein bestimmter Benutzeraktivitätstyp Info.plist eindeutig identifiziert wird. 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 Informationen finden Sie in der Referenz zum 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, sodass 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 werden einige Funktionen aktiviert, und die Aktivität wird an das System gesendet.

Der obige Code kann weiter verbessert werden, um Metadaten einzuschließen, die kontextbereit für die Aktivität sind, 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 darauf zu reagieren, dass der Benutzer auf ein Suchergebnis (NSUserActivity) für die App tippt, bearbeiten Sie die Datei AppDelegate.cs , und überschreiben Sie die ContinueUserActivity -Methode. 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) wie die oben erstellte Aktivität ist. Die App verwendet die in NSUserActivity gespeicherten Informationen, um den Zustand wieder in den Zustand zurückzusetzen, in den der Benutzer aufgehört hat.

Vorteile des Erstellens einer Aktivität

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

  • Übergabe
  • Spotlight-Suche
  • Kontextbezogene Siri-Erinnerungen

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

  • Standortvorschläge
  • Kontextbezogene Siri-Anforderungen

Standortbasierte Vorschläge

Nehmen Sie das obige Beispiel der Restaurantsuche-App. Wenn alle Metadaten und Attribute implementiert NSUserActivity und ordnungsgemäß aufgefüllt wurden, kann der Benutzer folgendes tun:

  1. Suchen Sie in der App ein Restaurant, in dem sie einen Freund treffen möchten.
  2. Wenn sich der Benutzer mit dem Multitasking-App-Switcher von der App entfernt, zeigt das System automatisch einen Vorschlag (am unteren Bildschirmrand) an, um mithilfe seiner bevorzugten Navigations-App Richtungen zum Restaurant zu erhalten.
  3. Wenn der Benutzer zur Nachrichten-App wechselt und mit der Eingabe von "Let's meet at" beginnt, schlägt die QuickType-Tastatur automatisch vor, 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 sogar für Drittanbieter-Apps (die unterstützen NSUserActivity), sodass der Benutzer zu einer Mitfahrfreigabe-App wechseln kann und die Adresse des Restaurants auch dort automatisch als Ziel vorgeschlagen wird.
  6. Es bietet auch Kontext für Siri, sodass der Benutzer Siri in der Restaurant-App aufrufen und "Wegbeschreibungen abrufen..." fragen kann, und Siri gibt Wegbeschreibungen für das Restaurant an, das der Benutzer anzeigt.

Alle oben genannten Funktionen haben eines gemeinsam: Sie geben an, wo der Vorschlag ursprünglich herkommt. 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 bestehender Frameworks zu ermöglichen:

  • NSUserActivity verfügt über zusätzliche Felder zum Erfassen von Standortinformationen, die in der App angezeigt werden.
  • MapKit und CoreSpotlight wurden mehrere Ergänzungen vorgenommen, um den Standort zu erfassen.
  • Standortbezogene Funktionen wurden zu Siri, Karten, Tastaturen, Multitasking und anderen Apps innerhalb des Systems hinzugefügt.

Um standortbasierte Vorschläge zu implementieren, beginnen Sie mit dem oben aufgeführten 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, können Sie die aktuelle Karte MKMapItem der Aktivität einfach hinzufügen:

// 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. Zunächst ist der Name des Speicherorts in jedem instance erforderlich:

attributes.NamedLocation = "Apple Inc.";

Dann 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";

Die Breiten- und Längengrade sind optional. Stellen Sie jedoch sicher, dass der Benutzer genau an den Speicherort weitergeleitet wird, an den die App ihn senden möchte. Daher sollte er enthalten sein:

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

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

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

Schließlich kann die App angeben, ob die instance für Navigation und Telefonanrufe geeignet ist:

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

Implementieren von Kontaktinteraktionen

Neu in iOS 10 sind Kommunikations-Apps über die Kontakt-Karte tief in die Kontakte-App integriert. Für Apps, die Kontaktinteraktionen implementiert haben, kann der Benutzer die Informationen der angegebenen App bestimmten Personen in seinen Kontakten hinzufügen. Wenn sie beispielsweise auf die Schaltfläche "Schnellaktion" am oberen Rand eines Karte klicken, um eine Nachricht zu senden, wird die angefügte App als Option zum Senden der Nachricht aufgelistet.

Wenn eine 3rd Party-App ausgewählt ist, kann sie gespeichert und als Standardart angezeigt werden, um der angegebenen Person eine Nachricht zu senden, wenn der Benutzer sie das nächste Mal kontaktieren möchte.

Kontaktinteraktionen werden mithilfe der App NSUserActivity und des neuen Intents-Frameworks implementiert, das in iOS 10 eingeführt wurde. Weitere Informationen zum Arbeiten mit Absichten finden Sie in unseren Anleitungen Zum Verstehen von SiriKit-Konzepten und zum Implementieren von SiriKit .

Spenden von Interaktionen

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

Übersicht über Spendeninteraktionen

Die App erstellt ein INInteraction Objekt, das eine Absicht (INIntent), Teilnehmer und Metadaten enthält. Die Absicht stellt eine Benutzeraktion dar, z. B. einen Videoanruf oder das Senden einer SMS. Zu den Teilnehmern gehören die Personen, die die Kommunikation erhalten. Die Metadaten definieren Additionsinformationen, z. B. erfolgreiches Senden der Nachricht usw.

Der Entwickler erstellt niemals direkt einen instance von INIntent oder INIntentResponse, er 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. Beispielsweise INSendMessageIntent und INSendMessageIntentResponse für das Senden einer SMS.

Sobald die Interaktion vollständig aufgefü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 über die Kontakt-Karte mit der App interagiert, wird die Interaktion mit einem NSUserActivitygebündelt, das 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 Absicht zum Senden von Nachrichten 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 sich diesen Code im Detail ansehen, wird eine instance von NSUserActivity erstellt und aufgefüllt (siehe oben im Abschnitt Erstellen einer Aktivität). Als Nächstes wird eine instance von INSendMessageIntent erstellt (die von INIntenterbt) und mit den Details der gesendeten Nachricht aufgefüllt:

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

Ein INSendMessageIntentResponse wird erstellt und der NSUserActivity oben erstellte übergeben:

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

Ein INInteraction wird aus den gerade erstellten Nachrichtenabsichten (INSendMessageIntent) und Antwort (INSendMessageIntentResponse) erstellt:

var interaction = new INInteraction (intent, response);

Schließlich ist das System eine Benachrichtigung über die Interaktion:

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

Ein Vervollständigungshandler wird übergeben, in dem die App auf eine erfolgreiche oder fehlerhafte Spende reagieren kann.

Bewährte Methoden für Aktivitäten

Apple schlägt die folgenden bewährten Methoden für die Arbeit mit Aktivitäten vor:

  • Verwenden Sie NeedsSave für verzögerte Nutzlastupdates.
  • Stellen Sie sicher, dass Sie einen starken Verweis auf die aktuelle Aktivität beibehalten.
  • Übertragen Sie nur kleine Nutzlasten, die gerade genügend Informationen enthalten, um den Zustand wiederherzustellen.
  • Stellen Sie sicher, dass die Aktivitätstypbezeichner eindeutig und beschreibend sind, indem Sie sie mithilfe der Reverse-DNS-Notation angeben.

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 Funktionen hinzu.

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

Einige Schema.org Hintergrund:

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

Die Schemas sind in einer strukturähnlichen Struktur angeordnet, in der bestimmte Typen wie Restaurant von generischeren Typen wie Local Business erben. Weitere Informationen finden Sie unter Schema.org.

Beispielsweise, 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 (siehe 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 Leitfaden Zum Suchen mit Webmarkup .

Verwenden von Standortvorschlägen

In diesem nächsten Abschnitt wird der Verbrauch von Standortvorschlägen behandelt, die aus anderen Teilen des Systems (z. B. der Karten-App) oder anderen Drittanbieter-Apps stammen.

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

  • Über die QuickType-Tastatur.
  • Direkt durch Nutzung der Standortinformationen in Routing-Apps.

Standortvorschläge und die QuickType-Tastatur

Wenn die App Adressen in textbasierten Formaten verarbeitet, kann die App standortbezogene Vorschläge über die QuickType-Benutzeroberfläche nutzen. iOS 10 erweitert die QuickType-Benutzeroberfläche um die 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 der erweiterten 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 eingibt. 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ßenadresse 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 sind einige der gängigsten Typen aufgeführt, die dem Entwickler in der UITextContentType statischen Klasse zur Verfügung stehen:

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

Vorschläge zum Weiterleiten von Apps und Standorten

In diesem Abschnitt sehen Sie sich die Nutzung von Standortvorschlägen direkt in einer Routing-App an. Damit die Routing-App diese Funktionalität hinzufügen kann, nutzt der Entwickler das vorhandene MKDirectionsRequest Framework wie folgt:

  • So fördern 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, zu lernen, dem Benutzer die App basierend auf der Benutzerbindung zu geeigneten Zeitpunkten vorzuschlagen.

Wenn die App mit einem MapKit-Objekt MKDirectionsRequest gestartet wird, sollte sie automatisch damit beginnen, dem Benutzer Anweisungen zum angeforderten Speicherort zu geben, oder eine Benutzeroberfläche darstellen, die es dem Benutzer erleichtert, Wegbeschreibungen zu erhalten. 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 wird getestet, um festzustellen, ob es sich um eine gültige Zielanforderung handelt:

if (MKDirectionsRequest.IsDirectionsRequestUrl(url)) {

Wenn dies der Wert ist, wird aus der URL erstellt MKDirectionsRequest :

var request = new MKDirectionsRequest(url);

Neu in iOS 10 kann der App eine Adresse ohne Geokoordinaten gesendet werden, sodass der Entwickler die Adresse codieren muss:

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

Medien-App-Vorschläge

Wenn die App medientypen wie podcast-App oder Streamingmedieninhalte wie Audio oder Video verarbeitet, kann sie mit iOS 10 die Vorteile von Medienvorschlägen 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 in der Heutigen Ansicht präsentiert.
  • Wenn die App einen der folgenden Trigger erfüllt, wird sie möglicherweise auf einen Sperrbildschirmvorschlag erhöht:
    • Nach dem Anschließen des Kopfhörers oder eines Bluetooth-Geräts wird eine Verbindung hergestellt.
    • Nach dem Einsteigen in ein Auto.
    • Nach der Ankunft zu Hause oder am Arbeitsplatz.

Durch die Einbindung eines einfachen API-Aufrufs in iOS 10 kann der Entwickler eine ansprechendere Sperrbildschirmerfahrung für Benutzer der Medien-App erstellen. Wenn Sie die MPPlayableContentManager -Klasse zum Verwalten der Medienwiedergabe verwenden, werden vollständige Mediensteuerelemente (wie 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 Entwickler sie verwenden können, um Datenverkehr an die Xamarin.iOS-App zu lenken. Es wurde der Schritt zum Implementieren proaktiver Vorschläge und vorgestellter Nutzungsrichtlinien behandelt.