To launch your app via a NFC tag, you need to Register it for a URI association by adding an extension in the WMAppManifest.xml
file, like this:
<Extensions>
<Protocol Name="mynfcapp" NavUriFragment="encodedLaunchUri=%s" TaskID="_default" />
</Extensions>
Then you will need to create a URI mapper that can handle the URI association, like this:
public class AssociationUriMapper : UriMapperBase
{
public override Uri MapUri(Uri uri)
{
string url = HttpUtility.UrlDecode(uri.ToString());
if (url.Contains("mynfcapp:MainPage"))
{
int paramIndex = url.IndexOf("source=") + 7;
string paramValue = url.Substring(paramIndex);
return new Uri("/MainPage.xaml?source=" + paramValue, UriKind.Relative);
}
return uri;
}
}
And here is the code to write the NFC tag that will launch the app:
public partial class MainPage : PhoneApplicationPage
{
private readonly ProximityDevice _proximityDevice;
private long subId = 0;
private long pubId = 0;
public MainPage()
{
InitializeComponent();
_proximityDevice = ProximityDevice.GetDefault();
}
protected override void OnNavigatedTo(NavigationEventArgs e)
{
if (_proximityDevice != null)
subId = _proximityDevice.SubscribeForMessage("WriteableTag", OnWriteableTagArrived);
base.OnNavigatedTo(e);
}
private void OnWriteableTagArrived(ProximityDevice sender, ProximityMessage message)
{
var dataWriter = new DataWriter();
dataWriter.UnicodeEncoding = Windows.Storage.Streams.UnicodeEncoding.Utf16LE;
string appLauncher = string.Format(@"mynfcapp:MainPage?source=mynfctest");
dataWriter.WriteString(appLauncher);
pubId = sender.PublishBinaryMessage("WindowsUri:WriteTag", dataWriter.DetachBuffer());
}
}