Lister les applications installées de l’auteur sur le téléphone, les lancer, etc…

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

Capture2

 

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)

 

Capture

 

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…

ff


Posted

in

,

by

Tags: