Compartir a través de


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:

Introducción a los resultados de búsqueda principales de Spotlight

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 ContinueUserActivityAppDelegate (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:

Información general sobre la actualización de un elemento

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 clase CSSearchableIndex 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.