kazuakix の日記

Windows Phone とか好きです

Windows Phone 8.1 で URI プロトコル呼び出しに対応する

先日、こんな要望を頂きました。

あの...ワタクシ、例のアレ進めたいんですけど...

でも、例のアレちょっと行き詰ってるし、気晴らしにこっちを作ってみる事にしました。

API を確認する。

Windows Phone 7 向けに出している mio Coupon は IIJmio の会員向けページをスクレイピングするという超力技的な作りになっています。

でも今では IIJ さんが API を用意してくれているので、こちらを使うことにしましょう。

 
ここで唯一問題になりそうなのは最初にアクセストークンを受け取る部分。
「認証サーバーからリダイレクト URI にアクセストークンを含めてリダイレクト」と書かれていますので、Web ブラウザからアプリを起動してもらう事になります。

ちなみにリダイレクト URI はこんな感じに設定できます。http://~ に限らず自由に設定できるのがポイントですね。

f:id:kazuakix:20140921000818j:plain
 

URI プロトコルによる呼び出しに対応する

以前の Silverlight の頃は UriMapper クラスあたりで対応していたのですが、WinRT になってやり方が変わっていました。詳細は以下のドキュメントに解説があります。

 
まずは Phone プロジェクトの Package.appxmanifest の「宣言」タブを開いて、使用可能な宣言で「プロトコル」を選んで 名前に上で設定した URI のスキーム名 (miocoupon) だけを指定して保存しておきます。

f:id:kazuakix:20140921000827j:plain

続いて App.xaml.cs で OnActivated メソッドをオーバーライドします。

protected override void OnActivated(IActivatedEventArgs args)
{
    if (args.Kind == ActivationKind.Protocol)
    {
        // Uri プロトコルによる呼び出しの場合
        var paeArgs = args as ProtocolActivatedEventArgs;
        var uri = paeArgs.Uri; // 呼び出された Uri
    }
}


これで認証サーバーからリダイレクトされたときにアプリが起動するようになります。

ちなみに、このときの Uri にはこんな値が入っていました。

miocoupon://callback/#access_token=xxxxxxxxxx&state=hoge....

後はここからアクセス トークンを読み取れば先に進めますね。