Pages

Monday, November 24, 2014

Azure の Web サイトのメモ

何点か。

  • EntityFramework (*.edmx ファイル) でモデルを組んでて、Azure Website の Deploy のところで接続文字列を書き換えるようにしている場合、なぜか metadata パラメータなどが自動的に入らない。こんなエラーがでるはず。
    Some required information is missing from the connection string. The 'metadata' keyword is always required.
    どうやら、Visual Studio Online (Monaco) でみてみると、
    provider connection string='metadata=res://*/Sample.csdl|res://*/Sample.ssdl|res://*/Sample.msl;provider=System.Data.SqlClient;provider connection string="data source=****.database.windows.net;initial catalog=****;persist security info=True;user id=****;password=****;MultipleActiveResultSets=True;App=EntityFramework"'
    などと、勝手に書き換えられてしまうらしい。若干、迷惑感が漂う... 正しいやり方はなんだろう。今は Monaco で Deploy のたびに直しているが、たぶん正しい解放ではないと思う。Code First モデルの場合、このようなメタデータの指定は不要なので、ひょっとしたら問題ないのかもしれない。
  • ServiceRuntime が触れない件。
    Could not load file or assembly 'Microsoft.WindowsAzure.ServiceRuntime, Version=2.5.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35' or one of its dependencies. The system cannot find the file specified.
    これはどう転んでも無理らしい。残念。

Wednesday, January 29, 2014

アプリケーションの設定を保存する方法

今日はもう一件。モバイル端末向けのアプリを作っていると、ユーザの情報を保存する必要があるはず。たとえば、ユーザを認証したときのトークンだとか、ちょっとした設定だとか。これを保存するためのクラスをまとめておく。

iPhone
NSUserDefaults クラス。standardUserDefaults クラス メソッドを使って、このクラスのインタスタンスを取得して、それに対して setInteger:forKey: などで書き込み、integerForKey: で読み取り。
Android
SharedPreferences クラス。読み取りはこのクラスでいいけど、設定の編集には SharedPreferences.Editor というネスト クラスを使う必要があるみたい。なんだろうこのアンバランス感。
Windows Phone 系
System.IO.IsolatedStorage.IsolatedStorageSettings クラス。ApplicationSettings という静的プロパティからインスタンスを取得する。もしくは、ClickOnce などのアプリケーションの場合は SiteSettings という静的プロパティから取得するのが吉。いずれにせよ、明示的なファイル パスを使ったアクセスができない場合向けの System.IO.IsolatedStorage 名前空間を使うのが正解。

まあだいたいどれも似ているね。

Azure ストレージへの共有アクセス署名 URI

Azure ストレージへ何らかのファイルをアップロードする状況について。サーバと連携して動くようなクライアント アプリケーション (モバイル端末とか) から、あるファイルをアップロードしたいのだけど、サーバが公開する Web API にファイルを送り付けて、その API がストレージに保存するのでは効率が悪い。なんなら、直接ストレージにアップロードする REST API があれば便利。だけど、ストレージ自体のプライマリ認証キー (いってみれば、ストレージにフルアクセスできちゃうキー) を渡すのは問題。だから、あるストレージ URI 特定に結びついていて、そのファイルをアップロードするためだけに使えるキーを REST API で指定してたたくことはできないだろうか、という疑問。

そしたら、やっぱりちゃんとあった。共有アクセス署名 (Shared Access Signature) を付与した URI。http://msdn.microsoft.com/en-us/library/windowsazure/dn140255.aspx を参照。どうやら、自分で HMAC でシグニチャを作らないといけないらしいけど。またわかったら Gist で公開するか、後日アップデートするかも。

Sunday, January 19, 2014

iOS 7 で飛んでくる Notification のログ

iOS 向けの開発を始めたのだが、いろいろと通知の類で困ったので、リサーチしてみた。書いたコードはこんな感じ。iPhone 4 の実機、iOS 7.0.4 で走らせてみたので、そのログをメモ。

起動

UIWindowDidBecomeVisibleNotification
UIWindowDidBecomeKeyNotification
UIApplicationDidFinishLaunchingNotification
_UIApplicationDidRemoveDeactivationReasonNotification
UIApplicationDidBecomeActiveNotification
UIDeviceOrientationDidChangeNotification
UIApplicationDidEndResumeAnimationNotification
UIDeviceOrientationDidChangeNotification
UIDeviceOrientationDidChangeNotification

タイムゾーン変更

_UIApplicationSignificantTimeChangeNotification
UIApplicationSignificantTimeChangeNotification
kCFTimeZoneSystemTimeZoneDidChangeNotification-4
kCFTimeZoneSystemTimeZoneDidChangeNotification-2
kCFTimeZoneSystemTimeZoneDidChangeNotification

謎なもの

UIStatusBarItemViewShouldEndDisablingRasterizationNotification というのが飛んできたけど、Google で検索してもなにも出てこなかった。謎。

画面向き変更

UIDeviceOrientationDidChangeNotification
_UIApplicationDidBeginIgnoringInteractionEventsNotification
UIWindowWillRotateNotification
UIApplicationWillChangeStatusBarOrientationNotification
UIApplicationWillChangeStatusBarFrameNotification
UIViewAnimationDidCommitNotification
UIApplicationDidChangeStatusBarOrientationNotification
UIApplicationDidChangeStatusBarFrameNotification
UIWindowWillAnimateRotationNotification
UIViewAnimationDidCommitNotification
UIViewAnimationDidStopNotification
_UIApplicationDidEndIgnoringInteractionEventsNotification
UIWindowDidRotateNotification
UIViewAnimationDidStopNotification
UIDeviceOrientationDidChangeNotification

非アクティブ化

ホームボタンで一度閉じてみる。

UIApplicationWillBeginSuspendAnimationNotification
_UIApplicationWillAddDeactivationReasonNotification
UIApplicationWillResignActiveNotification
UIApplicationSuspendedNotification
UIApplicationDidEnterBackgroundNotification
UIStatusBarStyleOverridesDidChangeNotification
UIStatusBarStyleOverridesDidChangeNotification
_UIApplicationDidFinishSuspensionSnapshotNotification
_UIWindowWillDestroyWindowContextNotification
_UIWindowWillDestroyWindowContextNotification

再アクティブ化

ホームからアプリのアイコンをタップして、再度フォアグラウンドに。

_UIWindowDidCreateWindowContextNotification
_UIWindowDidCreateWindowContextNotification
UIApplicationWillEnterForegroundNotification
UIDeviceOrientationDidChangeNotification
_UIApplicationDidRemoveDeactivationReasonNotification
UIApplicationDidBecomeActiveNotification
UIApplicationResumedNotification
UIApplicationDidEndResumeAnimationNotification
UIDeviceOrientationDidChangeNotification

通知バー出してみる

_UIApplicationSystemGestureStateChangedNotification
UIDeviceOrientationDidChangeNotification
_UIApplicationSystemGestureStateChangedNotification
_UIApplicationWillAddDeactivationReasonNotification
UIApplicationWillResignActiveNotification

通知バー閉じて、再度アプリ画面を表示

UIDeviceOrientationDidChangeNotification
_UIApplicationDidRemoveDeactivationReasonNotification
UIApplicationDidBecomeActiveNotification

スクリーンショット

UIApplicationUserDidTakeScreenshotNotification

終了

ホーム ボタン 2 度おしから、アプリを終了。

UIDeviceOrientationDidChangeNotification
_UIApplicationWillAddDeactivationReasonNotification
UIApplicationWillResignActiveNotification
UIDeviceOrientationDidChangeNotification
_UIApplicationWillAddDeactivationReasonNotification
UIApplicationSuspendedNotification
UIApplicationDidEnterBackgroundNotification
UIStatusBarStyleOverridesDidChangeNotification
UIStatusBarStyleOverridesDidChangeNotification
_UIApplicationDidFinishSuspensionSnapshotNotification
_UIWindowWillDestroyWindowContextNotification
_UIWindowWillDestroyWindowContextNotification
UIApplicationSuspendedNotification
UIApplicationDidEnterBackgroundNotification
_UIApplicationDidFinishSuspensionSnapshotNotification
UIApplicationWantsViewsToDisappearNotification
UIApplicationWillTerminateNotification

雑なまとめかたですみません。メモです。というか、たいていの NSNotification は、ふつうに適切なメソッドをオーバーライドして補足するのが正しい気がする... 個人的には、こんなふうに色々メッセージが飛んでくるのを見ると、なんだか Windows API のウインドウ メッセージっぽさを想起しなくもない。たぶん真似したのは歴史的に見て Win32 API 側だと思うけど。