Eseguire ricerche con Core Spotlight in Xamarin.iOS
Core Spotlight è un nuovo framework per iOS 9 che presenta un'API simile al database per aggiungere, modificare o eliminare collegamenti al contenuto all'interno dell'app. Gli elementi aggiunti con Core Spotlight saranno disponibili nella ricerca Spotlight nel dispositivo iOS.
Per un esempio dei tipi di contenuto che è possibile indicizzare usando Core Spotlight, esaminare le app Messaggi, Posta, Calendario e Note di Apple. Attualmente usano Core Spotlight per fornire risultati di ricerca.
Creazione di un elemento
Di seguito è riportato un esempio di creazione di un elemento e dell'indicizzazione tramite Core Spotlight:
using CoreSpotlight;
...
// Create attributes to describe an item
var attributes = new CSSearchableItemAttributeSet();
attributes.Title = "App Center Test";
attributes.ContentDescription = "Automatically test your app on 1,000 devices in the cloud.";
// Create item
var item = new CSSearchableItem ("1", "products", attributes);
// Index item
CSSearchableIndex.DefaultSearchableIndex.Index (new CSSearchableItem[]{ item }, (error) => {
// Successful?
if (error !=null) {
Console.WriteLine(error.LocalizedDescription);
}
});
Queste informazioni vengono visualizzate come segue in un risultato della ricerca:
Ripristino di un elemento
Quando l'utente tocca un elemento aggiunto al risultato della ricerca tramite Core Spotlight per l'app, viene chiamato il AppDelegate
metodo (questo metodo ContinueUserActivity
viene usato anche per NSUserActivity
). 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;
default:
if (userActivity.ActivityType == CSSearchableItem.ActionType.ToString ()) {
// Display content for searchable item...
}
break;
}
return true;
}
Si noti che questa volta viene verificata la presenza dell'attività con .ActivityType
CSSearchableItem.ActionType
Aggiornamento di un elemento
In alcuni casi potrebbe essere necessario modificare un elemento di indice creato con Core Spotlight, ad esempio una modifica del titolo o dell'immagine di anteprima. Per apportare questa modifica, viene usato lo stesso metodo usato per creare inizialmente l'indice.
Viene creato un nuovo CSSearchableItem
oggetto usando lo stesso ID usato per creare l'elemento e allegare un nuovo CSSearchableItemAttributeSet
oggetto contenente gli attributi modificati:
Quando questo elemento viene scritto nell'indice ricercabile, l'elemento esistente viene aggiornato con le nuove informazioni.
Eliminazione di un elemento
Core Spotlight offre diversi modi per eliminare un elemento di indice quando non è più necessario.
In primo luogo, è possibile eliminare un elemento in base al relativo identificatore, ad esempio:
// Delete Items by ID
CSSearchableIndex.DefaultSearchableIndex.Delete(new string[]{"1","16"},(error) => {
// Successful?
if (error !=null) {
Console.WriteLine(error.LocalizedDescription);
}
});
Successivamente, è possibile eliminare un gruppo di elementi di indice in base al nome di dominio. Ad esempio:
// Delete by Domain Name
CSSearchableIndex.DefaultSearchableIndex.DeleteWithDomain(new string[]{"domain-name"},(error) => {
// Successful?
if (error !=null) {
Console.WriteLine(error.LocalizedDescription);
}
});
Infine, è possibile eliminare tutti gli elementi di indice con il codice seguente:
// Delete all index items
CSSearchableIndex.DefaultSearchableIndex.DeleteAll((error) => {
// Successful?
if (error !=null) {
Console.WriteLine(error.LocalizedDescription);
}
});
Funzionalità di contenuti in evidenza di base aggiuntive
Core Spotlight offre le funzionalità seguenti che consentono di mantenere l'indice accurato e aggiornato:
- Supporto per gli aggiornamenti batch: se l'app deve creare o modificare un gruppo di indici di grandi dimensioni contemporaneamente, l'intero batch può essere inviato al
Index
metodo dellaCSSearchableIndex
classe in una sola chiamata. - Rispondere alle modifiche apportate all'indice: l'uso dell'app
CSSearchableIndexDelegate
può rispondere alle modifiche e alle notifiche dall'indice ricercabile. - Applica protezione dati: usando le classi di protezione dei dati, è possibile implementare la sicurezza per gli elementi aggiunti all'indice ricercabile usando Core Spotlight.