Condividi tramite


Introduzione ai suggerimenti proattivi in Xamarin.iOS

Questo articolo illustra come usare i suggerimenti proattivi nell'app Xamarin.iOS per favorire l'engagement consentendo al sistema di presentare in modo proattivo informazioni utili automaticamente all'utente.

Novità di iOS 10, i suggerimenti proattivi presentano le novità per consentire agli utenti di interagire con un'app Xamarin.iOS presentando in modo proattivo informazioni utili automaticamente all'utente in momenti appropriati.

iOS 10 presenta nuovi modi di coinvolgere l'app consentendo al sistema di presentare in modo proattivo informazioni utili automaticamente all'utente in momenti appropriati. Proprio come iOS 9 ha offerto la possibilità di aggiungere una ricerca approfondita all'app usando Spotlight, Handoff e Siri Suggestions (vedi Nuove API di ricerca), con iOS 10 un'app può esporre funzionalità che possono essere presentate all'utente dal sistema all'interno delle posizioni seguenti:

  • Cambio app
  • Schermata di blocco
  • CarPlay
  • Mappe
  • Interazioni di Siri
  • Suggerimenti per QuickType

L'app espone questa funzionalità al sistema usando una raccolta di tecnologie come NSUserActivity, markup Web, Core Spotlight, MapKit, Lettore multimediale e UIKit. Inoltre, fornendo il supporto proattivo dei suggerimenti per l'app, si ottiene gratuitamente un'integrazione più approfondita di Siri.

Suggerimenti basati sulla posizione

Novità di iOS 10, la NSUserActivity classe include una MapItem proprietà che consente allo sviluppatore di fornire informazioni sulla posizione che possono essere usate in altri contesti. Ad esempio, se l'app visualizza recensioni di ristoranti, lo sviluppatore può impostare la MapItem proprietà sulla posizione del ristorante che l'utente sta visualizzando nell'app. Se l'utente passa all'app Mappe, la posizione del ristorante è automaticamente disponibile.

Se l'app supporta Ricerca app, può usare i nuovi componenti di indirizzo della CSSearchableItemAttributesSet classe per specificare le posizioni che l'utente potrebbe voler visitare. Impostando la MapItem proprietà, le altre proprietà vengono compilate automaticamente.

Oltre a impostare le proprietà del Latitude componente indirizzo e Longitude , è consigliabile che l'app fornisca anche le NamedLocation proprietà e PhoneNumbers , in modo che Siri possa avviare una chiamata alla posizione.

Suggerimenti basati su markup Web

iOS 9 ha aggiunto la possibilità di includere markup di dati strutturati nel sito Web che arricchisce il contenuto visualizzato dagli utenti nei risultati della ricerca Spotlight e Safari (vedere Ricerca con markup Web). iOS 10 aggiunge la possibilità di includere markup basato sulla posizione (ad esempio PostalAddress come definito da Schema.org) per migliorare ulteriormente l'esperienza dell'utente. Ad esempio, se un utente visualizza una pagina contrassegnata da una posizione nel sito Web, il sistema può suggerire la stessa posizione quando aprono Mappe.

Suggerimenti basati su testo

UIKit è stato espanso in iOS 10 per includere la proprietà TextContentType della classe UITextInputTraits per specificare il significato semantico del contenuto in un'area di testo. Con queste informazioni sul posto, il sistema può in genere selezionare automaticamente il tipo di tastiera appropriato, migliorare i suggerimenti di correzione automatica e integrare in modo proattivo le informazioni di altre app e siti Web.

Ad esempio, se l'utente immette testo in un campo di testo contrassegnato, UITextContentType.FullStreetAddressil sistema può suggerire la compilazione automatica del campo con la posizione in cui l'utente ha visualizzato di recente.

Suggerimenti basati su supporti

Se l'app riproduce elementi multimediali usando l'API MPPlayableContentManager , iOS 10 consente agli utenti di visualizzare l'immagine dell'album e riprodurre contenuti multimediali tramite l'app nella schermata di blocco.

Promemoria contestuali di Siri

Consente all'utente di usare Siri per creare rapidamente un promemoria per visualizzare il contenuto attualmente visualizzato nell'app in un secondo momento. Ad esempio, se stavano visualizzando una recensione di un ristorante nell'app, potrebbero richiamare Siri e dire "Ricordami di questo quando vado a casa". Siri genererà il promemoria con un collegamento alla revisione nell'app.

Suggerimenti basati su contatti

Consente di visualizzare i contatti dell'app (e le informazioni correlate al contatto) nell'app Contatto nel dispositivo iOS insieme a tutti i contatti degli utenti archiviati nel sistema.

Suggerimenti basati sulla condivisione di corse

Se un'app di condivisione delle corse usa l'API MKDirectionsRequest , iOS 10 la presenterà come opzione nel commutatore di app in momenti in cui è probabile che l'utente voglia eseguire una corsa. L'app deve anche essere registrata come app di condivisione delle corse specificando per MKDirectionsModeRideShare la chiave MKDirectionsApplicationSupportedModes nel relativo Info.plist file.

Se l'app supporta solo la condivisione delle corse, il suggerimento di sistema inizierà con "Get a ride to...", se sono supportati altri tipi di direzione di routing (ad esempio walking o bike), il sistema userà "Get directions to..."

Importante

L'oggetto MKMapItem ricevuto dall'app potrebbe non includere informazioni sulla longitudine e sulla latitudine e richiederà la geocodifica.

Implementazione di suggerimenti proattivi

L'aggiunta del supporto dei suggerimenti proattivi a un'app Xamarin.iOS è in genere semplice quanto l'implementazione di alcune API o l'espansione di alcune API che l'app potrebbe già implementare.

I suggerimenti proattivi funzionano con le app in tre modi principali:

  • NSUserActivity e Schema.org - NSUserActivity aiuta il sistema a comprendere con quali informazioni l'utente sta attualmente lavorando sullo schermo. Schema.org aggiunge funzionalità simili alle pagine Web.
  • Suggerimenti sulla posizione: se l'app offre o utilizza informazioni basate sulla posizione, queste estensioni dell'API offrono nuovi modi per condividere queste informazioni tra le app.
  • Suggerimenti app multimediali: il sistema può promuovere l'app e il relativo contenuto multimediale in base al contesto dell'interazione dell'utente con il dispositivo iOS.

Ed è supportato nell'app implementando quanto segue:

  • Handoff - NSUserActivity è stato aggiunto in iOS 8 per supportare Handoff, che consente allo sviluppatore di avviare un'attività su un dispositivo, quindi continuarla su un'altra (vedi Introduzione al handoff).
  • Ricerca in evidenza - iOS 9 ha aggiunto la possibilità di alzare di livello il contenuto dell'app dai risultati della ricerca spotlight usando NSUserActivity (vedi Ricerca con Core Spotlight).
  • Promemoria di Siri contestuali : in iOS 10 è NSUserActivity stato ampliato per consentire a Siri di fare rapidamente un promemoria per visualizzare il contenuto che l'utente sta attualmente visualizzando nell'app in un secondo momento.
  • Suggerimenti sulla posizione: iOS 10 migliora NSUserActivity per acquisire le posizioni visualizzate all'interno dell'app e promuoverle in molte posizioni in tutto il sistema.
  • Le richieste - NSUserActivity siri contestuali forniscono contesto alle informazioni presentate all'interno dell'app a Siri in modo che l'utente possa ottenere indicazioni stradali o effettuare una chiamata richiamando Siri dall'interno dell'app.
  • Interazioni contatto : novità di iOS 10, NSUserActivity consente alle app per le comunicazioni di essere promosse da una scheda contatto (nell'app Contatti) come metodo di comunicazione alternativo.

Tutte queste funzionalità hanno una cosa in comune, tutte usano NSUserActivity in una forma o un'altra per fornire la loro funzionalità.

NSUserActivity

Come indicato in precedenza, NSUserActivity aiuta il sistema a comprendere con quali informazioni l'utente sta attualmente lavorando sullo schermo. NSUserActivity è un meccanismo di memorizzazione nella cache dello stato leggero per acquisire l'attività dell'utente mentre passa attraverso l'app. Ad esempio, esaminare un'app ristorante:

Meccanismo di memorizzazione nella cache dello stato leggero NSUserActivity

Con le interazioni seguenti:

  1. Quando l'utente lavora con l'app, viene creato un NSUserActivity oggetto per ricreare lo stato dell'app in un secondo momento.
  2. Se l'utente cerca un ristorante, viene seguito lo stesso modello di creazione di attività.
  3. E ancora, quando l'utente visualizza un risultato. In questo ultimo caso, l'utente sta visualizzando una posizione e in iOS 10, il sistema è più consapevole di alcuni concetti (ad esempio interazioni di posizione o comunicazione).

Esaminare più in dettaglio l'ultima schermata:

Dettagli NSUserActivity

In questo caso l'app crea un NSUserActivity oggetto e viene popolato con informazioni per ricreare lo stato in un secondo momento. L'app include anche alcuni metadati, ad esempio il nome e l'indirizzo della posizione. Con questa attività creata, l'app consente a iOS di sapere che rappresenta lo stato corrente dell'utente.

L'app decide quindi se l'attività verrà pubblicizzata in modalità over-the-air per Handoff, salvata come valore temporaneo per i suggerimenti sulla posizione o aggiunta all'indice Spotlight sul dispositivo per la visualizzazione nei risultati della ricerca.

Per altre informazioni sulla ricerca Handoff e Spotlight, vedere le guide Introduttive a Handoff e iOS 9 Nuove API di ricerca.

Creazione di un'attività

Prima di creare un'attività, è necessario creare un identificatore del tipo di attività per identificarlo. L'identificatore del tipo di attività è una stringa breve aggiunta alla NSUserActivityTypes matrice del file dell'app Info.plist usata per identificare in modo univoco un determinato tipo di attività utente. Nella matrice sarà presente una voce per ogni attività supportata dall'app ed esposta a Ricerca app. Per altri dettagli, vedere le informazioni di riferimento sulla creazione di identificatori dei tipi di attività.

Esaminare un esempio di attività:

// 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();

Viene creata una nuova attività usando un identificatore del tipo di attività. Successivamente, vengono creati alcuni metadati che definiscono l'attività in modo che questo stato possa essere ripristinato in un secondo momento. L'attività viene quindi assegnata a un titolo significativo e allegata alle informazioni dell'utente. Infine, alcune funzionalità sono abilitate e l'attività viene inviata al sistema.

Il codice precedente potrebbe essere ulteriormente migliorato per includere metadati che forniscono contesto all'attività apportando le modifiche seguenti:

...

// 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();

Se lo sviluppatore ha un sito Web in grado di visualizzare le stesse informazioni dell'app, l'app può includere l'URL e il contenuto può essere visualizzato in altri dispositivi in cui l'app non è installata (tramite Handoff):

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

Ripristino di un'attività

Per rispondere all'utente toccando un risultato di ricerca (NSUserActivity) per l'app, modificare il file AppDelegate.cs ed eseguire l'override del ContinueUserActivity metodo . Ad esempio:

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;
}

Lo sviluppatore dovrà assicurarsi che sia lo stesso identificatore del tipo di attività (com.xamarin.platform) dell'attività creata in precedenza. L'app usa le informazioni archiviate in NSUserActivity per ripristinare lo stato in cui è stato interrotto l'utente.

Vantaggi della creazione di un'attività

Con la quantità minima di codice presentata in precedenza, l'app è ora in grado di sfruttare tre nuove funzionalità di iOS 10:

  • Handoff
  • Ricerca spotlight
  • Promemoria contestuali di Siri

La sezione seguente illustra come abilitare altre due nuove funzionalità di iOS 10:

  • Suggerimenti per la posizione
  • Richieste Siri contestuali

Suggerimenti basati sulla posizione

Si prenda l'esempio dell'app di ricerca ristorante precedente. Se è stato implementato NSUserActivity e popolato correttamente tutti i metadati e gli attributi, l'utente sarà in grado di eseguire le operazioni seguenti:

  1. Trovare un ristorante nell'app in cui vogliono incontrare un amico.
  2. Man mano che l'utente si allontana dall'app usando lo switcher dell'app multitasking, il sistema visualizzerà automaticamente un suggerimento (nella parte inferiore dello schermo) per ottenere indicazioni stradali per il ristorante usando l'app di spostamento preferita.
  3. Se l'utente passa all'app Messaggi e inizia a digitare "Let's meet at", la tastiera QuickType suggerisce automaticamente di incollare l'indirizzo del ristorante.
  4. Se l'utente passa all'app Mappe, l'indirizzo del ristorante viene suggerito automaticamente come destinazione.
  5. Questo funziona anche per le app di terze parti (che supportano NSUserActivity), in modo che l'utente possa passare a un'app di condivisione delle corse e l'indirizzo del ristorante viene suggerito automaticamente come destinazione anche lì.
  6. Fornisce anche il contesto a Siri, in modo che l'utente possa richiamare Siri all'interno dell'app ristorante e chiedere "Ottieni indicazioni..." e Siri fornirà indicazioni per il ristorante che l'utente sta visualizzando.

Tutte le funzionalità precedenti hanno una sola cosa in comune, indicano tutti da dove proviene il suggerimento. Nel caso dell'esempio precedente, si tratta dell'app fittizia di revisione del ristorante.

iOS 10 è stato migliorato per abilitare questa funzionalità per un'app tramite diverse piccole modifiche e aggiunte ai framework esistenti:

  • NSUserActivity include campi aggiuntivi per l'acquisizione delle informazioni sulla posizione visualizzate all'interno dell'app.
  • Sono state apportate diverse aggiunte a MapKit e CoreSpotlight per acquisire la posizione.
  • La funzionalità di riconoscimento della posizione è stata aggiunta a Siri, Mappe, tastiere, multitasking e altre app all'interno del sistema.

Per implementare i suggerimenti basati sulla posizione, iniziare con lo stesso codice di attività presentato in precedenza:

// 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();

Se l'app usa MapKit, è semplice come aggiungere la mappa MKMapItem corrente all'attività:

// Save MKMapItem location
activity.MapItem = myMapItem;

Se l'app non usa MapKit, può adottare Ricerca app e specificare i nuovi attributi seguenti per la posizione:

// 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;

Esaminare in dettaglio il codice precedente. Prima di tutto, il nome della posizione è obbligatorio in ogni istanza:

attributes.NamedLocation = "Apple Inc.";

Quindi, la descrizione basata sul testo della posizione è necessaria per le istanze basate su testo (ad esempio la tastiera QuickType):

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

La latitudine e la longitudine sono facoltative, ma assicurarsi che l'utente venga instradato alla posizione esatta a cui l'app vuole inviarla, quindi deve essere inclusa:

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

Impostando i numeri di telefono, l'app può ottenere l'accesso a Siri in modo che l'utente possa richiamare Siri dall'app pronunciando un messaggio simile al seguente:

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

Infine, l'app può indicare se l'istanza è adatta per la navigazione e le chiamate telefoniche:

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

Implementazione delle interazioni con i contatti

Novità di iOS 10, le app di comunicazione sono completamente integrate nell'app Contatti dalla scheda contatto. Per le app che hanno implementato interazioni di contatto, l'utente può aggiungere le informazioni dell'app a persone specifiche nei loro contatti. Se, ad esempio, preme il pulsante azione rapida nella parte superiore di una scheda per inviare un messaggio, l'app associata verrà elencata come opzione da cui inviare il messaggio.

Se è selezionata un'app di terze parti, può essere memorizzata e presentata come modo predefinito per inviare un messaggio alla persona specificata al successivo contatto dell'utente.

Le interazioni dei contatti vengono implementate nell'app usando NSUserActivity e il nuovo framework intents introdotto in iOS 10. Per altre informazioni sull'uso delle finalità, vedere le guide Understanding SiriKit Concepts and Implementing SiriKit (Informazioni sui concetti di SiriKit e implementazione di SiriKit ).

Donating Interactions

Osservare come l'app può donare interazioni:

Panoramica dell'donazione di interazioni

L'app crea un INInteraction oggetto che contiene una finalità (INIntent), i partecipanti e i metadati. La finalità rappresenta un'azione dell'utente, ad esempio l'esecuzione di una videochiamata o l'invio di un SMS. I partecipanti includono le persone che ricevono la comunicazione. I metadati definiscono informazioni di addizione, ad esempio l'invio corretto del messaggio e così via.

Lo sviluppatore non crea mai direttamente un'istanza di INIntent o INIntentResponse, userà una delle classi figlio specifiche (in base all'attività eseguita dall'app per conto dell'utente) che ereditano da queste classi padre. Ad esempio, INSendMessageIntent e INSendMessageIntentResponse per l'invio di un SMS.

Dopo aver popolato completamente l'interazione, chiamare il DonateInteraction metodo per informare il sistema che l'interazione è disponibile per l'uso.

Quando l'utente interagisce con l'app dalla scheda Contatto, l'interazione viene in bundle con un NSUserActivityoggetto , che viene quindi usato per avviare l'app:

L'interazione viene in bundle con un NSUserActivity usato per avviare l'app

Esaminare l'esempio seguente di finalità invia messaggio:

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
  }
}

Esaminando in dettaglio questo codice, viene creata e popolata un'istanza di NSUserActivity (come illustrato nella sezione Creazione di un'attività precedente). Successivamente, crea un'istanza di INSendMessageIntent (che eredita da INIntent) e la popola con i dettagli del messaggio inviato:

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

Viene INSendMessageIntentResponse creato e passato l'oggetto NSUserActivity creato in precedenza:

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

Un INInteraction oggetto viene compilato dalla finalità invia messaggio () e dalla risposta (INSendMessageIntentINSendMessageIntentResponse) appena creata:

var interaction = new INInteraction (intent, response);

Infine, il sistema sta notificando l'interazione:

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

Un gestore di completamento viene passato in cui l'app può rispondere alla donazione riuscita o non riuscita.

Procedure consigliate per le attività

Apple suggerisce le procedure consigliate seguenti quando si lavora con le attività:

  • Usare NeedsSave per gli aggiornamenti del payload differita.
  • Assicurarsi di mantenere un riferimento sicuro all'attività corrente.
  • Trasferire solo payload di piccole dimensioni che includono solo informazioni sufficienti per ripristinare lo stato.
  • Assicurarsi che gli identificatori del tipo di attività siano univoci e descrittivi usando la notazione DNS inversa per specificarli.

Schema.org

Come illustrato in precedenza, NSUserActivity aiuta il sistema a comprendere con quali informazioni l'utente sta attualmente lavorando sullo schermo. Schema.org aggiunge funzionalità simili alle pagine Web.

Schema.org può fornire gli stessi tipi di interazioni basate sulla posizione al sito Web. Apple ha progettato i nuovi suggerimenti sulla posizione per funzionare altrettanto bene quando vengono visualizzati in Safari come in un'app nativa.

Alcune Schema.org sfondo:

  • Fornisce uno standard di vocabolario di markup Web aperto.
  • Funziona includendo metadati strutturati nelle pagine Web.
  • Sono disponibili oltre 500 schemi che rappresentano vari concetti.
  • Implementandola nel sito Web, lo sviluppatore può acquisire alcuni dei vantaggi derivanti dall'uso NSUserActivity in un'app nativa.

Gli schemi vengono disposti in un albero come struttura, in cui tipi specifici, ad esempio Restaurant, ereditano da tipi più generici, ad esempio Local Business. Per altre informazioni, vedere Schema.org.

Ad esempio, se la pagina Web include i dati seguenti:

<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>

Se l'utente ha visitato questa pagina in Safari e quindi è passato a un'altra app, le informazioni sulla posizione della pagina verranno acquisite e offerte come suggerimento di posizione in altre parti del sistema (come illustrato in Attività precedenti).

Safari estrae qualsiasi elemento in una pagina Web conforme a una delle proprietà dello schema seguenti:

  • PostalAddress
  • GeoCoordinates
  • Proprietà telefonica.

Per altre informazioni, vedere la guida Alla ricerca con markup Web.

Utilizzo dei suggerimenti sulla posizione

Questa sezione successiva illustra l'uso di Suggerimento percorso proveniente da altre parti del sistema (ad esempio l'app Mappe) o altre app di terze parti.

Esistono due modi principali in cui l'app può utilizzare i suggerimenti per la posizione:

  • Tramite la tastiera QuickType.
  • Usando direttamente le informazioni sulla posizione nelle app di routing.

Suggerimenti per la posizione e tastiera QuickType

Se l'app gestisce gli indirizzi in formati basati su testo, l'app può sfruttare i suggerimenti di posizione tramite l'interfaccia utente quickType. iOS 10 espande l'interfaccia utente di QuickType con le funzionalità seguenti:

  • L'app può aggiungere suggerimenti sulla finalità semantica per i campi di testo nell'interfaccia utente.
  • L'app può ottenere suggerimenti proattivi nell'app.
  • L'app può trarre vantaggio dalla correzione automatica avanzata.

La nuova TextContentType proprietà dei controlli dei campi di testo in iOS 10 consente allo sviluppatore di definire la finalità semantica per il valore che l'utente immetterà in un determinato campo. Ad esempio:

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

Indicare al sistema che l'app prevede che l'utente immetta un indirizzo completo nel campo specificato. In questo modo la tastiera QuickType fornirà automaticamente i suggerimenti di posizione sulla tastiera quando l'utente immette un valore in questo campo.

Di seguito sono riportati alcuni dei tipi più comuni disponibili per lo sviluppatore nella UITextContentType classe statica:

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

Suggerimenti per l'instradamento di app e posizioni

Questa sezione esaminerà l'uso dei suggerimenti sulla posizione direttamente dall'interno di un'app di routing. Affinché l'app di routing aggiunga questa funzionalità, lo sviluppatore userà il framework esistente MKDirectionsRequest come indicato di seguito:

  • Per promuovere l'app in Multitasking.
  • Per registrare l'app come app di routing.
  • Per gestire l'avvio dell'app con un oggetto MapKit MKDirectionsRequest .
  • Per offrire a iOS la possibilità di imparare a suggerire l'app all'utente in momenti appropriati, in base all'engagement degli utenti.

Quando l'app viene avviata con un oggetto MapKit MKDirectionsRequest , dovrebbe iniziare automaticamente a fornire indicazioni all'utente sulla posizione richiesta o presentare un'interfaccia utente che semplifica l'avvio delle indicazioni stradali da parte dell'utente. Ad esempio:

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;
    }
  }    
}

Esaminare in dettaglio questo codice. Verifica se si tratta di una richiesta di destinazione valida:

if (MKDirectionsRequest.IsDirectionsRequestUrl(url)) {

In caso affermativo, crea un oggetto MKDirectionsRequest dall'URL:

var request = new MKDirectionsRequest(url);

Novità di iOS 10, l'app può essere inviata a un indirizzo che non dispone di coordinate geografiche, in modo che lo sviluppatore debba codificare l'indirizzo:

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

});

Suggerimenti per app multimediali

Se l'app gestisce qualsiasi tipo di supporto come un'app podcast o un contenuto multimediale di streaming, ad esempio audio o video, con iOS 10, può sfruttare i suggerimenti multimediali nel sistema.

Per le app che gestiscono i supporti, iOS supporta i comportamenti seguenti:

  • iOS promuove le app che è probabile che l'utente usi in base al comportamento precedente.
  • I suggerimenti correlati all'app verranno presentati in Spotlight e nella visualizzazione Oggi.
  • Se l'app soddisfa uno dei trigger seguenti, potrebbe essere elevata a un suggerimento per la schermata di blocco:
    • Dopo aver collegato le cuffie o un dispositivo Bluetooth, viene stabilita una connessione.
    • Dopo entrare in macchina.
    • Dopo essere arrivati a casa o al lavoro.

Includendo una semplice chiamata API in iOS 10, lo sviluppatore può creare un'esperienza della schermata di blocco più coinvolgente per gli utenti dell'app multimediale. Usando la MPPlayableContentManager classe per gestire la riproduzione multimediale, i controlli multimediali completi (come quelli presentati dall'app Musica) verranno presentati nella schermata di blocco per l'app.

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
  }
}

Riepilogo

Questo articolo ha illustrato i suggerimenti proattivi e ha illustrato come lo sviluppatore può usarli per indirizzare il traffico all'app Xamarin.iOS. È stato illustrato il passaggio per implementare Suggerimenti proattivi e presentare le linee guida per l'utilizzo.