Concepts de base de l’extension d’application de message dans Xamarin.iOS
Cet article montre comment inclure une extension d’application de message dans une solution Xamarin.iOS qui s’intègre à l’application Messages et présente de nouvelles fonctionnalités à l’utilisateur.
Nouveautés d’iOS 10, une extension d’application de message s’intègre à l’application Messages et présente de nouvelles fonctionnalités à l’utilisateur. L’extension peut envoyer du texte, des autocollants, des fichiers multimédias et des messages interactifs.
À propos des extensions d’application de message
Comme indiqué ci-dessus, une extension d’application de message s’intègre à l’application Messages et présente de nouvelles fonctionnalités à l’utilisateur. L’extension peut envoyer du texte, des autocollants, des fichiers multimédias et des messages interactifs. Deux types d’extension d’application de message sont disponibles :
- Packs d’autocollants : contient une collection d’autocollants que l’utilisateur peut ajouter à un message. Les packs d’autocollants peuvent être créés sans écrire de code.
- Application iMessage : peut présenter une interface utilisateur personnalisée dans l’application Messages pour sélectionner des autocollants, entrer du texte, y compris des fichiers multimédias (avec conversions de types facultatives) et créer, modifier et envoyer des messages d’interaction.
Les extensions Message Apps fournissent trois types de contenu principaux :
- Messages interactifs : type de contenu de message personnalisé généré par une application lorsque l’utilisateur appuie sur le message, l’application est lancée au premier plan.
- Autocollants : les images générées par l’application qui peuvent être incluses dans les messages envoyés entre les utilisateurs.
- Autre contenu pris en charge : l’application peut fournir du contenu tel que des photos, des vidéos, du texte ou des liens vers d’autres types de contenu qui ont toujours été pris en charge par l’application Messages.
Nouveautés d’iOS 10, l’application Message inclut désormais son propre App Store dédié et intégré. Toutes les applications qui incluent les extensions Message Apps sont affichées et promues dans ce Windows Store. Le nouveau tiroir d’application Messages affiche toutes les applications qui ont été téléchargées à partir de l’App Store messages pour fournir un accès rapide aux utilisateurs.
Nouveau dans iOS 10, Apple a ajouté Inline App Attribution, ce qui permet à l’utilisateur de découvrir facilement une application. Par exemple, si un utilisateur envoie du contenu à un autre à partir d’une application que le 2e utilisateur n’a pas installé (par exemple un autocollant), le nom de l’application d’envoi est répertorié sous le contenu de l’historique des messages. Si l’utilisateur appuie sur le nom de l’application, le Message App Store que nous sommes ouverts et l’application sélectionnée dans le Windows Store.
Les extensions d’applications de message sont similaires aux applications iOS existantes que le développeur connaît bien la création et ils auront accès à toutes les infrastructures et fonctionnalités standard d’une application iOS standard. Par exemple :
- Ils ont accès à l’achat dans l’application.
- Ils ont accès à Apple Pay.
- Ils ont accès au matériel d’appareil tel que la caméra.
Les extensions d’applications de message ne sont prises en charge que sur iOS 10. Toutefois, le contenu envoyé par ces extensions est visible sur les appareils watchOS et macOS. La nouvelle page Recents ajoutée à watchOS 3 affiche les autocollants récents envoyés à partir du téléphone, y compris ceux des extensions Message Apps, et permet à l’utilisateur d’envoyer ces autocollants à partir de la montre.
À propos de l’infrastructure messages
Nouveautés d’iOS 10, l’infrastructure Messages fournit l’interface entre l’extension Message Apps et l’application Message sur l’appareil iOS de l’utilisateur. Lorsque l’utilisateur lance une application à partir de l’application Messages, cette infrastructure permet à l’application d’être découverte et fournit les données et le contexte requis pour mettre en place son interface utilisateur.
Une fois l’application lancée, l’utilisateur interagit avec lui pour créer du contenu à partager via un message. L’application utilise ensuite l’infrastructure Messages pour transférer le contenu nouvellement créé vers l’application Messages pour traitement.
L’infrastructure messages et les extensions Message Apps sont basées sur les technologies d’extensions d’application iOS existantes. Pour plus d’informations sur les extensions d’application, consultez le Guide de programmation des extensions d’application d’Apple.
Contrairement aux autres points d’extension fournis par Apple tout au long du système, le développeur n’a pas besoin de fournir une application hôte pour ses extensions Message Apps, car l’application Message elle-même agit comme conteneur. Toutefois, le développeur a la possibilité d’inclure l’extension Message Apps à l’intérieur d’une application iOS nouvelle ou existante et de l’envoyer avec l’offre groupée.
Si les extensions Message Apps sont incluses dans l’offre groupée d’une application iOS, l’icône de l’application s’affiche à la fois sur l’écran d’accueil de l’appareil et dans le tiroir de l’application Message à partir de l’application Messages. S’il n’est pas inclus dans un ensemble d’applications, l’extension Message Apps s’affiche uniquement dans le tiroir de l’application de message.
Même si les extensions Message Apps ne sont pas incluses dans un ensemble d’applications hôtes, le développeur doit fournir une icône d’application dans l’offre groupée de l’extension Message Apps, car il s’agit de l’icône qui s’affiche dans d’autres parties du système, telles que le tiroir d’application de message ou Paramètres, pour l’extension.
À propos des autocollants
Apple a conçu des autocollants comme une nouvelle façon pour les utilisateurs iMessage de communiquer en permettant aux autocollants d’être envoyés inline comme tout autre contenu de message ou ils peuvent être attachés à des bulles de message précédentes à l’intérieur de la conversation.
Qu’est-ce que les autocollants ?
- Il s’agit d’images que fournit l’extension Message Apps.
- Elles peuvent être animées ou statiques.
- Ils offrent un nouveau moyen de partager du contenu d’image à partir de l’intérieur d’une application.
Il existe deux façons de créer des autocollants :
- Vous pouvez créer des extensions d’application de message d’autocollant à partir de l’intérieur de Xcode sans inclure de code. Tout ce qui est requis est les ressources des autocollants et des icônes d’application.
- En créant une extension Message Apps standard qui fournit des autocollants à partir du code via l’infrastructure Messages.
Création de packs d’autocollants
Les packs d’autocollants sont créés à partir d’un modèle spécial à l’intérieur de Xcode et fournissent simplement un ensemble statique de ressources d’image qui peuvent être utilisés comme autocollants. Comme indiqué ci-dessus, ils ne nécessitent aucun code, le développeur fait simplement glisser des fichiers image dans le dossier Sticker Pack à l’intérieur du catalogue d’éléments d’autocollants.
Pour qu’une image soit incluse dans un pack d’autocollants, elle doit répondre aux exigences suivantes :
- Les images doivent être au format PNG, APNG, GIF ou JPEG. Apple suggère d’utiliser uniquement les formats PNG et APNG lors de la fourniture de ressources Autocollant.
- Les autocollants animés prennent uniquement en charge les formats APNG et GIF.
- Les images autocollantes doivent fournir un arrière-plan transparent, car elles peuvent être placées sur des bulles de message dans la conversation par l’utilisateur.
- Les fichiers image individuels doivent être inférieurs à 500 Ko.
- Les images ne peuvent pas être inférieures à 100 x 100 points, ou supérieures à 206 x 206 points.
Important
Les images autocollantes doivent toujours être fournies à la @3x
résolution dans la plage de 300 x 300 à 618 x 618 pixels. Le système génère automatiquement les versions et @1x
les @2x
versions au moment de l’exécution en fonction des besoins.
Apple suggère de tester les ressources d’image d’autocollant sur différents arrière-plans colorés (tels que blanc, noir, rouge, jaune et multicolore) et sur les photos, pour s’assurer qu’ils ressemblent le mieux dans toutes les situations possibles.
Les packs d’autocollants peuvent fournir des autocollants dans l’une des trois tailles disponibles :
- Petit - 100 x 100 points.
- Moyen - 136 x 136 points. Il s’agit de la taille par défaut.
- Large - 206 x 206 points.
Utilisez l’inspecteur d’attributs Xcode pour définir la taille de l’ensemble du pack d’autocollants et fournissez uniquement des ressources d’image qui correspondent à la taille demandée, pour obtenir les meilleurs résultats dans le navigateur d’autocollants à l’intérieur de l’application Messages.
Pour plus d’informations, consultez la référence des messages d’Apple.
Création d’une expérience d’autocollant personnalisée
Si l’application nécessite plus de contrôle ou de flexibilité que celle fournie par un pack d’autocollants, elle peut inclure une extension d’application de message et fournir les autocollants via l’infrastructure Messages pour une expérience autocollant personnalisée.
Quels sont les avantages de la création d’une expérience autocollant personnalisée ?
- Permet à l’application de personnaliser la façon dont les autocollants sont affichés aux utilisateurs de l’application. Par exemple, pour présenter des autocollants dans un format autre que la disposition de grille standard ou sur un arrière-plan coloré différent.
- Permet aux autocollants d’être créés dynamiquement à partir du code au lieu d’être inclus en tant que ressources d’image statiques.
- Permet aux ressources d’image autocollantes d’être téléchargées dynamiquement à partir du serveur web du développeur sans avoir à publier une nouvelle version dans l’App Store.
- Permet d’accéder à la caméra de l’appareil pour créer des autocollants à la volée.
- Autorise les achats dans l’application afin que l’utilisateur puisse acheter davantage d’autocollants à l’intérieur de l’application.
Pour créer une expérience autocollant personnalisée, procédez comme suit :
Démarrez Visual Studio pour Mac.
Ouvrez la solution pour ajouter une extension d’application de message à.
Sélectionnez l’extension iMessage des extensions>iOS>, puis cliquez sur le bouton Suivant :
Entrez un nom d’extension, puis cliquez sur le bouton Suivant :
Cliquez sur le bouton Créer pour générer l’extension :
Par défaut, le MessagesViewController.cs
fichier sera ajouté à la solution. Il s’agit du point d’entrée principal dans l’extension et il hérite de la MSMessageAppViewController
classe.
L’infrastructure Messages fournit des classes pour présenter des autocollants disponibles à l’utilisateur :
MSStickerBrowserViewController
- Contrôle la vue dans laquelle les autocollants seront présentés. Il est également conforme à l’interfaceIMSStickerBrowserViewDataSource
pour retourner le nombre d’autocollants et l’autocollant pour un index de navigateur donné.MSStickerBrowserView
- Il s’agit de la vue dans laquelle les autocollants disponibles seront affichés.MSStickerSize
- Détermine les tailles de cellule individuelles pour la grille des autocollants présentés dans l’affichage du navigateur.
Création d’un navigateur autocollant personnalisé
Le développeur peut personnaliser davantage l’expérience d’autocollant pour l’utilisateur en fournissant un navigateur d’autocollant personnalisé (MSMessageAppBrowserViewController
) dans l’extension d’application de message. Le navigateur d’autocollants personnalisés modifie la façon dont les autocollants sont présentés à l’utilisateur lorsqu’ils sélectionnent un autocollant à inclure dans le flux de messages.
Effectuez les actions suivantes :
Dans le panneau Solution, cliquez avec le bouton droit sur le nom du projet de l’extension, puis sélectionnez Ajouter>un nouveau fichier...>iOS | Contrôleur d’interface Apple Watch>.
Entrez
StickerBrowserViewController
le nom , puis cliquez sur le bouton Nouveau :Ouvre le fichier
StickerBrowserViewController.cs
pour modification.
Faites ressembler à StickerBrowserViewController.cs
ce qui suit :
using System;
using System.Collections.Generic;
using UIKit;
using Messages;
using Foundation;
namespace MonkeyStickers
{
public partial class StickerBrowserViewController : MSStickerBrowserViewController
{
#region Computed Properties
public List<MSSticker> Stickers { get; set; } = new List<MSSticker> ();
#endregion
#region Constructors
public StickerBrowserViewController (MSStickerSize stickerSize) : base (stickerSize)
{
}
#endregion
#region Private Methods
private void CreateSticker (string assetName, string localizedDescription)
{
// Get path to asset
var path = NSBundle.MainBundle.PathForResource (assetName, "png");
if (path == null) {
Console.WriteLine ("Couldn't create sticker {0}.", assetName);
return;
}
// Build new sticker
var stickerURL = new NSUrl (path);
NSError error = null;
var sticker = new MSSticker (stickerURL, localizedDescription, out error);
if (error == null) {
// Add to collection
Stickers.Add (sticker);
} else {
// Report error
Console.WriteLine ("Error, couldn't create sticker {0}: {1}", assetName, error);
}
}
private void LoadStickers ()
{
// Load sticker assets from disk
CreateSticker ("canada", "Canada Sticker");
CreateSticker ("clouds", "Clouds Sticker");
...
CreateSticker ("tree", "Tree Sticker");
}
#endregion
#region Public Methods
public void ChangeBackgroundColor (UIColor color)
{
StickerBrowserView.BackgroundColor = color;
}
#endregion
#region Override Methods
public override void ViewDidLoad ()
{
base.ViewDidLoad ();
// Initialize
LoadStickers ();
}
public override nint GetNumberOfStickers (MSStickerBrowserView stickerBrowserView)
{
return Stickers.Count;
}
public override MSSticker GetSticker (MSStickerBrowserView stickerBrowserView, nint index)
{
return Stickers[(int)index];
}
#endregion
}
}
Examinez le code ci-dessus en détail. Il crée un stockage pour les autocollants que l’extension fournit :
public List<MSSticker> Stickers { get; set; } = new List<MSSticker> ();
Et remplace deux méthodes de la MSStickerBrowserViewController
classe pour fournir des données pour le navigateur à partir de ce magasin de données :
public override nint GetNumberOfStickers (MSStickerBrowserView stickerBrowserView)
{
return Stickers.Count;
}
public override MSSticker GetSticker (MSStickerBrowserView stickerBrowserView, nint index)
{
return Stickers[(int)index];
}
La CreateSticker
méthode obtient le chemin d’accès d’une ressource image à partir de l’offre groupée de l’extension et l’utilise pour créer une instance d’une MSSticker
ressource à partir de cette ressource, qu’elle ajoute à la collection :
private void CreateSticker (string assetName, string localizedDescription)
{
// Get path to asset
var path = NSBundle.MainBundle.PathForResource (assetName, "png");
if (path == null) {
Console.WriteLine ("Couldn't create sticker {0}.", assetName);
return;
}
// Build new sticker
var stickerURL = new NSUrl (path);
NSError error = null;
var sticker = new MSSticker (stickerURL, localizedDescription, out error);
if (error == null) {
// Add to collection
Stickers.Add (sticker);
} else {
// Report error
Console.WriteLine ("Error, couldn't create sticker {0}: {1}", assetName, error);
}
}
La LoadSticker
méthode est appelée ViewDidLoad
pour créer un autocollant à partir de la ressource d’image nommée (incluse dans le bundle de l’application) et l’ajouter à la collection d’autocollants.
Pour implémenter le navigateur autocollant personnalisé, modifiez le MessagesViewController.cs
fichier et faites-le ressembler à ce qui suit :
using System;
using UIKit;
using Messages;
namespace MonkeyStickers
{
public partial class MessagesViewController : MSMessagesAppViewController
{
#region Computed Properties
public StickerBrowserViewController BrowserViewController { get; set;}
#endregion
#region Constructors
protected ViewController (IntPtr handle) : base (handle)
{
// Note: this .ctor should not contain any initialization logic.
}
#endregion
#region Override Methods
public override void ViewDidLoad ()
{
base.ViewDidLoad ();
// Create new browser and configure it
BrowserViewController = new StickerBrowserViewController (MSStickerSize.Regular);
BrowserViewController.View.Frame = View.Frame;
BrowserViewController.ChangeBackgroundColor (UIColor.Gray);
// Add to view
AddChildViewController (BrowserViewController);
BrowserViewController.DidMoveToParentViewController (this);
View.AddSubview (BrowserViewController.View);
}
#endregion
}
}
En examinant ce code en détail, il crée un stockage pour le navigateur personnalisé :
public StickerBrowserViewController BrowserViewController { get; set;}
Dans la ViewDidLoad
méthode, elle instancie et configure un nouveau navigateur :
// Create new browser and configure it
BrowserViewController = new StickerBrowserViewController (MSStickerSize.Regular);
BrowserViewController.View.Frame = View.Frame;
BrowserViewController.ChangeBackgroundColor (UIColor.Gray);
Ensuite, il ajoute le navigateur à la vue pour l’afficher :
// Add to view
AddChildViewController (BrowserViewController);
BrowserViewController.DidMoveToParentViewController (this);
View.AddSubview (BrowserViewController.View);
Personnalisation de l’autocollant supplémentaire
La personnalisation de l’autocollant supplémentaire est possible en incluant seulement deux classes dans l’extension Message App :
MSStickerView
MSSticker
À l’aide des méthodes ci-dessus, l’extension peut prendre en charge la sélection d’autocollants qui ne repose pas sur la méthode de navigateur autocollant standard. En outre, l’affichage de l’autocollant peut être basculé entre deux modes d’affichage différents :
- Compact : il s’agit du mode par défaut dans lequel l’affichage Autocollant prend en haut les 25 % inférieurs de l’affichage message.
- Développé : l’affichage autocollant remplit l’affichage message entier.
Cette vue autocollante peut être basculée entre ces modes par programmation ou manuellement par l’utilisateur.
Examinez l’exemple suivant de gestion du commutateur entre les deux modes d’affichage différents. Deux contrôleurs d’affichage différents seront requis pour chaque état. Les StickerBrowserViewController
handles de la vue Compact et ressemblent à ce qui suit :
using System;
using System.Collections.Generic;
using UIKit;
using Messages;
using Foundation;
namespace MessageExtension
{
public partial class StickerBrowserViewController : MSStickerBrowserViewController
{
#region Computed Properties
public MessagesViewController MessagesAppViewController { get; set; }
public List<MSSticker> Stickers { get; set; } = new List<MSSticker> ();
#endregion
#region Constructors
public StickerBrowserViewController (MessagesViewController messagesAppViewController, MSStickerSize stickerSize) : base (stickerSize)
{
// Initialize
this.MessagesAppViewController = messagesAppViewController;
}
#endregion
#region Private Methods
private void CreateSticker (string assetName, string localizedDescription)
{
// Get path to asset
var path = NSBundle.MainBundle.PathForResource (assetName, "png");
if (path == null) {
Console.WriteLine ("Couldn't create sticker {0}.", assetName);
return;
}
// Build new sticker
var stickerURL = new NSUrl (path);
NSError error = null;
var sticker = new MSSticker (stickerURL, localizedDescription, out error);
if (error == null) {
// Add to collection
Stickers.Add (sticker);
} else {
// Report error
Console.WriteLine ("Error, couldn't create sticker {0}: {1}", assetName, error);
}
}
private void LoadStickers ()
{
// Load sticker assets from disk
CreateSticker ("add", "Add New Sticker");
CreateSticker ("canada", "Canada Sticker");
CreateSticker ("clouds", "Clouds Sticker");
CreateSticker ("tree", "Tree Sticker");
}
#endregion
#region Public Methods
public void ChangeBackgroundColor (UIColor color)
{
StickerBrowserView.BackgroundColor = color;
}
#endregion
#region Override Methods
public override void ViewDidLoad ()
{
base.ViewDidLoad ();
// Initialize
LoadStickers ();
}
public override nint GetNumberOfStickers (MSStickerBrowserView stickerBrowserView)
{
return Stickers.Count;
}
public override MSSticker GetSticker (MSStickerBrowserView stickerBrowserView, nint index)
{
// Wanting to add a new sticker?
if (index == 0) {
// Yes, ask controller to present add sticker interface
MessagesAppViewController.AddNewSticker ();
return null;
} else {
// No, return existing sticker
return Stickers [(int)index];
}
}
#endregion
}
}
Le AddStickerViewController
mode Autocollant développé est géré et ressemble à ce qui suit :
using System;
using Foundation;
using UIKit;
using Messages;
namespace MessageExtension
{
public class AddStickerViewController : UIViewController
{
#region Computed Properties
public MessagesViewController MessagesAppViewController { get; set;}
public MSSticker NewSticker { get; set;}
#endregion
#region Constructors
public AddStickerViewController (MessagesViewController messagesAppViewController)
{
// Initialize
this.MessagesAppViewController = messagesAppViewController;
}
#endregion
#region Override Method
public override void ViewDidLoad ()
{
base.ViewDidLoad ();
// Build interface to create new sticker
var cancelButton = new UIButton (UIButtonType.RoundedRect);
cancelButton.TouchDown += (sender, e) => {
// Cancel add new sticker
MessagesAppViewController.CancelAddNewSticker ();
};
View.AddSubview (cancelButton);
var doneButton = new UIButton (UIButtonType.RoundedRect);
doneButton.TouchDown += (sender, e) => {
// Add new sticker to collection
MessagesAppViewController.AddStickerToCollection (NewSticker);
};
View.AddSubview (doneButton);
...
}
#endregion
}
}
Implémente MessageViewController
ces contrôleurs d’affichage pour piloter l’état demandé :
using System;
using UIKit;
using Messages;
namespace MessageExtension
{
public partial class MessagesViewController : MSMessagesAppViewController
{
#region Computed Properties
public bool IsAddingSticker { get; set;}
public StickerBrowserViewController BrowserViewController { get; set; }
public AddStickerViewController AddStickerController { get; set;}
#endregion
#region Constructors
protected MessagesViewController (IntPtr handle) : base (handle)
{
// Note: this .ctor should not contain any initialization logic.
}
#endregion
#region Public Methods
public void PresentStickerBrowser ()
{
// Is the Add sticker view being displayed?
if (IsAddingSticker) {
// Yes, remove it from view
AddStickerController.RemoveFromParentViewController ();
AddStickerController.View.RemoveFromSuperview ();
}
// Add to view
AddChildViewController (BrowserViewController);
BrowserViewController.DidMoveToParentViewController (this);
View.AddSubview (BrowserViewController.View);
// Save mode
IsAddingSticker = false;
}
public void PresentAddSticker ()
{
// Is the sticker browser being displayed?
if (!IsAddingSticker) {
// Yes, remove it from view
BrowserViewController.RemoveFromParentViewController ();
BrowserViewController.View.RemoveFromSuperview ();
}
// Add to view
AddChildViewController (AddStickerController);
AddStickerController.DidMoveToParentViewController (this);
View.AddSubview (AddStickerController.View);
// Save mode
IsAddingSticker = true;
}
public void AddNewSticker ()
{
// Switch to expanded view mode
Request (MSMessagesAppPresentationStyle.Expanded);
}
public void CancelAddNewSticker ()
{
// Switch to compact view mode
Request (MSMessagesAppPresentationStyle.Compact);
}
public void AddStickerToCollection (MSSticker sticker)
{
// Add sticker to collection
BrowserViewController.Stickers.Add (sticker);
// Switch to compact view mode
Request (MSMessagesAppPresentationStyle.Compact);
}
#endregion
#region Override Methods
public override void ViewDidLoad ()
{
base.ViewDidLoad ();
// Create new browser and configure it
BrowserViewController = new StickerBrowserViewController (this, MSStickerSize.Regular);
BrowserViewController.View.Frame = View.Frame;
BrowserViewController.ChangeBackgroundColor (UIColor.Gray);
// Create new Add controller and configure it as well
AddStickerController = new AddStickerViewController (this);
AddStickerController.View.Frame = View.Frame;
// Initially present the sticker browser
PresentStickerBrowser ();
}
public override void DidTransition (MSMessagesAppPresentationStyle presentationStyle)
{
base.DidTransition (presentationStyle);
// Take action based on style
switch (presentationStyle) {
case MSMessagesAppPresentationStyle.Compact:
PresentStickerBrowser ();
break;
case MSMessagesAppPresentationStyle.Expanded:
PresentAddSticker ();
break;
}
}
#endregion
}
}
Lorsque l’utilisateur demande d’ajouter un nouvel autocollant à sa collection disponible, un nouveau AddStickerViewController
est rendu le contrôleur visible et l’affichage Autocollant entre en mode Développé :
// Switch to expanded view mode
Request (MSMessagesAppPresentationStyle.Expanded);
Lorsque l’utilisateur choisit un autocollant à ajouter, il est ajouté à sa collection disponible et l’affichage Compact est demandé :
public void AddStickerToCollection (MSSticker sticker)
{
// Add sticker to collection
BrowserViewController.Stickers.Add (sticker);
// Switch to compact view mode
Request (MSMessagesAppPresentationStyle.Compact);
}
La DidTransition
méthode est substituée pour gérer le basculement entre les deux modes :
public override void DidTransition (MSMessagesAppPresentationStyle presentationStyle)
{
base.DidTransition (presentationStyle);
// Take action based on style
switch (presentationStyle) {
case MSMessagesAppPresentationStyle.Compact:
PresentStickerBrowser ();
break;
case MSMessagesAppPresentationStyle.Expanded:
PresentAddSticker ();
break;
}
}
Résumé
Cet article a abordé l’ajout d’une extension d’application de message dans une solution Xamarin.iOS qui s’intègre à l’application Messages et présente de nouvelles fonctionnalités à l’utilisateur. Il a abordé l’utilisation de l’extension pour envoyer du texte, des autocollants, des fichiers multimédias et des messages interactifs.