×
Namespaces

Variants
Actions
(Difference between revisions)

How to create a Company Hub app for Windows Phone

From Nokia Developer Wiki
Jump to: navigation, search
hamishwillee (Talk | contribs)
m (Hamishwillee - Bot update - Fix metadata)
hamishwillee (Talk | contribs)
m (Hamishwillee - Partial subedit. Waiting)
Line 1: Line 1:
[[Category:Draft]][[Category:Windows Phone 8]][[Category:XAML]]
+
[[Category:Draft]][[Category:General Programming on Windows Phone]][[Category:Deployment/Installation on Windows Phone]][[Category:Code Examples]][[Category:XAML]][[Category:Windows Phone 8]]
{{Abstract|This article explains how to develop a Company Hub for Windows Phone.
+
{{Abstract|This article explains how to develop a Company Hub for Windows Phone. It does not cover MDM (Mobile Devices Management) systems like Intune.}}  
It will not cover MDM (Mobile Devices Management) systems like Intune.
+
{{SeeAlso|
}}  
+
* [http://msdn.microsoft.com/en-us/library/windowsphone/develop/jj206943(v=vs.105).aspx Company app distribution for Windows Phone] (Dev Center)
 
+
* [http://code.msdn.microsoft.com/wpapps/Company-Hub-Sample-cf060519 Company Hub Sample] (Dev Center)
 +
* [https://expertcentre.nokia.com/en/articles/kbarticles/Pages/Company-Hub-resource-hub.aspx#.UlI2GFBBPbM Company Hub resource hub] (Nokia Expert Center)
 +
* [http://blogs.windows.com/windows_phone/b/wpdev/archive/2013/06/25/company-hub-private-distribution-of-windows-phone-apps.aspx Company Hub – Private distribution of Windows Phone apps] (Windows Phone Developer Blog)
 +
* [http://blogs.msdn.com/b/msgulfcommunity/archive/2013/05/04/company-hub-app-for-business-on-windows-phone-8.aspx Company Hub App for Business on Windows Phone 8] (Microsoft Gulf Community Blog)}}
  
 
{{ArticleMetaData <!-- v1.3 -->
 
{{ArticleMetaData <!-- v1.3 -->
Line 19: Line 22:
 
|review-by= <!-- After re-review: [[User:username]] -->
 
|review-by= <!-- After re-review: [[User:username]] -->
 
|review-timestamp= <!-- After re-review: YYYYMMDD -->
 
|review-timestamp= <!-- After re-review: YYYYMMDD -->
|update-by= [[User:Guruumeditation]]
 
|update-timestamp= 20131006
 
 
|creationdate= 20131006
 
|creationdate= 20131006
|author= [[User:Guruumeditation]]
+
|author= [[User:GuruuMeditation]]
 
}}
 
}}
  
 
== Introduction ==
 
== Introduction ==
  
These are the steps covered in this Wiki :
+
Windows Phone 8 (and later) allows companies to publish and distribute apps directly to their employees and other users, bypassing the Windows Phone store. Users discover and install company-specific apps though an app referred to as a "Company Hub". 
 +
 
 +
Companies can use the default [http://www.microsoft.com/en-us/download/details.aspx?id=36060 Windows Phone 8 Company Portal App] or create their own. Companies that create their own hubs typically provide a fully branded app, with company-relevant features and experiences, including company news, notifications and alerts.
  
* Register as company
+
{{Note|Companies that manage their phones using Mobile Devices Management (MDM) systems like ''Windows Intune'' or ''System Center 2012 Configuration Manager'' will use the default [http://www.microsoft.com/en-us/download/details.aspx?id&#61;36060 Windows Phone 8 Company Portal App] as a Company Hub. This article covers only company-created apps.}}
* Get a Symantec Certificate
+
* Develop company hub
+
* Develop company apps
+
* Sign hub and apps
+
* Create app discovery service
+
* Send the certificate and the company app to users
+
  
There is, at the end, the source code of a Company Hub sample :
+
This article explains all the steps needed to create a company app and company apps, from registering as a company all the way through to sending the company certificate and company app through to users.
  
[[File:HubExample.png|200px]]
+
[[File:HubExample.png|200px|thumb|Company Hub code example]]
  
== Register as company ==
+
== Create a "company" developer account ==
  
When you create your developer account, you should create a company one, not an individual. Once the company verification is done, you’ll get a Symantec ID : <br />
+
When you create your developer account, register as a company rather than as an individual. Once the company verification is done, you'll get a Symantec ID:
  
[[File:CompanyHub1.jpg|300px]]
+
[[File:CompanyHub1.jpg|thumb|none|300px|Company developer account with Symantec ID]]
  
 
== Get a Symantec Certificate ==
 
== Get a Symantec Certificate ==
  
Once you have your Symantec ID, you have to buy a $299/year certificate here : https://products.websecurity.symantec.com/orders/enrollment/microsoftCert.do
+
Once you have your Symantec ID, you have to buy a $299/year certificate at this link: https://products.websecurity.symantec.com/orders/enrollment/microsoftCert.do
  
 
== Develop company hub ==
 
== Develop company hub ==
  
The company hub is just like a regular application. you can do anything you want. Of course, it would be quite useless if there isn’t a company app discovery page where you can see which company apps are available to download and a page where you can launch the already installed apps. A company news or user company profile page wouldn’t hurt either.
+
The company hub is just like a regular application. you can do anything you want. Of course, it would be quite useless if there isn't a company app discovery page where you can see which company apps are available to download and a page where you can launch the already installed apps. A company news or user company profile page wouldn't hurt either.
  
 
There are 5 methods specially there for company hub :
 
There are 5 methods specially there for company hub :
Line 66: Line 63:
 
I’ll give a simple example (sources given at the end) of a company hub with a 2 tabs panorama. One tab show already installed app. You can launch them with a tap. The other tab is a list of available company apps. Tap to install.
 
I’ll give a simple example (sources given at the end) of a company hub with a 2 tabs panorama. One tab show already installed app. You can launch them with a tap. The other tab is a list of available company apps. Tap to install.
  
This is the PacketInfo class I use. It gives all the information I need about available apps (ID, name, description, URL, icon,…) and has also some ViewModel-like properties (I want to make the things simple) :
+
This is the {{Icode|PacketInfo}} class I use. It gives all the information I need about available apps (ID, name, description, URL, icon,…) and has also some ViewModel-like properties (I want to make the things simple) :
 
<code csharp>
 
<code csharp>
 
     [Serializable]
 
     [Serializable]
Line 95: Line 92:
 
     }
 
     }
 
</code>
 
</code>
This is the part where I load the two lists : the available app list and the already installed app list :
+
This is the part where I load the two lists: the available app list and the already installed app list:
  
 
<code csharp>
 
<code csharp>
Line 140: Line 137:
 
</code>
 
</code>
  
I get the available app list from my webservice. I get the installed app list with the FindPackagessForCurrentPublisher method.
+
I get the available app list from my webservice. I get the installed app list with the {{Icode|FindPackagessForCurrentPublisher}} method.
  
 
For each app installed, I get the thumbnail (icon) and copy it locally. I create a PackageInfo with all the info needed and add it to a list. As the company hub itself will be listed, it is better to remove it from the list
 
For each app installed, I get the thumbnail (icon) and copy it locally. I create a PackageInfo with all the info needed and add it to a list. As the company hub itself will be listed, it is better to remove it from the list
Line 199: Line 196:
 
</code>
 
</code>
  
Just a simple LongListSelector. When you tap on an item, the app is installed :
+
Just a simple {{Icode|LongListSelector}}. When you tap on an item, the app is installed:
  
 
<code csharp>
 
<code csharp>
Line 238: Line 235:
 
</code>
 
</code>
  
I use '''InstallationManager.AddPackageAsync''' to add the package. It returns a IAsyncOperationWithProgress<PackageInstallResult, UInt32>, so I can follow the progress thanks to the Progress event. I use the Completed delegate to warn user it is installed or if there was an error.
+
I use {{Icode|InstallationManager.AddPackageAsync}} to add the package. It returns a {{Icode|IAsyncOperationWithProgress<PackageInstallResult, UInt32>}}, so I can follow the progress thanks to the {{Icode|Progress}} event. I use the {{Icode|Completed}} delegate to warn user it is installed or if there was an error.
  
{{Note|The '''Progress''' event will be called 4 times only. At 5% (Phone asking confirmation ot the user), 10% (User accepted), 55% (Download done) and 100% (Installation done)}}
+
{{Note|The {{Icode|Progress}} event will be called 4 times only. At 5% (Phone asking confirmation from the user), 10% (User accepted), 55% (Download done) and 100% (Installation done)}}
  
{{Warning|There is something subtle with '''Completed''' : it is a '''delegate''', not an '''event''' ! Use &#61; and not +&#61;. If you have weird exception when you’re on that line, it is probably you made the mistake}}
+
{{Warning|There is something subtle with {{Icode|Completed}}: it is a '''delegate''', not an '''event''' ! Use &#61; and not +&#61;. If you have weird exception on that line, this is probably the cause.}}
  
 
To launch an app is straightforward:
 
To launch an app is straightforward:
Line 272: Line 269:
 
</code>
 
</code>
  
It will generate 3 files. It is the AET.aetx that you send to users. The AET.aet is for MDM systems. The other is raw AET in XML. More info here : http://msdn.microsoft.com/en-us/library/windowsphone/develop/jj735576(v=vs.105).aspx)
+
It will generate 3 files. It is the '''AET.aetx''' that you send to users. The AET.aet is for MDM systems. The other is raw AET in XML. More info here : http://msdn.microsoft.com/en-us/library/windowsphone/develop/jj735576(v=vs.105).aspx)
  
 
Now to sign your apps, there are several ways as explained here : http://msdn.microsoft.com/en-us/library/windowsphone/develop/dn168929(v=vs.105).aspx
 
Now to sign your apps, there are several ways as explained here : http://msdn.microsoft.com/en-us/library/windowsphone/develop/dn168929(v=vs.105).aspx
  
The easiest is to use the BuildMDILXap.ps1 that is in the %ProgramFiles(x86)%\Microsoft SDKs\Windows Phone\v8.0\Tools\MDILXAPCompile as it does all the steps for you.
+
The easiest is to use the '''BuildMDILXap.ps1''' that is in the %ProgramFiles(x86)%\Microsoft SDKs\Windows Phone\v8.0\Tools\MDILXAPCompile as it does all the steps for you.
  
 
I added it in post build that way :
 
I added it in post build that way :
Line 351: Line 348:
 
To install the AET, just double click on it.
 
To install the AET, just double click on it.
  
== Conclusion ==
+
== Downloads ==
  
Well, side loading company app is way easier than with Windows 8. In the sense you don’t need extra license, or specific version of Windows (Entreprise),... It is a complain I heard a lot from companies who are interested in Windows side loading. I hope for Windows 9, the system will get inspired by the WP team one.
+
The source for the code example is available here: [[File:MyCompanyHub.zip]]
 +
 
 +
The app appears as below:
 +
[[File:HubExample.png|none|200px]]
 +
 
 +
== Conclusion ==
  
[[File:HubExample.png|200px]]
+
Well, side loading company app is way easier than with Windows 8. In the sense you don’t need extra license, or specific version of Windows (Enterprise),... It is a complain I heard a lot from companies who are interested in Windows side loading. I hope for Windows 9, the system will get inspired by the WP team one.
  
[[File:MyCompanyHub.zip|thumb|Sources]]
 
  
 
''(Original article and a French translation can be found here : http://www.guruumeditation.net/developing-a-company-hub-for-windows-phone-8)''
 
''(Original article and a French translation can be found here : http://www.guruumeditation.net/developing-a-company-hub-for-windows-phone-8)''
[[Category:Code Examples]]
 

Revision as of 08:23, 7 October 2013

This article explains how to develop a Company Hub for Windows Phone. It does not cover MDM (Mobile Devices Management) systems like Intune.

See Also
SignpostIcon XAML 40.png
WP Metro Icon WP8.png
SignpostIcon Code 52.png
Article Metadata
Code ExampleTested with
SDK: Windows Phone 8.0 SDK
Devices(s): Nokia Lumia 920
Compatibility
Platform(s):
Windows Phone 8
Platform Security
Signing Required: Symantec Certificate
Article
Created: GuruuMeditation (06 Oct 2013)
Last edited: hamishwillee (07 Oct 2013)

Contents

Introduction

Windows Phone 8 (and later) allows companies to publish and distribute apps directly to their employees and other users, bypassing the Windows Phone store. Users discover and install company-specific apps though an app referred to as a "Company Hub".

Companies can use the default Windows Phone 8 Company Portal App or create their own. Companies that create their own hubs typically provide a fully branded app, with company-relevant features and experiences, including company news, notifications and alerts.

Note.pngNote: Companies that manage their phones using Mobile Devices Management (MDM) systems like Windows Intune or System Center 2012 Configuration Manager will use the default Windows Phone 8 Company Portal App as a Company Hub. This article covers only company-created apps.

This article explains all the steps needed to create a company app and company apps, from registering as a company all the way through to sending the company certificate and company app through to users.

Company Hub code example

Create a "company" developer account

When you create your developer account, register as a company rather than as an individual. Once the company verification is done, you'll get a Symantec ID:

Company developer account with Symantec ID

Get a Symantec Certificate

Once you have your Symantec ID, you have to buy a $299/year certificate at this link: https://products.websecurity.symantec.com/orders/enrollment/microsoftCert.do

Develop company hub

The company hub is just like a regular application. you can do anything you want. Of course, it would be quite useless if there isn't a company app discovery page where you can see which company apps are available to download and a page where you can launch the already installed apps. A company news or user company profile page wouldn't hurt either.

There are 5 methods specially there for company hub :


I’ll give a simple example (sources given at the end) of a company hub with a 2 tabs panorama. One tab show already installed app. You can launch them with a tap. The other tab is a list of available company apps. Tap to install.

This is the PacketInfo class I use. It gives all the information I need about available apps (ID, name, description, URL, icon,…) and has also some ViewModel-like properties (I want to make the things simple) :

    [Serializable]
[DataContract]
public class PackageInfo
{
[DataMember]
public Guid ID { get; set; }
[DataMember]
public string Name { get; set; }
[DataMember]
public string Description { get; set; }
[DataMember]
public string Thumbnail { get; set; }
[DataMember]
public string XAPPath { get; set; }
[DataMember]
public object Icon { get; set; }
// To simplify the app, let's make this class a kind of VM with those properties :
[DataMember]
public bool Downloading { get; set; }
[DataMember]
public uint Progress { get; set; }
[DataMember]
public string ProgressString { get; set; }
[DataMember]
public object Package { get; set; }
}

This is the part where I load the two lists: the available app list and the already installed app list:

 // Clear the ObservableCollections
InstalledPackages.Clear();
AvailablePackages.Clear();[/br]
// Get all packages from web service
var allpackages = await GetPackageListAsync();
// get all package installed with same PublisherID as the Company hub
var installed = InstallationManager.FindPackagesForCurrentPublisher().ToList();
// Company Hub ProductID. Use to remove it from the installed list we just got
var hubid = "{27ed8894-9f3b-4bef-89c6-75e25bb6520a}";
 
foreach (var app in installed.Where(d => !d.Id.ProductId.Equals(hubid,StringComparison.OrdinalIgnoreCase)))
{
// get thumbnail token, and copy the file in local folder
var thumbtoken = app.GetThumbnailToken();
var name = SharedStorageAccessManager.GetSharedFileName(thumbtoken);
 
await SharedStorageAccessManager.CopySharedFileAsync(ApplicationData.Current.LocalFolder
, name,NameCollisionOption.ReplaceExisting, thumbtoken);
var file = await ApplicationData.Current.LocalFolder.GetFileAsync(name);
 
var stream = await file.OpenStreamForReadAsync();
 
var bitmap = new BitmapImage();
bitmap.SetSource(stream);
// create a package info and add it to the collection
var packageinfo = new PackageInfo { ID = new Guid(app.Id.ProductId),
Name = app.Id.Name, Icon = bitmap, Package = app };
 
InstalledPackages.Add(packageinfo);
}
 
foreach (var package in allpackages)
{
// if available package is already installed, do nothing
if (installed.Any(d => d.Id.ProductId.Equals(string.Format("{{{0}}}", package.ID.ToString()),
StringComparison.OrdinalIgnoreCase)))
continue;
// otherwise add it the the vailable collection
AvailablePackages.Add(package);
}

I get the available app list from my webservice. I get the installed app list with the FindPackagessForCurrentPublisher method.

For each app installed, I get the thumbnail (icon) and copy it locally. I create a PackageInfo with all the info needed and add it to a list. As the company hub itself will be listed, it is better to remove it from the list

For each packages available, I check if it is already installed ('by comparing product IDs). If not I add. So there will only be in that list the apps that are not installed yet

This is what my available package list look like in XAML :

 <phone:LongListSelector Margin="0,-38,-22,2"
ItemsSource="{Binding AvailablePackages}">
<phone:LongListSelector.ItemTemplate>
<DataTemplate>
<Grid Margin="0,-6,0,12"
d:DataContext="{d:DesignInstance entrepriseService:PackageInfo}"
toolkit:TiltEffect.IsTiltEnabled="True"
Tap="Package_OnTap">
<Grid.ColumnDefinitions>
<ColumnDefinition Width="Auto" />
<ColumnDefinition />
</Grid.ColumnDefinitions>
<Grid.RowDefinitions>
<RowDefinition Height="Auto" />
<RowDefinition Height="Auto" />
</Grid.RowDefinitions>
<Image Source="{Binding Thumbnail}"
Width="80"
Height="80"
Grid.RowSpan="2"
Margin="10"
VerticalAlignment="Top" />
<TextBlock Text="{Binding Name}"
Grid.Column="1"
TextWrapping="Wrap"
Style="{StaticResource PhoneTextExtraLargeStyle}"
FontSize="{StaticResource PhoneFontSizeExtraLarge}" />
<TextBlock Grid.Row="1"
Grid.Column="1"
Text="{Binding Description}"
Visibility="{Binding Downloading,Converter={StaticResource BoolToInvertedVisibilityConverter}}"
Foreground="DarkGray"
TextWrapping="Wrap"
Margin="15,0,0,0" />
<StackPanel Orientation="Vertical"
Grid.Column="1"
Grid.Row="1"
x:Name="IntallStackPanel">
<ProgressBar IsIndeterminate="False"
x:Name="IntallProgressBar"
Value="{Binding Progress}"
Visibility="{Binding Downloading,Converter={StaticResource BoolToVisibilityConverter}}" />
<TextBlock Text="{Binding ProgressString}" />
</StackPanel>
</Grid>
</DataTemplate>
</phone:LongListSelector.ItemTemplate>
</phone:LongListSelector>

Just a simple LongListSelector. When you tap on an item, the app is installed:

        // Install app
private void Package_OnTap(object sender, GestureEventArgs e)
{
// Get package info
var package = (sender as Grid).DataContext as PackageInfo;
 
try
{
package.Downloading = true;
// install app package
var result = InstallationManager.AddPackageAsync(package.Name, new Uri(package.XAPPath, UriKind.Absolute));
 
result.Progress += (info, progressInfo) => Dispatcher.BeginInvoke(() =>
{
package.Progress = progressInfo;
package.ProgressString = string.Format("Installing ({0}%)...", progressInfo);
});
 
result.Completed = (info, status) => Dispatcher.BeginInvoke(async () =>
{
MessageBox.Show(info.ErrorCode == null
? string.Format("{0} installed", package.Name)
: string.Format("Error installing : {0}", info.ErrorCode.Message));
package.Downloading = false;
await LoadingPackagesListAsync();
});
 
}
catch (Exception exception)
{
Console.WriteLine(exception);
}
 
}

I use InstallationManager.AddPackageAsync to add the package. It returns a IAsyncOperationWithProgress<PackageInstallResult, UInt32>, so I can follow the progress thanks to the Progress event. I use the Completed delegate to warn user it is installed or if there was an error.

Note.pngNote: The Progress event will be called 4 times only. At 5% (Phone asking confirmation from the user), 10% (User accepted), 55% (Download done) and 100% (Installation done)

Warning.pngWarning: There is something subtle with Completed: it is a delegate, not an event ! Use = and not +=. If you have weird exception on that line, this is probably the cause.

To launch an app is straightforward:

// Lauch app
private void LaunchApp_OnTap(object sender, GestureEventArgs e)
{
var packageInfo = (sender as Grid).DataContext as PackageInfo;
 
var package = packageInfo.Package as Package;
 
package.Launch("");
}

Develop company apps

Nothing special to say. It is just like regular app.

Sign hub and apps

Before you deploy everything, you need to sign the app.

To do so, you have to install the certificate you got from Symantec and export it as PFX (example here : http://msdn.microsoft.com/en-us/library/gg432987.aspx). Then you can generate the AET (Application Enrollment Token) that you will have to send to the users. They have to install it on their phone in order to use your apps. There is an AET generator with the Phone SDK. To launch :

%ProgramFiles(x86)%\Microsoft SDKs\Windows Phone\v8.0\Tools\AETGenerator\AETGenerator.exe PFXFile Password

It will generate 3 files. It is the AET.aetx that you send to users. The AET.aet is for MDM systems. The other is raw AET in XML. More info here : http://msdn.microsoft.com/en-us/library/windowsphone/develop/jj735576(v=vs.105).aspx)

Now to sign your apps, there are several ways as explained here : http://msdn.microsoft.com/en-us/library/windowsphone/develop/dn168929(v=vs.105).aspx

The easiest is to use the BuildMDILXap.ps1 that is in the %ProgramFiles(x86)%\Microsoft SDKs\Windows Phone\v8.0\Tools\MDILXAPCompile as it does all the steps for you.

I added it in post build that way :

CompanyHub2.jpg

Here is it, for one of the example company app :

del "$(TargetDir)\AriesApp_new.xap"
powershell.exe -ExecutionPolicy ByPass -File "%ProgramFiles(x86)%\Microsoft SDKs\Windows Phone\v8.0\Tools\
MDILXAPCompile\BuildMDILXap.ps1" -xapfilename "$(TargetDir)\AriesApp.xap"
–pfxfilename "$(SolutionDir)\Keys\mycert.pfx" -password mypassword
copy /y "$(TargetDir)\AriesApp_new.xap" "$(SolutionDir)\WcfService1\XAP\AriesApp.xap"

I delete the older version of the signed xap, I execute the script (my keys are stored in a Keys directory) and finally I copy the xap on my service website, where it can be downloaded by the users.

Tip.pngTip: Don’t forget to set your publisher ID in the manifest of the apps. The publisher ID can be generated that way : take your Symantec ID (Example : 541255) . Convert it to hex (0x84247) and create a GUID out of it : 00084247-0000-0000-000000000000)

Create app discovery service

It is not necessarily a service. It can be XML file,etc…

I made a very simple one, it just read, deserialize an XML file and send it :

 public class EntrepriseService : IEntrepriseService
{
public List<PackageInfo> GetEntreprisePackages()
{
// just read the XML file, deserialize it and then send
var appPath = System.Web.Hosting.HostingEnvironment.ApplicationPhysicalPath;
 
PackageInfo[] packages;
 
using (var sr = new StreamReader(appPath + "/Packages.xml"))
{
var dcs = new XmlSerializer(typeof(PackageInfo[]), new[] { typeof(PackageInfo) });
packages = dcs.Deserialize(sr.BaseStream) as PackageInfo[];
}
 
return packages.ToList();
}
}

The XML is like this :

<?xml version="1.0" encoding="utf-8" ?>
<ArrayOfPackageInfo xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
<PackageInfo>
<ID>{16823216-c5b1-4613-a50c-9fb9bbddc571}</ID>
<Name>Aries</Name>
<Description>Lorem ipsum dolor sit amet, consectetur adipiscing elit. In aliquam convallis elit, ac aliquam neque vulputate eget. Sed consequat non nibh quis pharetra. </Description>
<Thumbnail>http://192.168.0.110:19475/Thumb/Astro-Aries.png</Thumbnail>
<XAPPath>http://192.168.0.110:19475/XAP/AriesApp.XAP</XAPPath>
</PackageInfo>
<PackageInfo>
<ID>{52957e14-91ef-485d-9fb4-e69086facb6e}</ID>
<Name>Taurus</Name>
<Description>Lorem ipsum dolor sit amet, consectetur adipiscing elit. In aliquam convallis elit, ac aliquam neque vulputate eget. Sed consequat non nibh quis pharetra. </Description>
<Thumbnail>http://192.168.0.110:19475/Thumb/Astro-Taurus.png</Thumbnail>
<XAPPath>http://192.168.0.110:19475/XAP/TaurusApp.XAP</XAPPath>
</PackageInfo>
</ArrayOfPackageInfo>

Send the certificate and the company app to users

Send the keys and the app to the user by email. Or have them download it from a website. Anyway, do it securely.

To install the AET, just double click on it.

Downloads

The source for the code example is available here: File:MyCompanyHub.zip

The app appears as below:

HubExample.png

Conclusion

Well, side loading company app is way easier than with Windows 8. In the sense you don’t need extra license, or specific version of Windows (Enterprise),... It is a complain I heard a lot from companies who are interested in Windows side loading. I hope for Windows 9, the system will get inspired by the WP team one.


(Original article and a French translation can be found here : http://www.guruumeditation.net/developing-a-company-hub-for-windows-phone-8)

130 page views in the last 30 days.