Windows Phone 8 - Développement d’un Portail d’Entreprise

Un Company Hub ?

Depuis l’arrivée de Windows Phone 8, Microsoft offre aux entreprises l'opportunité de développer des portails d'entreprise (Company Hub) pour publier des applications destinés à leurs employés. Le but est de proposer des applications métiers, nécessaires aux besoins internes d’une société, sans validation ni publication sur le Windows Phone Store de Microsoft. En complément de l’aspect gestion applicative, un portail d’entreprise est également un outil de communication: il permet de relayer des informations aux employées (changements dans l’organisation, statut sur l’état des serveurs…). Vous pouvez utiliser en complément les Push Notifications, le Vignettes Dynamiques et l’Ecran de verrouillage pour améliorer la visibilité de vos communications.imageCet article couvre les étapes préalables à la mise en place d’un Company Hub, ainsi que les briques de développement utilisés pour réaliser ce portail. Le déploiement est manuel et je n’utilise pas de solution MDM (Mobile Device Management) tels que Windows Intune ou System Center 2012 Configuration Manager. Si vous optez pour une telle solution, gardez à l’esprit que ces logiciels proposent nativement un portail d’entreprise (Windows Phone 8 Company Portal App) prêt à l’emploi. Pour plus d’information, je vous invite à consulter les articles suivants:

On est parti ! Même si la procédure peut vous paraitre un peu longue, l’idée est relativement simple. Pour avoir le droit d’installer des applications en dehors du Windows Phone Store, vous devez obtenir un certificat qui vous donne ce privilège et qui identifie votre société. Une fois ce certificat en poche, vous devez associer les téléphones à votre société, puis signer l’ensemble de vos applications avec ce certificat. Le portail d’entreprise (Company Hub) est une application comme les autres, elle doit donc également être signée.

Quels sont les étapes ?

1. Compte de Développeur Windows Phone

Pour démarrer, la société enregistre un compte de développeur sur Windows Phone Dev Center et récupère un PublisherID (99$ par an). Cette procédure est classique, assurez vous simplement de sélectionner Company (et non Individual/Student) lors de la sélection du compte. (cf. Registration info).

2. Enterprise Mobile Code Signing Certificate (auprès de Symantec)

La société acquiert un Enterprise Mobile Code Signing Certificate auprès de Symantec (299$ par an). Cette étape permet d’importer le certificat sur sa station et de l’exporter ensuite au format .pfx. Assurez-vous de bien inclure la clé privée lors de l’export.

Vous êtes désormais l’heureux propriétaire d’un certificat au format .pfx. Ce certificat va nous permettre d’obtenir un Application Enrollment Token (EAT), ce jeton EAT est utilisé pour associer les téléphones au compte de la société – c’est une condition préalable au déploiement des applications. Ce même certificat va également nous servir à signer l’ensemble des applications (.xap) distribuées en dehors du Windows Phone Store (y compris le Company Hub que vous allez développer).

Pour faire simple, l’EAT déploie le certificat sur les téléphones, et le téléphone accepte désormais les applications signés via ce certificat.

3. Application Enrollment Token (EAT)

Pour créer le fameux jeton EAT, il suffit simplement d’utiliser l’outil AETGenerator.exe. Il est disponible lors de l’installation du Windows Phone SDK 8.0 dans le répertoire %ProgramFiles(x86)%\Microsoft SDKs\Windows Phone\v8.0\Tools\AETGenerator.

  • Ouvrez une invite de commande VS2012 x86 Native Tools Command Prompt avec les privilèges administrateurs. Parcourez l’arborescence pour vous déplacer dans le répertoire où se trouve le certificat.
  • Exécutez la ligne de commande AETGenerator.exe PFXFile Password

image

Trois fichiers sont générés, le seul qui nous intéresse est EAT.eatx. Ce fichier peut être transmis par mail ou téléchargé depuis Internet Explorer pour un déploiement manuel sur les téléphones. Si vous optez pour un logiciel de gestion tel que Windows Intune ou System Center 2012, les autres fichiers proposés deviennent utiles ^^

4. Préparation au déploiement des applications d’entreprise

Comme précisé préalablement, toutes les applications installées depuis votre portail d’entreprise doivent être signés avec le certificat de Symantec. On en profite également pour précompiler en code natif l’ensemble des ‘managed assemblies’ contenues dans le fichier .xap.

Deux outils séparés sont proposés par le Windows Phone SDK 8.0 : MDILXAPCompile pour la précompilation et XapSignTool pour la signature. Les développeurs ont eu la bonne idée de fournir un script PowerShell nommé BuildMDILXap.ps1 pour nous simplifier la vie et réaliser ces deux tâches. Ce script est disponible dans %ProgramFiles(x86)%\Microsoft SDKs\Windows Phone\v8.0\Tools\MDILXAPCompile.

Exécutez une invite de commande PowerShell pour lancer la commande BuildMDILXap.ps1 -xapfilename XAP -pfxfilename PFXFile -password Password

image

5. Développement du portail d’entreprise (Company Hub)

Le Company Hub est une application traditionnelle, qui devra elle même être signée par le certificat d’entreprise pour être déployée sur les téléphones. Vous avez la main sur les applications que vous souhaitez proposer aux employés, à ce titre c’est à vous de maintenir un catalogue d’applications, généralement par l’intermédiaire d’un web service permettant de retourner les métadonnées (Nom de l’application, Description, Version, Url du fichier .xap, Url de l'icône associé, …). On peut très bien compléter ces informations par une mise en place d’un rating, l’affichage de visuels, … comme sur le Windows Phone Store.

Ouf, enfin quelques ligne de codes … ^^

Comment installer une application depuis le Company Hub ?
InstallationManager.AddPackageAsync(String, Uri) va permettre de cibler le fichier .xap distant pour l’installer sur le mobile. Il est possible d’utiliser en complément IAsyncOperationWithProgress pour s’abonner à l’évènement Progress et notifier l’utilisateur de la progression de l’installation.

Cet évènement sera appelé 4 fois: 
- 5% terminée (lorsque le téléphone affiche une fenêtre pop-up qui demande à l'utilisateur de confirmer l'installation)
- 10% terminée (dès que l’utilisateur a accepté l’installation)
- 55% terminée (quand l’application est téléchargée)
- 100% terminée (lorsque l’application est installée)

Et voici le code prêt à l’emploi …

 // The asynchronous operation that represents the installation process
Windows.Foundation.IAsyncOperationWithProgress<PackageInstallResult, uint> installTask = null;

private async Task<PackageInstallResult> InstallPackage(string appTitle, Uri appUri)
{
    try
    {
        installTask = InstallationManager.AddPackageAsync(appTitle, appUri);

        installTask.Progress = (installResult, progress) => Dispatcher.BeginInvoke(() =>
        {
            StatusTextBlock.Text = "Progress: " + progress;
        });
    }
    catch (Exception ex)
    {
        Debug.WriteLine(ex.Message);
    }

    return await installTask;
}

… et la manière de l’appeler :

 Uri appUri = new Uri(@"https://companyhub.blob.core.windows.net/applications/Techdays2013.xap");
string appTitle = "TechDays 2013";

await InstallPackage(appTitle, appUri);

Comment lister les applications déjà installées ?

InstallationManager.FindPackagesForCurrentPublisher va nous permettre de récupérer l’ensemble des packages installés sur le téléphone provenant du même Publisher que l’application courante. Donc, attention, on ne parle plus du certificat pour identifier les packages, mais simplement du Publisher ID présent dans WMAppManifest.xml. Vérifiez bien que vos packages ont bien le bon Guid. Cet identifiant est disponible dans les informations de votre compte sur Windows Phone Dev Center.

Cette méthode nous retourne un IEnumerable<Package>. La classe Package a le bénéfice de proposer deux méthodes très utiles:

- GetThumbnailToken pour récupérer le Thumbnail de l’application.

- Launch pour lancer directement l’application depuis le Company Hub.

Quelques lignes de codes pour clarifier tout ça :

 private async Task<BitmapImage> GetThumbnailFromPackage(Package package)
{
    BitmapImage bitmap= new BitmapImage();

    try
    {
        // A token that can be used to retrieve the thumbnail image associated with this application package.
        string token = package.GetThumbnailToken();

        // Retrive the thumbnail image associated with this application package, copy the thumbnail to LocalFolder. 
        string filename = SharedStorageAccessManager.GetSharedFileName(token);
        var file = await SharedStorageAccessManager.CopySharedFileAsync(
                                                ApplicationData.Current.LocalFolder,    //destinationFolder
                                                filename,                               //desiredName
                                                NameCollisionOption.ReplaceExisting,    
                                                token) as StorageFile;

        // Retrieve the stream for reading
        var stream = await file.OpenStreamForReadAsync();

        // Set bitmap source
        bitmap.SetSource(stream);

    }
    catch (Exception ex)
    {
        Debug.WriteLine(ex.Message);
    }

    return bitmap;
}

private async void LoadInstalledPackages()
{
    IEnumerable<Package> packages = InstallationManager.FindPackagesForCurrentPublisher();

    foreach (Package package in packages)
    {
        // AppMetadata is a custom class used to store application name, version, thumbnail
        AppMetadata metadata = new AppMetadata();
        metadata.Name = package.Id.Name;
        metadata.AppPackage = package;
        metadata.Thumbnail = await GetThumbnailFromPackage(package);

        // Associate metadata to my ViewModel
        App.ViewModel.InstalledPackages.Add(metadata);
    }
}

6. Last but not least … le déploiement de votre solution !

 
Si vous êtes enfin arrivé à ce point, vous souhaitez probablement distribuer votre Company Hub aux employés de la société. Comme notre déploiement est manuel, deux options s’offre à nous:

wp_ss_20130308_0003 

Transmettre un mail à vos collaborateurs avec le fichier .eatx en pièce jointe et le lien vers le .xap du Company Hub. Dans ce cas, appliquer éventuellement une protection IRM à l’email.

- ou -

 
Télécharger le fichier .eatx et le .xap du Company Hub depuis un site web sécurisé.

 

 

Profitez ensuite de votre nouveau portail d’entreprise !