Tag Archives: Windows Phone App

Windows Phone 8.1 アプリにプライバシーポリシーのリンクを実装する

新年早々、公開している Save to Instapaper10.5.1 のポリシーに違反しているとのメールが来ました。理由が分からず Twitter でつぶやいてみると、biacさんから情報を頂きました。


ご指摘の通り、Windows Phone 8.1 アプリにプライバシーポリシーのリンクを実装していませんでした。というわけで、アプリバーを使って、シンプルに実装してみました。

<Page.BottomAppBar>
    <CommandBar ClosedDisplayMode="Minimal">
        <CommandBar.PrimaryCommands>
            <AppBarButton Icon="Setting" x:Uid="PrivacyPolicy" Label="プライバシーポリシー" Click="AppBarPrivacyPolicyButton_Click"/>
        </CommandBar.PrimaryCommands>
    </CommandBar>
</Page.BottomAppBar>
private async void AppBarPrivacyPolicyButton_Click(object sender, RoutedEventArgs e)
{
    await Launcher.LaunchUriAsync(new Uri("http://gooner.azurewebsites.net/privacy-policy/"));
}

実行すると、こんな感じで表示されます。

pp

とりあえず、この修正を加えたパッケージを申請して、様子をみたいと思います。

Windows Phone 8.1 から Instapaper Simple API を呼び出すとエラーが発生する

先月、Windows 8.1 と Windows Phone 8.1 の共有コントラクトから、あとで読みたい記事の URL を Instapaper に保存できるアプリをリリースしました。その際に、Shared プロジェクトに Instapaper Simple API の呼び出しメソッドを実装しました。

public static async Task AddAsync(string userName, string password, string uri)
{
    try
    {
        using (var client = new HttpClient())
        {
            var content = new FormUrlEncodedContent(new Dictionary<string, string>
				{
					{ "username", userName },
					{ "password", password },
					{ "url",uri },
				});
            var res = await client.PostAsync("https://www.instapaper.com/api/add", content);
            res.EnsureSuccessStatusCode();
        }
    }
    catch (ArgumentException)
    {
        // [net_WebHeaderInvalidControlChars]
        // Arguments:
        // Debugging resource strings are unavailable.
        // Often the key and arguments provide sufficient information to diagnose the problem.
        // See http://go.microsoft.com/fwlink/?linkid=106663&Version=4.7.60408.0&File=System.Net.dll&Key=net_WebHeaderInvalidControlChars
        // Parameter name: name

        // WP8.1では成功しているにも関わらず、エラーが返されてしまうので、正常終了として扱う。
        return;
    }
    catch (Exception)
    {
        throw;
    }
}

このメソッドは、Windows 8.1 からであれば正常終了するのですが、Windows Phone 8.1 からは ArgumentException が発生してしまいます。例外は発生しますが、URL の保存には成功しています。原因が分からず、ArgumentException を無視して正常終了とする回避ロジックを入れて暫定対応しました。

// 追記 ———- ↓

この記事を書いた後、Twitter で情報を頂きました。こちらと同じ現象で、保存した記事のタイトルがレスポンスヘッダー(X-Instapaper-Title)で返されるのですが、日本語タイトルがそのままセットされていることが原因のようです。英語タイトルなら問題ありません。Instapaper 側に原因があり、クライアント側での対応は難しそうなので、当面は ArgumentException を正常終了として扱うようにします。

// 追記 ———- ↑

Save to Instapaper をリリースしました

Build 2012 で配られた Lumia 920 にも 8.1 の更新が降ってきたこともあり、Windows 8.1 と Windows Phone 8.1 向けのストアアプリを作って公開しました。初めてということで、なるべくシンプルに作れるアプリが欲しかったので、共有コントラクトから、あとで読みたい記事の URL を Instapaper に保存できるアプリを作りました。


この埋め込みは、しばやんさんの Windows Store oEmbed  API を使わせて頂きました。

Universal Windows App で作ったので、共有コントラクトのロジックや多言語対応のリソースを共通化できました。このくらいシンプルなアプリであれば、簡単に共通化できて素直に便利だと実感できました。また、アプリの申請から公開までは、たったの1時間強だったので、あまりの速さに驚きました。

次回は、もう少し本格的なアプリを作ってみたいと思います。

Windows Phone 8.1 では WCF がサポートされていなかった

タイトルの通りなのですが、Windows Phone 8.1 では、WCF(System.ServiceModel 名前空間)に非対応でした。ServiceContract などを使おうとしても、コンパイルエラーとなってしまいます。

wcf

Silverlight のサブセットである Windows Phone 7.5 や 8.0 では、WCF の通信が可能でした。Universal Windows App では、ストアと電話の API は 9 割の互換性を持つと言われていますが、WCF が非互換の1割に含まれていたとは。

すでに ASP.NET Web API などでサービスを公開し、HttpClient で通信するプログラミングが中心となっており、今さらモバイル向けに WCF で通信することはないと思いますが・・・

Azure Virtual Machines では Windows Phone 8.1 Emulator を起動できなかった

TechEd NA 2014 で発表があったのように、Azure の Virtual Machines で Windows 7 と 8.1 のクライアント OS の VM イメージが使えるようになりました。

先日、Windows Phone Arch in Tokyo に参加したこともあり、Universal Windows App を試したかったので、Azure の Windows 8.1 上に開発環境を構築したのですが、Windows Phone 8.1 Emulator が起動できないことが少し残念だったので、共有しておきたいと思います。

まず、Azure ポータルサイトの Virtual Machines のギャラリーから Windows 8.1 を選択して、仮想マシンを作成しました。OS を日本語化して、Visual Studio 2013 Update 2 RTW をインストールし、ユニバーサルアプリのテンプレートから作ったプロジェクトをデバッグ実行すると、エラーが発生しました。

Error01

Azure ポータルサイトのウィザード画面で作成したアカウントでは、Windows ストア アプリをデバッグ実行できないんですね。これは、新しいアカウントを追加することで解決しました。

次に、Windows Phone 8.1 アプリをデバッグ実行すると、別のエラーが発生しました。

Error02

どうやら、WDDM1.1以降のドライバが入っていないことが原因のようです。

Error03

Windows Phone 8.1 Emulator が起動できない以外は問題なさそうなので、クラウドを活用した開発やテストに活用していきたいと思います。