Búsqueda con Core Spotlight en Xamarin.iOS
Core Spotlight es un nuevo marco para iOS 9 que presenta una API similar a la base de datos para agregar, editar o eliminar vínculos al contenido dentro de la aplicación. Los elementos que se han agregado con Core Spotlight estarán disponibles en la búsqueda de Spotlight en el dispositivo iOS.
Para obtener un ejemplo de los tipos de contenido que se pueden indexar mediante Core Spotlight, examine las aplicaciones Mensajes, Correo, Calendario y Notas de Apple. Todos usan actualmente Core Spotlight para proporcionar resultados de búsqueda.
Crear un elemento
A continuación se muestra un ejemplo de creación de un elemento e indexación mediante 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);
}
});
Esta información aparecerá como la siguiente en un resultado de búsqueda:
Restaurar un elemento
Cuando el usuario pulsa en un elemento agregado al resultado de búsqueda a través de Core Spotlight para la aplicación, se llama al método ContinueUserActivity
AppDelegate
(este método también se usa para NSUserActivity
). Por ejemplo:
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;
}
Tenga en cuenta que esta vez estamos comprobando si la actividad tiene una ActivityType
de CSSearchableItem.ActionType
.
Actualizar un elemento
Es posible que haya ocasiones en que se necesite modificar un elemento de índice con Core Spotlight, como un cambio en la imagen de título o miniatura. Para realizar este cambio, usamos el mismo método que se usó para crear inicialmente el índice.
Creamos un nuevo CSSearchableItem
con el mismo id. que se usó para crear el elemento y adjuntar un nuevo CSSearchableItemAttributeSet
que contenga los atributos modificados:
Cuando este elemento se escribe en el índice que se puede buscar, el elemento existente se actualiza con la nueva información.
Eliminar un elemento
Core Spotlight proporciona varias maneras de eliminar un elemento de índice cuando ya no es necesario.
En primer lugar, puede eliminar un elemento por su identificador, por ejemplo:
// Delete Items by ID
CSSearchableIndex.DefaultSearchableIndex.Delete(new string[]{"1","16"},(error) => {
// Successful?
if (error !=null) {
Console.WriteLine(error.LocalizedDescription);
}
});
A continuación, puede eliminar un grupo de elementos de índice por su nombre de dominio. Por ejemplo:
// Delete by Domain Name
CSSearchableIndex.DefaultSearchableIndex.DeleteWithDomain(new string[]{"domain-name"},(error) => {
// Successful?
if (error !=null) {
Console.WriteLine(error.LocalizedDescription);
}
});
Por último, puede eliminar todos los elementos de índice con el código siguiente:
// Delete all index items
CSSearchableIndex.DefaultSearchableIndex.DeleteAll((error) => {
// Successful?
if (error !=null) {
Console.WriteLine(error.LocalizedDescription);
}
});
Características principales adicionales de Spotlight
Core Spotlight tiene las siguientes características que ayudan a mantener el índice preciso y actualizado:
- Soporte de actualización por lotes: Si su aplicación necesita crear o modificar un gran grupo de índices al mismo tiempo, el lote completo se puede enviar al método
Index
de la claseCSSearchableIndex
en una sola llamada. - Responder a los cambios del índice: Al utilizar
CSSearchableIndexDelegate
su aplicación puede responder a cambios y notificaciones del índice de búsqueda. - Aplicar protección de datos: Mediante las clases de protección de datos, puede implementar seguridad en los elementos que agrega al índice de búsqueda usando Core Spotlight.