Dot.Blog

C#, XAML, WinUI, WPF, Android, MAUI, IoT, IA, ChatGPT, Prompt Engineering

MAUI : Partager du texte, des URL et des fichiers

Comment intégrer facilement et efficacement des fonctionnalités de partage d'informations dans vos applications mobiles grâce à .NET MAUI, et transformer l'expérience utilisateur en rendant vos applications plus interactives et communicatives ? La réponse est ...

Partager pour exister

Partager c’est bien, c’est grand, c’est altruiste, humaniste et tout ça, mais c’est surtout indispensable pour communiquer. Mais ici nos visées sont philosophiquement malgré tout bien moins haute, peut-être moins noble mais pas moins essentielles pour autant !

En effet, une App qui ne sait pas partager ses données est en quelque sorte comme un patient souffrant d’un syndrome de locked-in … Il veut parler, il veut s’exprimer, bouger, mais il reste figé. Le cerveau dans une App c’est l'utilisateur. Et quand il utilise une App fermée, c’est lui qui souffre de cet enfermement forcé…

En termes d’UX, la frustration peut être immense. J’ai là sous les yeux une photo, un graphique, une fiche client, mais hélas rien n’est fait pour les partager et les envoyer ailleurs, à moi-même pour traiter l’info sur mon PC, à des collaborateurs par SMS ou WhatsApp, ou d’autres Apps que j’ai dans mon smartphone (Facebook, Skype, téléprompteur… que sais-je !).

Les développeurs sous-estiment trop souvent l’UX en se contentant de coder des méthodes et des classes, mais pas des Apps pour ce qu’elles sont vraiment, c’est-à-dire des outils conçus pour des humains qui cherchent à se simplifier la vie pour accomplir des tâches variées. Or dès qu’une App est publiée, elle échappe à ses créateurs pour devenir l’objet de chaque utilisateur. Chacun dans son contexte, sa vie, ses urgences, ses besoins. Et si tout cela semble très vaste et très mouvant, une constante peut se dégager : pouvoir extraire à tout moment les informations détenues par une App pour les partager avec d’autres Apps et d’autres personnes via toute une palette de “passerelles” comme les softs que je citais plus haut.

C’est donc bien au cœur même de ce qui fait une App que nous nous intéressons aujourd’hui. La fonction “Partager” devrait devenir aussi commune et ubiquitaire que le “copier/coller”.

Pour une App comme un humain, Partager c’est Exister.

Et c’est pourquoi bien que le code de démo soit modeste, j’ai décidé d’accorder toute sa place à cette fonction, avant tout pour en parler, la remettre au centre de vos préoccupations quand vous écrivez une App.

.NET MAUI Essentials

Nous n’allons ici rien inventer. Nous allons puiser dans cette réserve extraordinaire que sont les .NET MAUI Essentials qui fourmille d’API toutes plus utiles les unes que les autres.

Vous trouverez la documentation complète des .NET MAUI Essentials ici : https://learn.microsoft.com/fr-fr/dotnet/communitytoolkit/maui/essentials/         

L’API qui nous intéresse plus particulièrement s’appelle tout naturellement “Share”.

C’est techniquement une classe du Namespace Microsoft.Maui.Essentials.

On notera, pour la petite histoire, que ce namespace provient au départ du paquet  MAUI.Essentials qu'il fallait installer mais qui, devant son utilité évidente, a été "absorbé" par MAUI. Il n'y a donc plus rien à installer et l'espace de nom est resté le même. Et pour ... l'essentiel, ce paquet MAUI venait lui-même en grande partie du portage des Xamarin.Essentials. S'il est bon de savoir d'où on vient, il est aussi intéressant que connaître les petits dessous de l'histoire pour éviter de se mélanger les octets !

Les informations partageables

Share est capable de partager trois types d’information :

  • Du texte
  • Des URI
  • Des fichiers

Tout passe par la même API, mais c’est l’objet en paramètre de la méthode de partage qui sera différent. Il en existe au moins deux actuellement : l’un pour le texte et les URI, l’autre pour les fichiers.

Partager du texte ou des URI

Le code suivant montre les deux cas d’utilisation (partage de texte puis partage d’une URI).

public class ShareTest
{
    public async Task ShareText(string text)
    {
        await Share.Default.RequestAsync(new ShareTextRequest
        {
            Text = text,
            Title = "Share Text"
        });
    }

    public async Task ShareUri(string uri)
    {
        await Share.Default.RequestAsync(new ShareTextRequest
        {
            Uri = uri,
            Title = "Share Web Link"
        });
    }
}

 

Les deux exemples sont présentés dans une classe de démo “ShareTest” qui expose deux méthodes dont le contenu a été spécialisé en fonction du choix de l’envoi d’un texte ou d’une URI.

Mais si le même objet ShareTextRequest est utilisé, c’est qu’il est possible en réalité de mixer les deux types d’information en même temps : texte + URI. C’est alors la plateforme et les logiciels cibles qui feront le choix de l’information la mieux adaptée à leur fonctionnement.

Partager des fichiers

Il s’agit bien ici de partager des fichiers “disque” (si cela veut encore dire quelque chose dans un smartphone ou même un PC avec SSD !) avec “l’extérieur”. Donc des informations stockées sur la device et qui sont accessibles à l’App, généralement parce que ce sont justement des données qu’elle a créées ou stockées.

Le mécanisme est tout aussi redoutablement simple :

await Share.Default.RequestAsync(new ShareFileRequest
{
    Title = Title,
    File = new ShareFile(file),
    PresentationSourceBounds = DeviceInfo.Platform == DevicePlatform.iOS && DeviceInfo.Idiom == DeviceIdiom.Tablet
                        ? new System.Drawing.Rectangle(0, 20, 0, 0)
                        : System.Drawing.Rectangle.Empty
});

On note que cette fois c’est un objet “ShareFileRequest” qui est utilisé.

On notera aussi que l’API elle-même est Asynchrone et qu’il est nécessaire de faire un await.

Nuances

Il existe des nuances de comportement entre les plateformes. Sous Android, la propriété Subject permet comme on s’en doute d’indiquer le sujet d’un message transmis, alors que sous iOS cette information sera ignorée, de même que Title. Alors que sous UWP, Title est par défaut le nom de l’application si aucune valeur n’est précisée. Et là aussi Subject sera ignoré.

Il est bon de connaître ces petites nuances pour garantir une UX agréable sur toutes les plateformes, mais aussi de bien vérifier la documentation à jour car ce genre de petit détail peu changer d'une release à une autre...

Conclusion

Je ne vais pas en faire des tonnes, car l’API est bien documentée. Le but clairement affiché ici est de vous faire réfléchir à l’importance de la fonction de partage dans vos Apps afin que vous n’oubliiez pas de l’intégrer dans vos plans… Vous auriez trouvé certainement un peu court que je ne donne pas un ou deux exemples, mais ce n’était pas le sujet. Car, grâce aux .NET MAUI Essentials, le plus gros du job est fait… Il faut donc juste y penser…

Stay Tuned !

Faites des heureux, PARTAGEZ l'article !