Partager via


Suggestions proactives watchOS dans Xamarin

Cet article explique comment utiliser des suggestions proactives dans une application watchOS 3 pour stimuler l’engagement en permettant au système de présenter automatiquement des informations utiles automatiquement à l’utilisateur.

Nouveautés de watchOS 3, suggestions proactives présentent des moyens d’actualités pour que les utilisateurs s’engagent avec une application Xamarin.iOS en présentant de manière proactive des informations utiles automatiquement à l’utilisateur à des moments appropriés.

À propos des suggestions proactives

Nouveauté de watchOS 3, NSUserActivity inclut une MapItem propriété qui permet à l’application de fournir des informations d’emplacement qui peuvent être utilisées dans d’autres contextes. Par exemple, si l’application affiche des avis sur l’hôtel et fournit un MapItem emplacement, si l’utilisateur passe à l’application Cartes, l’emplacement de l’hôtel qu’il consultait est disponible.

L’application expose cette fonctionnalité au système à l’aide d’une collection de technologies telles que NSUserActivity, MapKit, Lecteur multimédia et UIKit. En outre, en fournissant une prise en charge proactive des suggestions pour l’application, elle améliore l’intégration de Siri gratuitement.

Suggestions basées sur l’emplacement

Nouveautés de watchOS 3, la NSUserActivity classe inclut une MapItem propriété qui permet au développeur de fournir des informations d’emplacement qui peuvent être utilisées dans d’autres contextes. Par exemple, si l’application affiche des avis sur les restaurants, le développeur peut définir la MapItem propriété sur l’emplacement du restaurant que l’utilisateur affiche dans l’application. Si l’utilisateur passe à l’application Cartes, l’emplacement du restaurant est automatiquement disponible.

Si l’application prend en charge la recherche d’applications, elle peut utiliser les nouveaux composants d’adresse de la CSSearchableItemAttributesSet classe pour spécifier les emplacements que l’utilisateur peut visiter. En définissant la MapItem propriété, les autres propriétés sont automatiquement renseignées.

En plus de définir les Latitude propriétés du composant d’adresse et Longitude du composant d’adresse, il est recommandé que l’application fournisse les propriétés et PhoneNumbers les NamedLocation propriétés, afin que Siri puisse lancer un appel à l’emplacement.

Rappels contextuels Siri

Permet à l’utilisateur d’utiliser Siri pour faire rapidement un rappel pour afficher le contenu qu’il consulte actuellement dans l’application à une date ultérieure. Par exemple, s’ils consultaient une révision de restaurant dans l’application, ils pouvaient appeler Siri et dire « Rappelez-moi à ce sujet quand je rentre chez moi ». Siri génère le rappel avec un lien vers la révision dans l’application.

Implémentation de suggestions proactives

L’ajout de la prise en charge proactive des suggestions à l’application Xamarin.iOS est généralement aussi simple que l’implémentation de quelques API ou l’extension sur quelques API que l’application peut déjà implémenter.

Les suggestions proactives fonctionnent avec les applications de trois façons principales :

  • NSUserActivity - Aide le système à comprendre quelles informations l’utilisateur travaille actuellement à l’écran.
  • Suggestions d’emplacement : si l’application propose ou consomme des informations basées sur l’emplacement, ces extensions d’API offrent de nouvelles façons de partager ces informations entre les applications.

Et est pris en charge dans l’application en implémentant les éléments suivants :

  • Rappels contextuels Siri - Dans iOS 10, NSUserActivity a été développé pour permettre à Siri de faire rapidement un rappel pour afficher le contenu qu’il consulte actuellement dans l’application à une date ultérieure.
  • Suggestions d’emplacement : iOS 10 améliore NSUserActivity la capture des emplacements consultés à l’intérieur de l’application et les promeut dans de nombreux endroits dans tout le système.
  • Les demandes - NSUserActivity Siri contextuelles fournissent un contexte aux informations présentées à l’intérieur de l’application à Siri afin que l’utilisateur puisse obtenir des instructions ou appeler Siri à partir de l’application.

Toutes ces fonctionnalités ont une chose en commun, elles sont toutes utilisées NSUserActivity dans un formulaire ou un autre pour fournir leurs fonctionnalités.

NSUserActivity

Comme indiqué ci-dessus, NSUserActivity aide le système à comprendre quelles informations l’utilisateur travaille actuellement à l’écran. NSUserActivity est un mécanisme de mise en cache d’état léger pour capturer l’activité de l’utilisateur au fur et à mesure qu’il navigue dans l’application. Par exemple, en examinant l’application restaurant :

L’application restaurant

Avec les interactions suivantes :

  1. À mesure que l’utilisateur travaille avec l’application, il NSUserActivity est créé pour recréer l’état de l’application ultérieurement.
  2. Si l’utilisateur recherche un restaurant, le même modèle de création d’activités est suivi.
  3. Et là encore, lorsque l’utilisateur affiche un résultat. Dans ce dernier cas, l’utilisateur consulte un emplacement et dans iOS 10, le système est plus conscient de certains concepts (tels que les interactions de localisation ou de communication).

Examinez de plus près le dernier écran :

Charge utile NSUserActivity

Ici, l’application crée une NSUserActivity application et a été renseignée avec des informations pour recréer l’état ultérieurement. L’application a également inclus certaines métadonnées telles que le nom et l’adresse de l’emplacement. Avec cette activité créée, l’application indique à iOS qu’elle représente l’état actuel de l’utilisateur.

L’application décide ensuite si l’activité sera annoncée à l’air pour le transfert, enregistrée sous la forme d’une valeur temporaire pour les suggestions d’emplacement ou ajoutée à l’index Spotlight sur l’appareil pour l’affichage dans les résultats de recherche.

Pour plus d’informations sur la recherche Handoff et Spotlight, consultez nos guides d’introduction aux API de handoff et iOS 9 New Search.

Création d’une activité

Avant de créer une activité, un identificateur de type d’activité doit être créé pour l’identifier. L’identificateur de type d’activité est une chaîne courte ajoutée au NSUserActivityTypes tableau du fichier de Info.plist l’application utilisé pour identifier de manière unique un type d’activité utilisateur donné. Il y aura une entrée dans le tableau pour chaque activité que l’application prend en charge et expose à La recherche d’applications. Pour plus d’informations, consultez les informations de référence sur la création d’identificateurs de type d’activité.

Examinez un exemple d’activité :

// Create App Activity
var activity = new NSUserActivity ("com.xamarin.platform");

// Define details
var info = new NSMutableDictionary ();
info.Add(new NSString("link"),new NSString("http://xamarin.com/platform"));

// Populate Activity
activity.Title = "The Xamarin Platform";
activity.UserInfo = info;

// Enable capabilities
activity.EligibleForSearch = true;
activity.EligibleForHandoff = true;
activity.EligibleForPublicIndexing = true;

// Inform system of Activity
activity.BecomeCurrent();

Une nouvelle activité est créée à l’aide d’un identificateur de type d’activité. Ensuite, certaines métadonnées définissant l’activité sont créées afin que cet état puisse être restauré à une date ultérieure. Ensuite, l’activité reçoit un titre explicite et est attachée aux informations de l’utilisateur. Enfin, certaines fonctionnalités sont activées et l’activité est envoyée au système.

Le code ci-dessus peut être amélioré pour inclure des métadonnées qui fournissent un contexte à l’activité en apportant les modifications suivantes :

...

// Provide context
var attributes = new CSSearchableItemAttributeSet ("com.xamarin.location");
attributes.ThumbnailUrl = myThumbnailURL;
attributes.Keywords = new string [] { "software", "mobile", "language" };
activity.ContentAttributeSet = attributes;

// Inform system of Activity
activity.BecomeCurrent();

Si le développeur dispose d’un site web capable d’afficher les mêmes informations que l’application, l’application peut inclure l’URL et le contenu peut être affiché sur d’autres appareils dont l’application n’est pas installée (via handoff) :

// Restore on the web
activity.WebPageUrl = new NSUrl("http://xamarin.com/platform");

Restauration d’une activité

Pour répondre à l’utilisateur en appuyant sur un résultat de recherche (NSUserActivity) pour l’application, modifiez le fichier AppDelegate.cs et remplacez la ContinueUserActivity méthode. 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;
    }

    return true;
}

Vérifiez qu’il s’agit du même identificateur de type d’activité (com.xamarin.platform) que l’activité créée ci-dessus. L’application utilise les informations stockées dans le NSUserActivity pour restaurer l’état à l’endroit où l’utilisateur s’est arrêté.

Avantages de la création d’une activité

Avec la quantité minimale de code présentée ci-dessus, l’application est désormais en mesure de tirer parti de trois nouvelles fonctionnalités iOS 10 :

  • Handoff
  • Recherche à la une
  • Rappels contextuels Siri

La section suivante examine l’activation de deux autres nouvelles fonctionnalités iOS 10 :

  • Suggestions d’emplacement
  • Demandes Siri contextuelles

Suggestions basées sur l’emplacement

Prenez l’exemple de l’application de recherche de restaurant ci-dessus. S’il a implémenté NSUserActivity et rempli correctement toutes les métadonnées et attributs, l’utilisateur peut effectuer les opérations suivantes :

  1. Trouvez un restaurant dans l’application à laquelle ils aimeraient rencontrer un ami.
  2. Si l’utilisateur passe à l’application Cartes, l’adresse du restaurant est automatiquement suggérée comme destination.
  3. Cela fonctionne même pour les applications tierces (qui prennent en charge NSUserActivity), afin que l’utilisateur puisse basculer vers une application de partage de trajet et l’adresse du restaurant est automatiquement suggérée comme destination là-bas.
  4. Il fournit également un contexte à Siri, afin que l’utilisateur puisse appeler Siri dans l’application restaurant et demander « Obtenir des instructions... » et Siri fournira des instructions au restaurant que l’utilisateur consulte.

Toutes les fonctionnalités ci-dessus ont une chose en commun, elles indiquent tous où la suggestion provient initialement. Dans le cas de l’exemple ci-dessus, il s’agit de l’application de révision fictive de restaurant.

watchOS 3 a été amélioré pour activer cette fonctionnalité pour une application via plusieurs petites modifications et ajouts aux infrastructures existantes :

  • NSUserActivity contient des champs supplémentaires pour capturer les informations d’emplacement qui sont consultées à l’intérieur de l’application.
  • Plusieurs ajouts ont été apportés à MapKit et CoreSpotlight pour capturer l’emplacement.
  • La fonctionnalité de prise en charge de l’emplacement a été ajoutée à Siri, Cartes, Multitasking et d’autres applications au sein du système.

Pour implémenter des suggestions basées sur l’emplacement, commencez par le même code d’activité présenté ci-dessus :

// Create App Activity
var activity = new NSUserActivity ("com.xamarin.platform");

// Define details
var info = new NSMutableDictionary ();
info.Add(new NSString("link"),new NSString("http://xamarin.com/platform"));

// Populate Activity
activity.Title = "The Xamarin Platform";
activity.UserInfo = info;

// Enable capabilities
activity.EligibleForSearch = true;
activity.EligibleForHandoff = true;
activity.EligibleForPublicIndexing = true;

// Provide context
var attributes = new CSSearchableItemAttributeSet ("com.xamarin.location");
attributes.ThumbnailUrl = myThumbnailURL;
attributes.Keywords = new string [] { "software", "mobile", "language" };
activity.ContentAttributeSet = attributes;

// Restore on the web
activity.WebPageUrl = new NSUrl("http://xamarin.com/platform");

// Inform system of Activity
activity.BecomeCurrent();

Si l’application utilise MapKit, il est aussi simple que d’ajouter la carte MKMapItem actuelle à l’activité :

// Save MKMapItem location
activity.MapItem = myMapItem;

Si l’application n’utilise pas MapKit, elle peut adopter la recherche d’applications et spécifier les nouveaux attributs suivants pour l’emplacement :

// Provide context
var attributes = new CSSearchableItemAttributeSet ("com.xamarin.location");
...

attributes.NamedLocation = "Apple Inc.";
attributes.SubThoroughfare = "1";
attributes.Thoroughfare = "Infinite Loop";
attributes.City = "Cupertino";
attributes.StateOrProvince = "CA";
attributes.Country = "United States";
attributes.Latitude = 37.33072;
attributes.Longitude = 122.029674;
attributes.PhoneNumbers = new string[]{"(800) 275-2273"};
attributes.SupportsPhoneCalls = true;
attributes.SupportsNavigation = true;

Examinez en détail le code ci-dessus. Tout d’abord, le nom de l’emplacement est requis dans chaque instance :

attributes.NamedLocation = "Apple Inc.";

Ensuite, la description textuelle requise pour les instances textuelles (par exemple, le clavier QuickType) :

attributes.SubThoroughfare = "1";
attributes.Thoroughfare = "Infinite Loop";
attributes.City = "Cupertino";
attributes.StateOrProvince = "CA";
attributes.Country = "United States";

La latitude et la longitude sont facultatives, mais assurez-vous que l’utilisateur est acheminé vers l’emplacement exact auquel l’application souhaite les envoyer :

attributes.Latitude = 37.33072;
attributes.Longitude = 122.029674;

En définissant les numéros de téléphone, l’application peut accéder à Siri afin que l’utilisateur puisse appeler Siri à partir de l’application en disant quelque chose comme * « Appeler cet endroit » :

attributes.PhoneNumbers = new string[]{"(800) 275-2273"};

Enfin, l’application peut indiquer si l’instance convient pour la navigation et les appels téléphoniques :

attributes.SupportsPhoneCalls = true;
attributes.SupportsNavigation = true;

Meilleures pratiques relatives aux activités

Apple suggère les meilleures pratiques suivantes lors de l’utilisation des activités :

  • Utiliser NeedsSave pour les mises à jour de charge utile différées.
  • Veillez à conserver une référence forte à l’activité actuelle.
  • Transférez uniquement de petites charges utiles qui incluent juste suffisamment d’informations pour restaurer l’état.
  • Vérifiez que les identificateurs de type d’activité sont uniques et descriptifs à l’aide de la notation DNS inversée pour les spécifier.

Consommation de suggestions d’emplacement

Cette section suivante traite de la consommation de suggestion d’emplacement provenant d’autres parties du système (telles que l’application Cartes) ou d’autres applications tierces.

Suggestions relatives au routage des applications et des emplacements

Cette section examine l’utilisation des suggestions d’emplacement directement à partir d’une application de routage. Pour que l’application de routage ajoute cette fonctionnalité, le développeur tire parti de l’infrastructure existante MKDirectionsRequest comme suit :

  • Pour promouvoir l’application en multitâche.
  • Pour inscrire l’application en tant qu’application de routage.
  • Pour gérer le lancement de l’application avec un objet MapKit MKDirectionsRequest .
  • Donnez à watchOS la possibilité d’apprendre à suggérer l’application en fonction de l’engagement de l’utilisateur.

Lorsque l’application est démarrée avec un objet MapKit MKDirectionsRequest , elle doit commencer automatiquement à donner des instructions à l’utilisateur à l’emplacement demandé ou présenter une interface utilisateur qui permet à l’utilisateur de commencer à obtenir des instructions. Par exemple :

using System;
using Foundation;
using UIKit;
using MapKit;
using CoreLocation;

namespace MonkeyChat
{
    [Register ("AppDelegate")]
    public class AppDelegate : UIApplicationDelegate, IUISplitViewControllerDelegate
    {
        ...

        public override bool OpenUrl (UIApplication app, NSUrl url, NSDictionary options)
        {
            if (MKDirectionsRequest.IsDirectionsRequestUrl (url)) {
                var request = new MKDirectionsRequest (url);
                var coordinate = request.Destination?.Placemark.Location?.Coordinate;
                var address = request.Destination.Placemark.AddressDictionary;
                if (coordinate.IsValid()) {
                    var geocoder = new CLGeocoder ();
                    geocoder.GeocodeAddress (address, (place, err) => {
                        // Handle the display of the address

                    });
                }
            }

            return true;
        }
    }
}

Examinez ce code en détail. Il teste pour voir s’il s’agit d’une demande de destination valide :

if (MKDirectionsRequest.IsDirectionsRequestUrl(url)) {

Si c’est le cas, il crée une MKDirectionsRequest à partir de l’URL :

var request = new MKDirectionsRequest(url);

Nouveautés de watchOS 3, l’application peut être envoyée à une adresse qui n’a pas de coordonnées géographiques, ce qui entraîne l’encodage de l’adresse par le développeur :

var geocoder = new CLGeocoder();
geocoder.GeocodeAddress(address, (place, err)=> {
    // Handle the display of the address

});

Résumé

Cet article a abordé les suggestions proactives et a montré comment le développeur peut les utiliser pour piloter le trafic vers une application Xamarin.iOS pour watchOS. Il a abordé l’étape pour implémenter des suggestions proactives et présenté des instructions d’utilisation.