Búsqueda con contenido destacado principal 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ía como la siguiente en un resultado de búsqueda:

Core Spotlight search result overview

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 AppDelegate método (este método ContinueUserActivity 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 un 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 identificador que se usó para crear el elemento y adjuntar un nuevo CSSearchableItemAttributeSet que contenga los atributos modificados:

Updating an Item overview

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:

  • Compatibilidad con actualizaciones por lotes: si la aplicación necesita crear o modificar un grupo grande de índices al mismo tiempo, se puede enviar todo el Index lote al método de la CSSearchableIndex clase en una llamada.
  • Responder a los cambios de índice: el uso de la CSSearchableIndexDelegate aplicación puede responder a cambios y notificaciones del índice que se puede buscar.
  • Aplicar protección de datos : mediante las clases de protección de datos, puede implementar la seguridad en los elementos que se agregan al índice que se puede buscar mediante Core Spotlight.