URI associations for Windows Phone 8
This article explains how to associate your application with an URI scheme in order to launch it when interaction with such URI is detected.
Article Metadata
Code Example
Compatibility
Article
Contents |
Introduction
Windows Phone 8 introduces the possibility for your app to register to a predefined kind of URI scheme. This will allow you to launch your application from various sources and with various optional parameters. The URI will have to be formatted as follows:
<Custom Protocol Name>:<The landing page>?[First parameter name]=[First parameter value]&[Second parameter name]=[Second parameter value]
For example:
myappuri:MainPage?Category=5&Subcategory=3
Note that its not mandatory to put the landing page after the semi colon, but it is a good practice. You can use an ID like this:
myappuri:45645645645
How to register for an URI association
To register an URI scheme for your app you will have to manually edit the app manifest. In the Solution Explorer open the Properties folder, right click on the WMAppManifest.xml file and select View Code. Scroll down to the end of the Tokens element and add an Extensions element with a Protocol children like this:
<Extensions>
<Protocol Name="myappuri" NavUriFragment="encodedLaunchUri=%s" TaskID="_default" />
</Extensions>
Just replace myappuri value with the URI you want to use. The other parameters are mandatory and must stay like this.
How to detect that your user launched the app from the URI association
You will have to implement a custom UriMapper that will parse the Uri at the launch of your application and try to detect the source. Following the sample provided above, the UriMapper would look like this in our case:
class AssociationUriMapper : UriMapperBase
{
private string tempUri;
public override Uri MapUri(Uri uri)
{
tempUri = System.Net.HttpUtility.UrlDecode(uri.ToString());
// URI association launch for my app detected
if (tempUri.Contains("myappuri:MainPage?Category="))
{
// Get the category (after "Category=").
int categoryIndex = tempUri.IndexOf("Category=") + 9;
string category = tempUri.Substring(categoryIndex);
// Redirect to the MainPage.xaml with the proper category to be displayed
return new Uri("/MainPage.xaml?Category=" + category, UriKind.Relative);
}
// Otherwise perform normal launch.
return uri;
}
}
One more step to ensure that your application will use your new UriMapper, go to App.xamls.cs file in the InitializePhoneApplication() method and add this line:
RootFrame.UriMapper = new AssociationUriMapper();
Your app will now try to detect if it was launched from the normal way or from the URI association, and in this case it will parse the parameters provided and redirect to the proper page.
How to retrive the parameters once you have been redirected
Like for any page navigation in Windows Phone you'll have to check the QueryString in NavigationContext once you've reached your target page to retrieve your parameters
protected override void OnNavigatedTo(NavigationEventArgs e)
{
if (NavigationContext.QueryString.ContainsKey("Category"))
{
Category = int.Parse(NavigationContext.QueryString["Category"]);
}
base.OnNavigatedTo(e);
}
What will and will not work
What will trigger your URI association and launch your app:
- Get the URI from NFC tag.
- Get the URI by mail.
- Click on a HTML link containing the URI.
- Webpage redirection with a custom protocol.
- Get the URI from NFC device sharing an URI (e.g. PublishUriMessage(Uri) from ProximityDevice).
What will NOT trigger your URI association and launch your app
- Enter directly the URI in the Web Browser.
- Scan a QR code from Bing search.
What MAY trigger your URI association and launch your app
- Get the URI by SMS. It seems to depend on the uri your registered and could be connected to its length
What if many applications registered the same name
In this case the user will be prompted to select which application he want to launch
Document your custom URI protocol
Your application can now be started by and can receive data from other applications. But in order for this to work, you must document your protocol. You can use this document as a catalog and advertise your protocol by adding it to the table below.
| Custom URI | Link to documentation |
|---|---|
| fb:// | http://www |


Contents
Chintandave er - Thanks. Sub-edited and moved!
Hi, Thanks for this article.
I have sub-edited this article, added some category like Windows phone 8 and formatted code using code template. Also I changed the article title.
Have some suggestions for you.
You might want to check out wiki help articles Help:Formatting and Help:Wiki Article Review Checklist.
Regards
Chintan Dave.Chintandave er 13:25, 28 November 2012 (EET)
Yan -
Hi. WIth QR code, you can create a tiny url to your uri. For example with tyniurl.com,
yan_ 13:03, 29 November 2012 (EET)
Chintandave er - Question on register for an uri
Hi
You didn't explain in your article that what will happen if one phone has multiple apps with the same Uri name (like with myappname uri name) ? Which app phone will launch ?
Regards,
Chintan Dave.Chintandave er 07:23, 4 December 2012 (EET)
MaMi -
Hello,
I updated the article to answer your question
CheersMaMi 13:52, 4 December 2012 (EET)
Chintandave er - Thanks !
THanks for that. Nice.
Chintan Dave.Chintandave er 20:17, 5 December 2012 (EET)
Hamishwillee - Review/feedback
Hi Mami
OK, so first I think this is an well written and relatively comprehensive article. The only thing that is I can see missing is there is no explanation of how to get the passed parameters when you get the the MainPage (or wherever the message was mapped to). I would probably also add a comment early in introduction that you can't use any URI you like because some are reserved (and link to that list).
I particularly like that you created the section "What will and will not work", and that you've added links to the references. Great job.
My only concern with this is that the original documents are pretty comprehensive too. Generally we don't create new articles if there are already good documents that do the job on DevCenter - we recommend "adding value". To some extent you do this by having a code example, and with your real world testing. However I'm not sure that the judges will see this as sufficiently valuable. You might want to consider if there are other "innovative" ways that you could use the material you've learned here in an entry - as an example, something like Link2SMS - a protocol handling example (and I'm not saying this is better than what you did, just that it explores a use case that isn't documented elsewhere).
Whatever happens with the competition, I like your writing approach and I hope to see more of you on the wiki.
Regards
Hamishhamishwillee 07:13, 7 December 2012 (EET)
MaMi -
copy that, I agree with your point
at first I just wanted to share the results of my investigations but thought it would be too light, moreover it is just a small part of the original msdn content and I thought it could worth it to have this specific part on a dedicated article.
also there already is a link to reserved URI list at the end of the article.
regardsMaMi 16:51, 7 December 2012 (EET)
Hamishwillee - Indeed
Thanks!
Can you please add the " explanation of how to get the passed parameters when you get the the MainPage"? At least then you have the main points all covered.
Regards
Hamishhamishwillee 04:26, 8 December 2012 (EET)
MaMi -
sure, doneMaMi 12:55, 10 December 2012 (EET)
Hamishwillee - Thanks.
I don't know whether or not this article will win in the competition, but I am more than pleased to have it here, particularly because of the "what will and will not work" section (this is what it "value adds", along with the example). Thank youhamishwillee 06:57, 19 December 2012 (EET)
Vantech - Email Uri Link
Hi, I am having trouble opening the App from a Url in a Email. What do I put in the Email to make it open the App? Can you please Help me? Thanks,
Vandan Patelvantech 04:52, 1 January 2013 (EET)