Comme souvent, je me balade sur MSDN à la recherche d’un morceau de l’API pas encore explorée. Ce soir, à force de cliquer sur des liens, je suis tombé sur une petite pépite assez intéressante donc autant la partager donc !
Saviez-vous que depuis Windows Phone 8, il est possible de récupérer la liste de vos applications que l’utilisateur possède sur son téléphone ? Maintenant oui, et plus fort il est possible d’avoir aussi des informations afin de savoir si l’application est en cours d’installation ou déjà installée et encore mieux ! Vous pourrez récupérer la date d’installation de l’application ou encore le numéro de version et même l’icone de l’app : MAGIQUE !
Et le meilleur pour la fin : vous avez la possibilité de lancer l’application sans recourir à l’extension de protocole !!!!
Lister les applications de l’auteur sur le téléphone
Cela se fait très simplement :
foreach(var package in InstallationManager.FindPackagesForCurrentPublisher()) { MessageBox.Show(package.InstallDate + " " + package.Id.Name); }
Rechercher une application
Package SearchApp(String productId) { return InstallationManager.FindPackagesForCurrentPublisher().FirstOrDefault(app => app.Id.ProductId == productId); }
Lancer une application
{ var package=SearchApp("{91000C5C-9943-43B7-AB65-7609D91057EF}"); package.Launch(); }
Allons encore un peu plus loin, on sait maintenant lancer une application, maintenant voyons comment lancer une page bien précise de votre application !
lancer une page spécifique d’une application
{ var package=SearchApp("{91000C5C-9943-43B7-AB65-7609D91057EF}"); package.Launch("/AboutPage.xaml); }
On a donc une possibilité de manipulation assez extraordinaire ! En plus de spécifier la page, vous pouvez aussi spécifier des paramètres comme par exemple :
{ var package=SearchApp("{91000C5C-9943-43B7-AB65-7609D91057EF}"); package.Launch("/FluxRSSPage.xaml?uri=rudyhuyn.com"); }
Récupérer l’icône de l’application
{ var package=SearchApp("{91000C5C-9943-43B7-AB65-7609D91057EF}"); var token = package.GetThumbnailToken(); var name = SharedStorageAccessManager.GetSharedFileName(token); await SharedStorageAccessManager.CopySharedFileAsync(ApplicationData.Current.LocalFolder, name, NameCollisionOption.ReplaceExisting, token); using (var file = IsolatedStorageFile.GetUserStoreForApplication().OpenFile(name, FileMode.Open, FileAccess.Read)) { BitmapImage bitmap = new BitmapImage(); bitmap.SetSource(file); MonImage.Source = bitmap; } }
Et comment faire fonctionner ceci quand mon application n’est pas sur le store ?
En effet, il y a de grandes chances que votre publisher Id de vos application ne correspond pas avec votre publisher id du Store.
Lorsque vous soumettez une application, le Store remplace automatiquement le publisher id de vos apps par celui du store, nous allons donc tout simplement remplacer le publisher ID que visual studio a généré par le votre, pour cela commencez par le récupérer sur la page suivante :
https://dev.windowsphone.com/en-us/account
puis ouvrez le fichier WMAppManifest.xml de votre application, allez dans l’onglet Packaging et remplacez le Publisher Id par le votre (en n’oubliant pas les accolades)
Vous aurez maintenant la possibilité de lister vos autres applications provenant du store.
Puis je lancer une application ne m’appartenant pas ?
Non, pour des raisons évidente de sécurité !
Conclusion
Énormément de scénario peuvent découler de ces APIs, quelques exemples en vrac :
– permettre l’accès à des fonctionnalités uniquement si l’utilisateur possède une autre de vos apps
– afficher un message de remerciement : « vous utilisez 4 de nos applications, merci beaucoup, voulez-vous découvrir nos autres applications ? »
– permettre le lancement d’une de vos apps sans exposer publiquement une extension de protocole, vous sécurisez ainsi les communications
– avoir des pages cachées dans vos applications, uniquement accessible depuis une autre de vos apps
– etc…