Neri's Blog

.NETに関するBlogにしたいと思ってます・・・が どうなることやら

スポンサーサイト

上記の広告は1ヶ月以上更新のないブログに表示されています。
新しい記事を書く事で広告が消せます。

Windows Phone 7 Training Kit の プッシュ通知サンプルでハマる・・・

8 月 21 日に新宿 OST にてモバイルプログラミング生放送勉強会が開催されました。

私もトリのセッションで Windows Phone 7 と プッシュ通知についてお話ししました。

その中で Training Kit のプッシュ通知サンプルを紹介したのですが、Beta 対応にも関わらず、対応されきっていないみたいで数時間はまりました。

Tile と Toast メッセジーを送ると・・・

Notification

残念な結果に

error

それぞれ Tile / Toast で使用するメッセージの仕様が変更されたためエラーが発生していた模様ですので、こちらを直しましょう。

NotifcationSenderUtility.cs

solution

 

private static byte[] prepareToastPayload(string text1, string text2)
{
    MemoryStream stream = new MemoryStream();

    // ここからいらね
    //byte[] prefix = Encoding.UTF8.GetBytes("Content-Type: text/xml\r\nX-WindowsPhone-Target: toast\r\n\r\n");
    //stream.Write(prefix, 0, prefix.Length);
    ////// ここまでいらね

    XmlWriterSettings settings = new XmlWriterSettings() { Indent = true, Encoding = Encoding.UTF8 };
    XmlWriter writer = XmlTextWriter.Create(stream, settings);
    writer.WriteStartDocument();
    writer.WriteStartElement("wp", "Notification", "WPNotification");
    writer.WriteStartElement("wp", "Toast", "WPNotification");
    writer.WriteStartElement("wp", "Text1", "WPNotification");
    writer.WriteValue(text1);
    writer.WriteEndElement();
    writer.WriteStartElement("wp", "Text2", "WPNotification");
    writer.WriteValue(text2);
    writer.WriteEndElement();
    writer.WriteEndElement();
    writer.WriteEndDocument();
    writer.Close();

    byte[] payload = stream.ToArray();
    return payload;
}

private static byte[] prepareTilePayload(string tokenId, string backgroundImageUri, int count, string title)
{
    MemoryStream stream = new MemoryStream();

    // ここからいらね
    //byte[] prefix = Encoding.UTF8.GetBytes("Content-Type: text/xml\r\nX-WindowsPhone-Target: token\r\n\r\n");
    //stream.Write(prefix, 0, prefix.Length);
    //// ここまでいらね

    XmlWriterSettings settings = new XmlWriterSettings() { Indent = true, Encoding = Encoding.UTF8 };
    XmlWriter writer = XmlTextWriter.Create(stream, settings);
    writer.WriteStartDocument();
    writer.WriteStartElement("wp", "Notification", "WPNotification");
    writer.WriteStartElement("wp", "Tile", "WPNotification");
    writer.WriteStartElement("wp", "BackgroundImage", "WPNotification");
    writer.WriteValue(backgroundImageUri);
    writer.WriteEndElement();
    writer.WriteStartElement("wp", "Count", "WPNotification");
    writer.WriteValue(count.ToString());
    writer.WriteEndElement();
    writer.WriteStartElement("wp", "Title", "WPNotification");
    writer.WriteValue(title);
    writer.WriteEndElement();
    writer.WriteEndDocument();
    writer.Close();

    byte[] payload = stream.ToArray();
    return payload;
}

結果はこんな感じです。
Tile と Toast

Tile Toast

しかし、奥深い・・・

セッションスライド

http://blogs.jp.infragistics.com/blogs/dikehara/archive/2010/08/23/windows-phone-7-training-kit.aspx のクロスポスト

スポンサーサイト

Expression 4 日本語版リリース! Windows Phone Developer Tools Beta とは・・・

7/21 に日本語版の Expression 4 が MSDN に公開されたので早速英語版をアンインストールし、入れてみました。

Windows Phone 用のテンプレートはやはり出てこなかったため、下記の要領でプロジェクトテンプレートをコピー

  1. Blend for Windows Phone Betaのインストール フォルダ\ProjectTemplates\en\CSharp から “WindowsPhone” フォルダを選択しコピー
  2. 日本語版の Blend 4 インストール フォルダ\ProjectTemplates\ja\CSharp に貼り付け

これでうまくいく! と思いきやこんな表示が・・・

Blend1

オーサリングの有効期限ってなんじゃらほい?

ちょっと調べてみたかぎりでは Blend for Windows Phone Beta を使わなければいけないっぽいですね・・・

Windows Phone - Forum

Windows Phone Developer Tools Beta と日本語版 Visual Studio

しばらくチェックを怠っている間に Windows Phone Developer Tools Beta がリリースされていました。

早速入れてみたところ、無料での開発環境提供! という名前の通り以下のツールがインストールされました。

  • Microsoft Visual Studio 2010 Express for Windows Phone
  • Microsoft Expression Blend for Windows Phone Beta

VS はわかりますが、Blend も今後 Windows Phone のために無料提供されるんでしょうかね?

さて、日本語の Visual Studio を使用しているとプロジェクト テンプレート画面に Silverlight for  Windows Phone テンプレートが追加されておらず・・・はて?

Twitter でつぶやいてみた所、@onos@hatsune_ ご両人に助言をいただいて日本語版の VS プロジェクト テンプレートに無事出すことができました。

以下手順をメモメモ (一応日本語版対応はされていないみたいなので各自の責任でよろしくです)

参考記事:
方法 : プロジェクト テンプレートと項目テンプレートを配置して整理する

  1. VS のインストールフォルダ\Common7\IDE\ProjectTemplates\CSharp\Silverlight for Windows Phone を開く
  2. “1041” という名前のフォルダを作成し “1033” に存在している zip ファイルを全てコピーする
  3. VS のインストールフォルダ\Common7\IDE\ItemTemplates\CSharp\Silverlight for Windows Phone を開く
  4. “1041” という名前のフォルダを作成し “1033” に存在している zip ファイルを全てコピーする
  5. コマンドラインで Visual Studio のインストールフォルダへ移動し、次のコマンドを実行
    devenv /setup

セットアップが完了し、Visual Studio を起動すると Windows Phone 用プロジェクトがちゃんとでてきました。いえい。

1

Capability とは?

Windows Phone Developer Tools CTP April Refresh で WMAppManifest.xaml で [Capabilities] の設定を行うようになりました。
どうもこれはアプリケーションで使用できる機能を設定(制限?) している模様なんですが、MSDN を探してもわからず。
が、Jaime Rodriguez さんの Blog に説明が書かれていました。

Windows Phone Capatilities Security Model

彼の Blog から表をちょっと拝借すると・・・

Capability Id/Name 概要
ID_CAP_NETWORKING ネットワーク サービスへのアクセス
ID_CAP_LOCATION ロケーション サービスへのアクセス
ID_CAP_MICROPHONE マイクへのアクセス
ID_CAP_MEDIALIB メディア ライブラリーへのアクセス
ID_CAP_GAMESERVICES XBOX live API へのアクセス
ID_CAP_PHONEDIALER 電話機能へのアクセス
ID_CAP_PUSH_NOTIFICATION インターネット サービスからのプッシュ型の通知機能へのアクセス
ID_CAP_WEBBROWSERCOMPONENT WebBrowser コンポーネントへのアクセス

とアプリケーション毎に制約を設定することでセキュリティリスクを抑えることが可能になるみたいです。

実際に試してみました。

まず、ID_CAP_WEBBROSERCOMPONENT をコメントアウトし、

Capa

WebBrowser コントロールを設置したアプリケーションを起動すると・・・

exception

UnauthorizedAccessException が発生しました。

コメントアウトを解除するとちゃんとこの Blog が表示されます(日本語はねぇ・・・)

WPBrowser

 

また、オリジナルポストの下には実際にどのクラス、名前空間がそれぞれの Capability を必要とするかも記載されています。
とりあえず実機がないから全部有効にして開発してみれば?とも書いてありますがw

元ネタ

Windows Phone Capatilities Security Model

Blend for WP7 も Update!

Windows Phone Developer Tools の Refresh にあわせて Blend For Windows Phone も Update が出ました。

Blend 4 RC に対応していますが、こちらも Update が入ったらしく バージョン番号が 4.0.20421.0 のものが必要です。
4/23 に更新されたらしいので結構最近ですね。前のバージョンが入っている場合はアンインストールが必要かな?

あとはこちらをインストール
Microsoft Expression Add-in Preview 2 for Windows Phone
Microsoft Expression Software Development Kit (SDK) Preview 2 for Windows Phone

ちゃんと新規プロジェクト画面に表示されました ^-^v
WPBlend

元ネタはこちら

Electric Beach
次のページ

FC2Ad

上記広告は1ヶ月以上更新のないブログに表示されています。新しい記事を書くことで広告を消せます。