Rechercher avec Core Spotlight dans Xamarin.iOS

Core Spotlight est une nouvelle infrastructure pour iOS 9 qui présente une API de type base de données pour ajouter, modifier ou supprimer des liens vers du contenu au sein de votre application. Les éléments ajoutés à l’aide de Core Spotlight seront disponibles dans la recherche Spotlight sur l’appareil iOS.

Pour obtenir un exemple des types de contenu qui peuvent être indexés à l’aide de Core Spotlight, consultez les applications Messages, Courrier, Calendrier et Notes d’Apple. Ils utilisent tous Core Spotlight pour fournir des résultats de recherche.

Création d’un élément

Voici un exemple de création d’un élément et de son indexation à l’aide de 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);
    }
});

Ces informations s’affichent comme suit dans un résultat de recherche :

Core Spotlight search result overview

Restauration d’un élément

Lorsque l’utilisateur appuie sur un élément ajouté au résultat de recherche via Core Spotlight pour votre application, la AppDelegate méthode est appelée (cette méthode ContinueUserActivity est également utilisée pour NSUserActivity). Par exemple :

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

Notez que cette fois, nous sommes case activée pour l’activité ayant un ActivityType de CSSearchableItem.ActionType.

Mise à jour d’un élément

Il peut arriver qu’un élément d’index que nous avons créé avec Core Spotlight soit modifié, par exemple une modification du titre ou de l’image miniature est nécessaire. Pour apporter cette modification, nous utilisons la même méthode que celle utilisée pour créer initialement l’index. Nous créons un nouvel CSSearchableItem ID à l’aide du même ID que celui utilisé pour créer l’élément et attacher un nouvel CSSearchableItemAttributeSet élément contenant les attributs modifiés :

Updating an Item overview

Lorsque cet élément est écrit dans l’index pouvant faire l’objet d’une recherche, l’élément existant est mis à jour avec les nouvelles informations.

Suppression d’un élément

Core Spotlight offre plusieurs façons de supprimer un élément d’index lorsqu’il n’est plus nécessaire.

Tout d’abord, vous pouvez supprimer un élément par son identificateur, par exemple :

// Delete Items by ID
CSSearchableIndex.DefaultSearchableIndex.Delete(new string[]{"1","16"},(error) => {
    // Successful?
    if (error !=null) {
        Console.WriteLine(error.LocalizedDescription);
    }
});

Ensuite, vous pouvez supprimer un groupe d’éléments d’index par leur nom de domaine. Par exemple :

// Delete by Domain Name
CSSearchableIndex.DefaultSearchableIndex.DeleteWithDomain(new string[]{"domain-name"},(error) => {
    // Successful?
    if (error !=null) {
        Console.WriteLine(error.LocalizedDescription);
    }
});

Enfin, vous pouvez supprimer tous les éléments d’index avec le code suivant :

// Delete all index items
CSSearchableIndex.DefaultSearchableIndex.DeleteAll((error) => {
    // Successful?
    if (error !=null) {
        Console.WriteLine(error.LocalizedDescription);
    }
});

Fonctionnalités principales supplémentaires à la une

Core Spotlight propose les fonctionnalités suivantes qui aident à maintenir l’index à jour et à jour :

  • Prise en charge des mises à jour batch : si votre application doit créer ou modifier un grand groupe d’index en même temps, l’ensemble du lot peut être envoyé à la Index méthode de la CSSearchableIndex classe en un seul appel.
  • Répondre aux modifications d’index : l’utilisation de CSSearchableIndexDelegate votre application peut répondre aux modifications et aux notifications de l’index pouvant faire l’objet d’une recherche.
  • Appliquer la protection des données : à l’aide des classes de protection des données, vous pouvez implémenter la sécurité sur les éléments que vous ajoutez à l’index pouvant faire l’objet d’une recherche à l’aide de Core Spotlight.