Partager via


Présentation des suggestions proactives dans Xamarin.iOS

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

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

iOS 10 présente de nouvelles façons de conduire l’engagement à l’application en permettant au système de présenter de manière proactive des informations utiles automatiquement à l’utilisateur à des moments appropriés. Tout comme iOS 9 a fourni la possibilité d’ajouter une recherche approfondie à l’application à l’aide de Spotlight, Handoff et Siri Suggestions (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 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 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 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.

Suggestions basées sur les marques web

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

Suggestions textuelles

UIKit a été développé dans iOS 10 pour inclure la propriété TextContentType de la classe UITextInputTraits pour spécifier la signification sémantique du contenu dans une zone de texte. Avec 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 des informations à partir 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 à l’emplacement que l’utilisateur a récemment consulté.

Suggestions basées sur les médias

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

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.

Suggestions basées sur les contacts

Permet aux contacts de l’application (et aux informations 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 chevaux

Si une application de partage de trajet utilise l’API MKDirectionsRequest , iOS 10 la présente comme une option dans le sélecteur d’application à des moments où l’utilisateur est susceptible de vouloir un tour. L’application doit également être inscrite en tant qu’application de partage de tour en spécifiant la MKDirectionsModeRideShareclé 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 à... », si d’autres types de routage (tels que marche ou vélo) sont pris en charge, le système utilise « Obtenir des itinéraires pour... »

Important

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

Implémentation de suggestions proactives

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

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

  • 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 l’emplacement, 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 :

  • Le transfert a été ajouté dans iOS 8 pour prendre en charge handoff, ce qui permet au développeur de démarrer une activité sur un appareil, puis de le poursuivre sur un autre (voir Présentation de la remise). - NSUserActivity
  • Recherche à la une - iOS 9 a ajouté la possibilité de promouvoir le contenu de l’application à partir des résultats de la recherche Spotlight à l’aide NSUserActivity (voir Recherche avec Core Spotlight).
  • Rappels contextuels Siri - Dans iOS 10, NSUserActivity a été développé pour permettre à Siri de faire rapidement un rappel pour afficher le contenu que l’utilisateur 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.
  • Interactions avec les contacts : nouveautés dans iOS 10, NSUserActivity permet aux applications de communication d’être promues à partir d’un carte de contact (dans l’application Contacts) comme méthode de communication alternative.

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 une application de restaurant :

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

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 :

Détails de 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;
}

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 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. Lorsque l’utilisateur s’éloigne de l’application à l’aide du commutateur 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 « Nous allons rencontrer à », le clavier QuickType suggère automatiquement de coller dans l’adresse du restaurant.
  4. Si l’utilisateur passe à 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), 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.
  6. 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.

IOS 10 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.
  • Les fonctionnalités prenant en charge l’emplacement ont été ajoutées à 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é 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 de l’emplacement est 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 routé vers l’emplacement exact auquel l’application souhaite les envoyer, de sorte qu’elle doit ê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 l’instance convient pour la navigation et les appels téléphoniques :

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

Implémentation des interactions avec les contacts

Nouveautés 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 leurs contacts. Et si, par exemple, ils atteignent le bouton d’action rapide en haut d’un carte pour envoyer un message, l’application jointe est répertoriée comme option d’envoi du message.

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

Les interactions de contact sont implémentées dans l’application à l’aide NSUserActivity de la nouvelle infrastructure Intents introduite dans iOS 10. Pour plus d’informations sur l’utilisation des intentions, consultez nos guides De compréhension des concepts sirikit et implémentation de 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 utilisateur telle que l’envoi d’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 supplémentaires telles que l’envoi réussi du message, etc.

Le développeur ne crée jamais directement une instance de INIntent ou INIntentResponseutilise 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 remplie, appelez la DonateInteraction méthode pour informer le système que l’interaction est disponible à utiliser.

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

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

Examinez l’exemple suivant d’une 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 une instance de INSendMessageIntent (qui hérite de INIntent) et la remplit avec les détails du message en cours d’envoi :

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

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

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

Une INInteraction valeur générée à partir de l’intention d’envoi de message (INSendMessageIntent) et de la réponse (INSendMessageIntentResponse) vient 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 transmis dans lequel l’application peut répondre au don réussi ou défaillant.

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.

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 les mêmes types d’interactions basées sur l’emplacement sur le site web. Apple a conçu les nouvelles suggestions d’emplacement pour fonctionner aussi bien lorsqu’il est consulté dans Safari qu’il le fait dans une application native.

Certains Schema.org arrière-plan :

  • Il fournit une norme de vocabulaire de balisage web ouverte.
  • Il fonctionne en incluant des métadonnées structurées sur des 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 telle que la 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 basculé vers une autre application, les informations d’emplacement de la page sont capturées et proposées en tant que suggestion d’emplacement dans d’autres parties du système (comme indiqué dans Activités ci-dessus).

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

  • PostalAddress
  • GeoCoordinates
  • Une propriété téléphonique.

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

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.

Il existe deux façons principales pour l’application de consommer des 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 texte, 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 conseils 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 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 .
  • Pour donner à iOS la possibilité d’apprendre à suggérer l’application à l’utilisateur à des moments appropriés, 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 d’iOS 10, 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

});

Suggestions d’application multimédia

Si l’application gère n’importe quel type de média comme une application podcast ou un contenu multimédia en streaming tel que l’audio ou la vidéo, avec iOS 10, il 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é des écouteurs ou un appareil Bluetooth établit une connexion.
    • Après avoir été dans une voiture.
    • Après l’arrivée à 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 diriger le trafic vers l’application Xamarin.iOS. Il a abordé l’étape pour implémenter des suggestions proactives et présenté des instructions d’utilisation.