Multiple URI schemes in one app, is it possible?

This week Robert Irving, maker of Car Starter wrote a very interesting article about Community Uri Schemes. He specifically proposes a generic URI Scheme for Podcast apps. Interestingly I added a similar but app-specific URI scheme to P | Cast in the most recent release.

There are currently two apps that actually make use of the custom URI scheme I created, so I can’t really replace it with a generic URI scheme. So I was wondering if it was possible to add multiple URI schemes to one app. I googled around, but couldn’t really find anything. So there wasn’t much left, just try, and see what happens.

So I opened the WMAppManifest.xml and changed the Extensions element to read like this:

<Extensions>
  <Protocol Name="pcast" NavUriFragment="encodedLaunchUri=%s" TaskID="_default" />
  <Protocol Name="wp-podcast-play" NavUriFragment="encodedLaunchUri=%s" TaskID="_default" />
</Extensions>

 

Then I tested if I could launch the app via both URIs. Don’t forget to modify the UriMapper class you created to also support the additional URI scheme, otherwise the app will hang.

So you can actually add multiple URI schemes to one app. That’s interesting, so I could add the community URI scheme without removing the propriety URI scheme. Now it’s time to think about Robert Irving suggestion, and maybe propose some changes, but that’s for another post.

Update:

According to Scott Lovegrove it’s possible to have up to ten URI schemes for your app. That should be enough I would say.

P | Cast now has a custom URI scheme

When you want your app to become more popular you could enable other apps to launch your app. You can even go beyond just launching and even activating special features.

As you’ve probably read, P | Cast now has a Car Mode UI built in. So there are apps that are focused on Car Mode, which would want to launch P | Cast in it’s Car Mode. Even more, they might want to even start playing the music directly after launching the app.

That’s why adding a custom URI scheme for P | Cast was on my mind from the beginning, and now it’s there.

The basics of launching P | Cast

You can launch P | Cast in it’s normal UI, but also in Car Mode.

/// <summary>
/// Launch P | Cast in Normal UI
/// </summary>
private void Normal()
{
    Windows.System.Launcher.LaunchUriAsync(new Uri("pcast:NormalPlayer"));
}

/// <summary>
/// Launch P | Cast in Car Mode
/// </summary>
private void Car()
{
    Windows.System.Launcher.LaunchUriAsync(new Uri("pcast:CarPlayer"));
}

 

Launch P | Cast and start playing immediately

When we go beyond the basic launch, we can add a couple of additional URI elements to enable immediate playback on app launch.

To start playing the most recent track upon app launch use the below URIs.

/// <summary>
/// Launch P | Cast in Normal UI and immediately start playing the most recent track
/// </summary>
private void NormalPlayRecent()
{
    Windows.System.Launcher.LaunchUriAsync(new Uri("pcast:NormalPlayer?Play=Recent"));
}

/// <summary>
/// Launch P | Cast in Car Mode and immediately start playing the most recent track
/// </summary>
private void CarPlayRecent()
{
    Windows.System.Launcher.LaunchUriAsync(new Uri("pcast:CarPlayer?Play=Recent"));
}

 

And if you want the app to start playing a random track, use these.

/// <summary>
/// Launch P | Cast in Normal UI and immediately start playing a random track
/// </summary>
private void NormalPlayRandom()
{
    Windows.System.Launcher.LaunchUriAsync(new Uri("pcast:NormalPlayer?Play=Random"));
}

/// <summary>
/// Launch P | Cast in Car Mode and immediately start playing a random track
/// </summary>
private void CarPlayRandom()
{
    Windows.System.Launcher.LaunchUriAsync(new Uri("pcast:CarPlayer?Play=Random"));
}

 

If you’ve questions about integration of P | Cast in your app, please leave a message in the comments or contact me on the P | Cast twitter account.

Make your app friendly to use in the car!

Yes the title already says what I want to say. When you have an app that is interesting to use in the car, such as an audio player you should provide an user interface that can be used in the car. All buttons have their extended touch area, but for in car operation the standard button size is too small I think.

34

Alternative user interface with large buttons for in car usage

So I thought about creating a user interface for P | Cast that’s not packed with all the functionality in the normal user interface, but meant to be operated in car or even with your gloves on.

78

As you can see the main functionality play/pause is operated by a very large button. Other functionalities, like an overview of the downloads is not available.

My recommendation for your app if your app is something that should be operable in the car do something similar.

Make the car mode an alternative entry point

Besides the alternative user interface, you can go one step further. You can make the alternative ui an alternative entry point. Add a secondary tile to your app which can activate your car mode from a tile. Something like this.

var tile = new StandardTileData
            {
                Title = AppResources.TileCarTitle,
                BackgroundImage = new Uri("Assets/Tiles/InCarFlipCycleTileMedium.png", UriKind.Relative),
            };
ShellTile.Create(new Uri("/Pages/InCarPlayer.xaml", UriKind.Relative), tile);

Help the DVLUP Challenge: Go ahead, rate my app!

The DVLUP program has an interesting challenge: Go ahead, rate my app!

This challenge wants your app to encourage feedback. Yeah just feedback, similar to an article I wrote about a year ago for Windows Style apps. The interesting thing is that you don’t have to do that much. The challenge already contains code you can copy/paste.

But wait, there’s more, of course we want the words and sentences that appear in the dialogs to be localized, don’t we? I would love to add this to my P | Cast app. But my app is localized in a lot of different languages.

So please join me and help improve the Helperslib project, based on the code that’s provided by DVLUP, improved and made available on NuGet by @SimonDarksideJ. I already added Dutch to the Git Repository. Why don’t you add your native languages?

Windows Store Apps, Error: The certificate specified has expired.

Today I tried to update one of my Windows Store Apps. When I tried to create an App Package for the Store I got an error. One that was completely new to me.

The certificate specified has expired. For more information about renewing certificates, see http://go.microsoft.com/fwlink/?LinkID=241478.

We’re lucky this time, renewing the certificate is very easy. Just follow below steps (copied from MSDN).

  1. In Solution Explorer, open the shortcut menu for the .appxmanifest file, choose Open With, and then choose App Manifest Designer.
  2. In the App Manifest Designer, choose the Packaging tab, and then choose the Choose Certificate button.
  3. In the Choose Certificate dialog box, expand the Configure Certificate list, and then choose Create test certificate.
  4. In the Create test certificate dialog box, click the OK button.

In the end Visual Studio will generate the new certificate with a new expiry date. The new certificate will be valid for a full year.