Condividi tramite


Suggerimenti proattivi watchOS in Xamarin

Questo articolo illustra come usare Suggerimenti proattivi in un'app watchOS 3 per favorire l'engagement consentendo al sistema di presentare in modo proattivo informazioni utili automaticamente all'utente.

Novità di watchOS 3, Suggerimenti proattivi presenta 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.

Informazioni sui suggerimenti proattivi

Novità di watchOS 3, NSUserActivity include una MapItem proprietà che consente all'app di fornire informazioni sulla posizione che possono essere usate in altri contesti. Ad esempio, se l'app visualizza le recensioni degli hotel e fornisce una MapItem posizione, se l'utente passa all'app Mappe, la posizione dell'hotel che stava semplicemente visualizzando sarebbe disponibile.

L'app espone questa funzionalità al sistema usando una raccolta di tecnologie come NSUserActivity, 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 watchOS 3, 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.

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.

Implementazione di suggerimenti proattivi

L'aggiunta del supporto dei suggerimenti proattivi all'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 - Aiuta il sistema a capire con quali informazioni l'utente sta attualmente lavorando sullo schermo.
  • 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.

Ed è supportato nell'app implementando quanto segue:

  • Promemoria di Siri contestuali : in iOS 10 è NSUserActivity stato ampliato per consentire a Siri di creare rapidamente un promemoria per visualizzare il contenuto attualmente visualizzato 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.

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 l'app ristorante:

L'app ristorante

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:

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

Verificare 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. Se l'utente passa all'app Mappe, l'indirizzo del ristorante viene suggerito automaticamente come destinazione.
  3. 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ì.
  4. 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.

WatchOS 3 è 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, 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 in 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:

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 a *"Chiama questo posto":

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;

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.

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.

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 .
  • Offrire a watchOS la possibilità di imparare a suggerire l'app in base al coinvolgimento 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 watchOS 3, 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

});

Riepilogo

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