Eseguire ricerche con NSUserActivity in Xamarin.iOS

NSUserActivity è stato introdotto in iOS 8 e viene usato per fornire i dati per Handoff. Consente di creare attività in parti specifiche dell'app che possono quindi essere passate a un'altra istanza dell'app in esecuzione in un dispositivo iOS diverso. Il dispositivo ricevente può quindi continuare l'attività avviata nel dispositivo precedente, raccogliendo a destra dove l'utente ha interrotto. Per altre informazioni sull'uso di Handoff, vedere la documentazione introduttiva all'handoff .

Una novità di iOS 9 NSUserActivity può essere indicizzata (pubblicamente e privatamente) e cercata da Spotlight Search e Safari. Contrassegnando un oggetto NSUserActivity come ricercabile e aggiungendo metadati indicizzati, l'attività può essere elencata nei risultati della ricerca nel dispositivo iOS.

The App History overview

Se l'utente seleziona un risultato di ricerca appartenente a un'attività dall'app, l'app verrà avviata e l'attività descritta da NSUserActivity verrà riavviata e presentata all'utente.

Le proprietà seguenti di NSUserActivity vengono usate per supportare Ricerca app:

  • EligibleForHandoff - Se true, questa attività può essere usata in un'operazione handoff.
  • EligibleForSearch - Se true, questa attività verrà aggiunta all'indice sul dispositivo e presentata nei risultati della ricerca.
  • EligibleForPublicIndexing - Se true, questa attività verrà aggiunta all'indice basato sul cloud di Apple e presentata agli utenti (tramite ricerca) che non hanno già installato l'app nel dispositivo iOS. Per altri dettagli, vedere la sezione Indicizzazione della ricerca pubblica di seguito.
  • Title : fornisce un titolo per l'attività e viene visualizzato nei risultati della ricerca. Gli utenti possono anche cercare il testo del titolo stesso.
  • Keywords : matrice di stringhe usata per descrivere l'attività che verrà indicizzata e resa ricercabile dall'utente finale.
  • ContentAttributeSet : viene CSSearchableItemAttributeSet usato per descrivere ulteriormente l'attività in dettaglio e fornire contenuti avanzati nei risultati della ricerca.
  • ExpirationDate : se si desidera che un'attività venga visualizzata solo fino a una data specificata, è possibile specificare tale data qui.
  • WebpageURL - Se l'attività può essere visualizzata sul Web o se l'app supporta i collegamenti diretti di Safari, puoi impostare il collegamento da visitare qui.

Guida introduttiva A NSUserActivity

Segui queste istruzioni per implementare una ricerca nella NSUserActivity tua app:

Esistono alcuni vantaggi aggiuntivi da usare NSUserActivity per rendere il contenuto ricercabile.

Creazione di identificatori del tipo di attività

Prima di poter creare un'attività di ricerca, è 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 Info.plist dell'app 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.

Apple suggerisce di usare una notazione in stile DNS inversa per l'identificatore del tipo di attività per evitare conflitti. Ad esempio: com.company-name.appname.activity per attività specifiche basate su app o com.company-name.activity per attività che possono essere eseguite tra più app.

L'identificatore del tipo di attività viene usato durante la creazione di un'istanza NSUserActivity per identificare il tipo di attività. Quando un'attività viene continuata come risultato del tocco di un risultato della ricerca, il tipo di attività (insieme all'ID team dell'app) determina l'app da avviare per continuare l'attività.

Per creare gli identificatori del tipo di attività necessari per supportare questo comportamento, modificare il file Info.plist e passare alla visualizzazione Origine . Aggiungere una NSUserActivityTypes chiave e creare identificatori nel formato seguente:

The NSUserActivityTypes key and required identifiers in the plist editor

Nell'esempio precedente è stato creato un nuovo identificatore del tipo di attività per l'attività di ricerca (com.xamarin.platform). Quando si creano app personalizzate, sostituire il contenuto della NSUserActivityTypes matrice con gli identificatori del tipo di attività specifici per le attività supportate dall'app.

Creazione di un'attività

Di seguito è riportato un esempio di creazione di un'attività per una ricerca ospitata nell'indice del dispositivo:

// Create App Search 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;

// Add App Search ability
activity.EligibleForSearch = true;
activity.BecomeCurrent();

È possibile aggiungere altri dettagli impostando la ContentAttributeSet proprietà di NSUserActivity come segue:

Addition Search Details overview

Usando un ContentAttributeSet oggetto è possibile creare risultati di ricerca avanzati che consentono all'utente finale di interagire con essi.

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

Si noti che si tratta dello stesso override del metodo usato per rispondere alle richieste handoff. A questo punto, se l'utente fa clic su un collegamento dall'app nei risultati della ricerca spotlight, l'app verrà visualizzata in primo piano (o avviata se non è già in esecuzione) e il contenuto, lo spostamento o la funzionalità rappresentati da tale collegamento verranno visualizzati:

Restore Previous State from Search

Indicizzazione della ricerca pubblica

Come abbiamo visto in precedenza, iOS 9 semplifica l'accesso alla ricerca al contenuto e alle funzionalità dell'app che l'utente ha già individuato e usato in un determinato dispositivo iOS. Con l'indicizzazione pubblica, iOS 9 consente agli utenti che non hanno ancora individuato contenuti o funzionalità (o che non hanno ancora installato l'app) di ottenere tali risultati anche nelle ricerche.

L'indicizzazione pubblica funziona nel modo seguente:

  1. Quando crei un'attività per la tua app, puoi contrassegnarla come pubblica.
  2. Le attività pubbliche vengono inviate ad Apple e indicizzate nel cloud.
  3. Man mano che più utenti interagiscono con l'app in un dispositivo e usano la funzionalità o il contenuto specifico rappresentato dall'attività, aumenta la classificazione.
  4. I risultati pubblici più diffusi saranno disponibili per altri utenti, anche se l'app non è installata.
  5. Questi risultati pubblici verranno visualizzati in Ricerca spotlight e Safari (se l'attività include un URL).

È possibile eseguire l'attività di ricerca privata creata in precedenza ed espanderla in modo che sia pubblica:

// Create App Search 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;

// Add App Search ability
activity.EligibleForSearch = true;
activity.EligibleForPublicIndexing = true;
activity.BecomeCurrent();

Solo perché un'attività è stata impostata per l'indicizzazione pubblica impostando EligibleForPublicIndexing = true, non significa che verrà aggiunta automaticamente all'indice cloud pubblico di Apple. Prima di tutto devono essere soddisfatte le condizioni seguenti:

  1. Deve essere visualizzato nei risultati della ricerca ed essere selezionato da molti utenti. I risultati rimangono privati fino a quando non viene raggiunta una soglia di engagement delle attività.
  2. Il provisioning delle app impedisce che i dati specifici dell'utente vengano indicizzati e resi pubblici.

Vantaggi aggiuntivi

Adottando Ricerca app tramite NSUserActivity l'app, si ottengono anche le funzionalità seguenti:

  • Handoff : poiché Ricerca app espone contenuto, spostamento e/o funzionalità usando lo stesso meccanismo di Handoff (NSUserActivity), è possibile consentire facilmente agli utenti dell'app di avviare un'attività in un dispositivo e continuarla su un altro.
  • Suggerimenti di Siri: insieme ai suggerimenti standard normalmente eseguiti da Siri Suggestions, gli attivi dell'app possono essere suggeriti automaticamente.
  • Siri Smart Reminders : gli utenti potranno chiedere a Siri di ricordargli le attività dell'app.