Présentation des suggestions proactives dans Xamarin.iOS

Cet article explique comment utiliser des suggestions proactives dans l’application Xamarin.iOS pour stimuler l’engagement en permettant au système de présenter automatiquement des informations utiles de manière proactive à l’utilisateur.

Nouveauté d’iOS 10, les suggestions proactives présentent des façons pour les utilisateurs d’interagir avec une application Xamarin.iOS en présentant de manière proactive des informations utiles automatiquement à l’utilisateur aux moments appropriés.

iOS 10 présente de nouvelles façons de stimuler l’engagement dans l’application en permettant au système de présenter de manière proactive des informations utiles automatiquement à l’utilisateur aux moments appropriés. Tout comme iOS 9 offrait la possibilité d’ajouter une recherche approfondie à l’application à l’aide des suggestions Spotlight, Handoff et Siri (voir Nouvelles API de recherche), avec iOS 10, une application peut exposer des fonctionnalités qui peuvent être présentées à l’utilisateur par le système à partir des emplacements suivants :

  • Commutateur d’application
  • Écran de verrouillage
  • CarPlay
  • Maps
  • Siri Interactions
  • QuickType Suggestions

L’application expose cette fonctionnalité au système à l’aide d’une collection de technologies telles que NSUserActivity, le balisage web, Core Spotlight, MapKit, Lecteur multimédia et UIKit. En outre, en fournissant la prise en charge des suggestions proactives pour l’application, elle obtient une intégration Siri plus approfondie gratuitement.

Suggestions basées sur l’emplacement

Nouveauté d’iOS 10, 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 de restaurant, 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 bascule vers 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 souhaiter 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 et Longitude du composant d’adresse, il est recommandé que l’application fournisse également les NamedLocation propriétés et PhoneNumbers , afin que Siri puisse lancer un appel à l’emplacement.

Suggestions basées sur le balisage web

iOS 9 a été ajouté à la possibilité d’inclure le balisage de données structurées dans le site web qui enrichit le contenu que les utilisateurs voient dans les résultats de recherche Spotlight et Safari (voir Rechercher avec le balisage web). iOS 10 ajoute la possibilité d’inclure le balisage basé sur l’emplacement (tel que PostalAddress tel que défini par Schema.org) pour améliorer davantage l’expérience de l’utilisateur. Par exemple, si un utilisateur consulte une page d’emplacement marquée sur le site web, le système peut suggérer le même emplacement lorsqu’il ouvre Cartes.

Suggestions basées sur le texte

UIKit a été développé dans iOS 10 pour inclure la propriété TextContentType de la classe UITextInputTraits afin de spécifier la signification sémantique du contenu dans une zone de texte. Une fois ces informations en place, le système peut généralement sélectionner automatiquement le type de clavier approprié, améliorer les suggestions de correction automatique et intégrer de manière proactive les informations d’autres applications et sites web.

Par exemple, si l’utilisateur entre du texte dans un champ de texte marqué UITextContentType.FullStreetAddress, le système peut suggérer de remplir automatiquement le champ avec l’emplacement que l’utilisateur a récemment affiché.

Suggestions basées sur les médias

Si l’application lit le contenu multimédia à l’aide de l’API MPPlayableContentManager , iOS 10 permet aux utilisateurs d’afficher l’album et de lire le contenu multimédia via l’application sur l’écran de verrouillage.

Rappels contextuels siri

Permet à l’utilisateur d’utiliser Siri pour effectuer rapidement un rappel d’affichage du contenu qu’il affiche actuellement dans l’application à une date ultérieure. Par exemple, s’ils consultaient une révision de restaurant dans l’application, ils pourraient appeler Siri et dire « Rappelez-moi cela quand je rentre à la maison ». Siri génère le rappel avec un lien vers la révision dans l’application.

Suggestions basées sur les contacts

Permet aux contacts de l’application (et aux informations de contact associées) d’apparaître dans l’application Contact sur l’appareil iOS, ainsi que tous les contacts des utilisateurs stockés dans le système.

Suggestions basées sur le partage de trajets

Si une application de partage de trajet utilise l’API MKDirectionsRequest , iOS 10 la présente en tant qu’option dans le sélecteur d’application aux moments où l’utilisateur est susceptible de vouloir un tour. L’application doit également être inscrite en tant qu’application de partage de trajet en spécifiant pour MKDirectionsModeRideShare la clé MKDirectionsApplicationSupportedModes dans son Info.plist fichier.

Si l’application prend uniquement en charge le partage de trajet, la suggestion système commence par « Obtenir un trajet vers... ». Si d’autres types de sens de routage (tels que la marche ou le vélo) sont pris en charge, le système utilise « Obtenir les itinéraires vers... »

Important

L’objet MKMapItem que l’application reçoit peut ne pas inclure d’informations de longitude et de latitude et nécessite un géocodage.

Implémentation de suggestions proactives

L’ajout de la prise en charge des suggestions proactives à une application Xamarin.iOS est généralement aussi simple que d’implémenter quelques API ou d’étendre sur quelques API que l’application est peut-être déjà en train d’implémenter.

Les suggestions proactives fonctionnent avec les applications de trois manières main :

  • NSUserActivity et Schema.org - NSUserActivity aide le système à comprendre quelles informations l’utilisateur travaille actuellement à l’écran. Schema.org ajoute des capacités similaires aux pages web.
  • Suggestions d’emplacement : si l’application propose ou consomme des informations basées sur la localisation, ces extensions d’API offrent de nouvelles façons de partager ces informations entre les applications.
  • Suggestions d’application multimédia : le système peut promouvoir l’application et son contenu multimédia en fonction du contexte de l’interaction de l’utilisateur avec l’appareil iOS.

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

  • Handoff - NSUserActivity a été ajouté dans iOS 8 pour prendre en charge Handoff, qui permet au développeur de démarrer une activité sur un appareil, puis de la poursuivre sur un autre (voir Présentation de Handoff).
  • Recherche Spotlight - iOS 9 a ajouté la possibilité de promouvoir le contenu de l’application à partir des résultats de la recherche Spotlight à l’aide NSUserActivity de (voir Rechercher avec Core Spotlight).
  • Rappels contextuels Siri : dans iOS 10, NSUserActivity a été développé pour permettre à Siri d’effectuer rapidement un rappel pour afficher le contenu que l’utilisateur affiche actuellement dans l’application à une date ultérieure.
  • Suggestions d’emplacement : iOS 10 améliore la capture des NSUserActivity emplacements consultés à l’intérieur de l’application et leur promotion dans de nombreux endroits dans tout le système.
  • Demandes Siri contextuelles - NSUserActivity fournit un contexte aux informations présentées à l’intérieur de l’application à Siri afin que l’utilisateur puisse obtenir des instructions ou passer un appel appelant Siri à partir de l’application.
  • Interactions de contact : nouveauté d’iOS 10, NSUserActivity permet aux applications de communication d’être promues à partir d’un carte de contact (dans l’application Contacts) en tant que méthode de communication alternative.

Toutes ces fonctionnalités ont une chose en commun: elles utilisent NSUserActivity toutes sous une forme ou une 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 à mesure qu’il navigue dans l’application. Par exemple, en examinant une application de restaurant :

Mécanisme de mise en cache d’état léger NSUserActivity

Avec les interactions suivantes :

  1. Lorsque l’utilisateur travaille avec l’application, un 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 encore une fois, lorsque l’utilisateur affiche un résultat. Dans ce dernier cas, l’utilisateur affiche un emplacement et dans iOS 10, le système est plus conscient de certains concepts (tels que l’emplacement ou les interactions de communication).

Examinez de plus près le dernier écran :

Détails de NSUserActivity

Ici, l’application crée un NSUserActivity et il a été rempli 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. Une fois cette activité créée, l’application permet à iOS de savoir qu’elle représente l’état actuel de l’utilisateur.

L’application décide ensuite si l’activité sera annoncée en direct pour Handoff, enregistrée en tant que 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 Introduction to Handoff et iOS 9 New Search API .

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 notre 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 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 où 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 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;
}

Le développeur doit s’assurer 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 pour NSUserActivity 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 des projecteurs
  • 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

Prenons 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 où ils aimeraient rencontrer un ami.
  2. Lorsque l’utilisateur s’éloigne de l’application à l’aide du sélecteur d’application multitâche, le système affiche automatiquement une suggestion (en bas de l’écran) pour obtenir des instructions vers le restaurant à l’aide de son application de navigation préférée.
  3. Si l’utilisateur bascule vers l’application Messages et commence à taper « Rendez-vous à », le clavier QuickType suggère automatiquement le collage dans l’adresse du restaurant.
  4. Si l’utilisateur bascule vers l’application Cartes, l’adresse du restaurant est automatiquement suggérée comme destination.
  5. Cela fonctionne même pour les applications tierces (qui prennent en charge NSUserActivity), de sorte que l’utilisateur peut basculer vers une application de covoiturage et l’adresse du restaurant est automatiquement suggérée comme destination.
  6. Il fournit également un contexte à Siri, de sorte que l’utilisateur peut appeler Siri dans l’application de 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 toutes l’origine de la suggestion. Dans l’exemple ci-dessus, il s’agit de l’application de révision de restaurant fictive.

iOS 10 a été amélioré pour activer cette fonctionnalité pour une application via plusieurs petites modifications et ajouts aux frameworks existants :

  • 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.
  • Une fonctionnalité prenant en charge la localisation a été ajoutée à Siri, Cartes, Claviers, Multitâche et 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é que celui 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 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’application 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 le code ci-dessus en détail. Tout d’abord, le nom de l’emplacement est requis dans chaque instance :

attributes.NamedLocation = "Apple Inc.";

Ensuite, la description textuelle de l’emplacement est requise pour les instances textuelles (telles que 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 routé vers l’emplacement exact vers lequel l’application souhaite l’envoyer. Elle doit donc être incluse :

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 le instance convient à la navigation et aux appels téléphoniques :

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

Implémentation des interactions de contact

Nouveauté d’iOS 10, les applications de communication sont profondément intégrées à l’application Contacts à partir du carte de contact. Pour les applications qui ont implémenté des interactions de contact, l’utilisateur peut ajouter les informations de l’application donnée à des personnes spécifiques dans ses contacts. Et si, par exemple, ils appuient sur le bouton d’action rapide en haut d’un carte pour envoyer un message, l’application jointe est répertoriée comme option à partir de laquelle envoyer le message.

Si une application tierce est sélectionnée, elle peut être mémorisée et présentée comme méthode par défaut pour envoyer un message à la personne donnée la prochaine fois que l’utilisateur souhaite la contacter.

Les interactions de contact sont implémentées dans l’application à l’aide NSUserActivity de la nouvelle infrastructure Intentions introduite dans iOS 10. Pour plus d’informations sur l’utilisation des intentions, consultez nos guides Comprendre les concepts siriKit et implémenter SiriKit .

Don d’interactions

Examinez comment l’application peut donner des interactions :

Vue d’ensemble des interactions de don

L’application crée un INInteraction objet qui contient une intention (INIntent), des participants et des métadonnées. L’intention représente une action de l’utilisateur, telle qu’un appel vidéo ou l’envoi d’un sms. Les participants incluent les personnes recevant la communication. Les métadonnées définissent des informations d’ajout telles que l’envoi réussi du message, etc.

Le développeur ne crée jamais directement un instance de INIntent ou INIntentResponse, il utilisera l’une des classes enfants spécifiques (en fonction de la tâche que l’application effectue pour le compte de l’utilisateur) qui héritent de ces classes parentes. Par exemple, INSendMessageIntent et INSendMessageIntentResponse pour l’envoi d’un sms.

Une fois l’interaction entièrement renseignée, appelez la DonateInteraction méthode pour informer le système que l’interaction est disponible.

Lorsque l’utilisateur interagit avec l’application à partir de l’carte contact, l’interaction est groupée avec un NSUserActivity, qui est ensuite utilisé pour lancer l’application :

L’interaction est groupée avec un NSUserActivity utilisé pour lancer l’application

Examinez l’exemple suivant d’intention d’envoi de message :

using System;
using Foundation;
using UIKit;
using Intents;

namespace MonkeyNotification
{
  public class DonateInteraction
  {
    #region Constructors
    public DonateInteraction ()
    {
    }
    #endregion

    #region Public Methods
    public void SendMessageIntent (string text, INPerson from, INPerson[] to)
    {

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

      // Define details
      var info = new NSMutableDictionary ();
      info.Add (new NSString ("message"), new NSString (text));

      // Populate Activity
      activity.Title = "Sent MonkeyChat Message";
      activity.UserInfo = info;

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

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

      // Create message Intent
      var intent = new INSendMessageIntent (to, text, "", "MonkeyChat", from);

      // Create Intent Reaction
      var response = new INSendMessageIntentResponse (INSendMessageIntentResponseCode.Success, activity);

      // Create interaction
      var interaction = new INInteraction (intent, response);

      // Donate interaction to the system
      interaction.DonateInteraction ((err) => {
        // Handle donation error
        ...
      });
    }
    #endregion
  }
}

En examinant ce code en détail, il crée et remplit une instance de NSUserActivity (comme indiqué dans la section Création d’une activité ci-dessus). Ensuite, il crée un instance de INSendMessageIntent (qui hérite de INIntent) et le remplit avec les détails du message envoyé :

var intent = new INSendMessageIntent (to, text, "", "MonkeyChat", from);

Un INSendMessageIntentResponse est créé et passé le NSUserActivity créé ci-dessus :

var response = new INSendMessageIntentResponse (INSendMessageIntentResponseCode.Success, activity);

Un INInteraction est généré à partir de l’intention d’envoi de message (INSendMessageIntent) et de la réponse (INSendMessageIntentResponse) que vous venez de créer :

var interaction = new INInteraction (intent, response);

Enfin, le système est notifié de l’interaction :

// Donate interaction to the system
interaction.DonateInteraction ((err) => {
  // Handle donation error
  ...
});

Un gestionnaire d’achèvement est passé dans lequel l’application peut répondre à la réussite ou à l’échec du don.

Meilleures pratiques pour les activités

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

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

Schema.org

Comme indiqué ci-dessus, NSUserActivity aide le système à comprendre quelles informations l’utilisateur travaille actuellement à l’écran. Schema.org ajoute des capacités similaires aux pages web.

Schema.org pouvez fournir au site web les mêmes types d’interactions basées sur l’emplacement. Apple a conçu les nouvelles suggestions d’emplacement pour qu’elles fonctionnent aussi bien lorsqu’elles sont consultées dans Safari que dans une application native.

Quelques Schema.org arrière-plan :

  • Il fournit une norme de vocabulaire de balisage web ouvert.
  • Il fonctionne en incluant des métadonnées structurées sur les pages web.
  • Il existe plus de 500 schémas représentant différents concepts disponibles.
  • En l’implémentant sur le site web, le développeur peut acquérir certains des avantages de l’utilisation NSUserActivity dans une application native.

Les schémas sont organisés dans une arborescence semblable à une structure, où des types spécifiques tels que Restaurant héritent de types plus génériques tels que Local Business. Pour plus d’informations, consultez Schema.org.

Par exemple, si la page web incluait les données suivantes :

<script type="application/ld+json">
{
  "@context":"http://schema.org",
  "@type":"Restaurant",
  "telephone":"(415) 781-1111",
  "url":"https://www.yanksing.com",
  "address":{
    "@type":"PostalAddress",
    "streetAddress":"101 Spear St",
    "addressLocality":"San Francisco",
    "postalCode":"94105",
    "addressRegion":"CA"
  },
  "aggregateRating":{
    "@type":"AggregateRating",
    "ratingValue":"3.5",
    "reviewCount":"2022"
  }
}
</script>

Si l’utilisateur a visité cette page dans Safari, puis a basculé vers une autre application, les informations d’emplacement de la page sont capturées et proposées sous forme de suggestion d’emplacement dans d’autres parties du système (comme indiqué dans Activités ci-dessus).

Safari extrait tout ce qui se trouve sur une page web qui respecte l’une des propriétés de schéma suivantes :

  • PostalAddress
  • GeoCoordinates
  • Propriété de téléphone.

Pour plus d’informations, consultez notre guide Rechercher avec le balisage web .

Utilisation des suggestions d’emplacement

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

Il existe deux main façons dont l’application peut utiliser les suggestions d’emplacement :

  • Via le clavier QuickType.
  • Directement en consommant les informations d’emplacement dans les applications de routage.

Suggestions d’emplacement et clavier QuickType

Si l’application traite des adresses dans des formats textuels, l’application peut tirer parti des suggestions d’emplacement via l’interface utilisateur QuickType. iOS 10 développe l’interface utilisateur QuickType avec les fonctionnalités suivantes :

  • L’application peut ajouter des indicateurs sur l’intention sémantique des champs de texte dans l’interface utilisateur.
  • L’application peut obtenir des suggestions proactives dans l’application.
  • L’application peut tirer parti de la correction automatique améliorée.

La nouvelle TextContentType propriété des contrôles de champ de texte dans iOS 10 permet au développeur de définir l’intention sémantique de la valeur que l’utilisateur va entrer dans un champ donné. Par exemple :

var textField = new UITextField();
textField.TextContentType = UITextContentType.FullStreetAddress;

Indique au système que l’application s’attend à ce que l’utilisateur entre une adresse postale complète dans le champ donné. Cela permet au clavier QuickType de fournir automatiquement des suggestions d’emplacement sur le clavier lorsque l’utilisateur entre une valeur dans ce champ.

Voici quelques-uns des types les plus courants disponibles pour le développeur dans la UITextContentType classe statique :

  • Name
  • GivenName
  • FamilyName
  • Location
  • FullStreetAddress
  • AddressCityAndState
  • TelephoneNumber
  • EmailAddress

Suggestions d’applications et d’emplacements de routage

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 .
  • Pour donner à iOS la possibilité d’apprendre à suggérer l’application à l’utilisateur au moment approprié, en fonction de l’engagement de l’utilisateur.

Lorsque l’application est démarrée avec un objet MapKit MKDirectionsRequest , elle doit automatiquement commencer à donner des instructions à l’utilisateur à l’emplacement demandé, ou présenter une interface utilisateur qui permet à l’utilisateur de commencer facilement à 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 tel est le cas, il crée un MKDirectionsRequest à partir de l’URL :

var request = new MKDirectionsRequest(url);

Nouveauté dans iOS 10, l’application peut recevoir une adresse qui n’a pas de coordonnées géographiques, car le développeur doit encoder l’adresse :

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

Suggestions d’application multimédia

Si l’application gère n’importe quel type de média, par exemple une application de podcast ou un contenu multimédia en streaming tel que de l’audio ou de la vidéo, avec iOS 10, elle peut tirer parti des suggestions multimédias dans le système.

Pour les applications qui gèrent les médias, iOS prend en charge les comportements suivants :

  • iOS promeut les applications que l’utilisateur est susceptible d’utiliser en fonction de son comportement précédent.
  • Les suggestions relatives à l’application seront présentées dans Spotlight et dans la vue Aujourd’hui.
  • Si l’application répond à l’un des déclencheurs suivants, elle peut être élevée à une suggestion d’écran de verrouillage :
    • Après avoir branché un casque ou un appareil Bluetooth établit une connexion.
    • Après être arrivé dans une voiture.
    • Après être arrivé à la maison ou au travail.

En incluant un simple appel d’API dans iOS 10, le développeur peut créer une expérience d’écran de verrouillage plus attrayante pour les utilisateurs de l’application multimédia. En utilisant la MPPlayableContentManager classe pour gérer la lecture multimédia, les contrôles multimédias complets (comme ceux présentés par l’application Musique) sont présentés sur l’écran de verrouillage de l’application.

using System;
using MediaPlayer;
using UIKit;

namespace MonkeyPlayer
{
  public class PlayableContentDelegate : MPPlayableContentDelegate
  {
    #region Constructors
    public PlayableContentDelegate ()
    {
    }
    #endregion

    #region Override methods
    public override void InitiatePlaybackOfContentItem (MPPlayableContentManager contentManager, Foundation.NSIndexPath indexPath, Action<Foundation.NSError> completionHandler)
    {
      // Access the media item to play
      var item = LoadMediaItem (indexPath);

      // Populate the lock screen
      PopulateNowPlayingItem (item);

      // Prep item to be played
      var status = PreparePlayback (item);

      // Call completion handler
      completionHandler (null);
    }
    #endregion

    #region Public Methods
    public MPMediaItem LoadMediaItem (Foundation.NSIndexPath indexPath)
    {
      var item = new MPMediaItem ();

      // Load item from media store
      ...

      return item;
    }

    public void PopulateNowPlayingItem (MPMediaItem item)
    {
      // Get Info Center and album art
      var infoCenter = MPNowPlayingInfoCenter.DefaultCenter;
      var albumArt = (item.Artwork == null) ? new MPMediaItemArtwork (UIImage.FromFile ("MissingAlbumArt.png")) : item.Artwork;

      // Populate Info Center
      infoCenter.NowPlaying.Title = item.Title;
      infoCenter.NowPlaying.Artist = item.Artist;
      infoCenter.NowPlaying.AlbumTitle = item.AlbumTitle;
      infoCenter.NowPlaying.PlaybackDuration = item.PlaybackDuration;
      infoCenter.NowPlaying.Artwork = albumArt;
    }

    public bool PreparePlayback (MPMediaItem item)
    {
      // Prepare media item for playback
      ...

      // Return results
      return true;
    }
    #endregion
  }
}

Résumé

Cet article a abordé les suggestions proactives et a montré comment le développeur peut les utiliser pour générer du trafic vers l’application Xamarin.iOS. Il a abordé l’étape d’implémentation des suggestions proactives et a présenté des instructions d’utilisation.