くうと徒然なるままに

モバイルアプリを作りながらバックエンドも作っています。

Xamarin.UITest で Switch コントロールをテストする方法

Switch の現在の状態を取得する方法

以下のように、書けばいい感じ。 ポイントは、 Invoke メソッドを使い、 「c.Marked(“/AutomationID/”) メソッドで絞りこんだオブジェクトは、 Switch コントロールだろうなー」
って、想像して、 iSChecked メソッドを呼んでいる点です。

_app.Query (c => c.Marked("/*AutomationID*/").Invoke ("isChecked").Value<bool> ()).First ();

Switch の状態を変更する方法

以下のように、IApp の Tap メソッドを Switch コントロールに対して呼び出してあげればおkです。

_app.Tap(query => query.Marked(/*AutomationID*/));

参考サイト

forums.xamarin.com

Xamarin.Forms で アイコンボタンを外部フォントを使って作成する

今回作るもの

アイコンがボタンになっているやつを作成します。 画像でボタンを作る場合と比べて、ベクタイメージなので、様々な解像度に対応できる利点があります。 まぁ、以下の画像を見ていただくのが速そうなので。。。

iOS

Android

UWP アプリ

外部フォントとは

iOS, Android, UWP で内蔵されているフォントの種類が違うので、今回は、外部にあるフォントを埋め込んでそれを使うことで、どのプラットフォームでもおなじフォントがつかえるようにします。
今回は、 Windows10 に標準搭載されている Segoe MDL2 Assets を使用していきます。コピーしてどこかに置いておくと扱いやすいかもしれないです。

やりかた

カスタムレンダラー

Xamarin.Forms から各プラットフォーム固有の機能をつかっていかなければいけないので、 カスタムレンダラー ってのを使っていきます。

カスタムレンダラーについては、以下のサイトが詳しいかなと

github.com

Xamarin.Forms プロジェクトでレンダラー用のクラスを作成

まずは、 Xamarin.Forms のプロジェクトで カスタムレンダラーの元となるクラスを作成していきます。
イベントとか、プロパティには特に手を加えないので、こっちは基本シンプルな感じです。
ポイントとしては、 ボタンにカスタムを加えるので、 Button クラスを継承しているところぐらいでしょうか。
自分の場合は、以下のようなクラスになりました。

CustonFontTextView.cs

using Xamarin.Forms;

namespace LTTimer.View
{
    public class CustonFontTextView : Button
    {
    }
}

Xamarin.UWP プロジェクトでレンダラー用クラスを作成

次に、 UWP アプリで実装をしていきます。

View/ 配下にコードを置きました。 また、フォントファイルを Assets/Fonts/ 配下に置きました。

ビルドアクション

  • コンテンツ

出力ディレクトリにコピー

  • コピーしない

CustonFontTextViewRenderer.cs

using Windows.UI.Xaml.Controls;
using Windows.UI.Xaml.Media;
using LTTimer.UWP.View;
using Xamarin.Forms.Platform.UWP;

// おまじない
// 第一引数に、Xamarin.Forms プロジェクト内においてあるカスタムレンダラー元のクラスを指定
// 第二引数に、Xamarin.UWP プロジェクト内においてあるカスタムレンダラー先のクラスを指定
[assembly: ExportRenderer(typeof(Xamarin.Forms.Button),typeof(CustonFontTextViewRenderer))]

namespace LTTimer.UWP.View
{
    // カスタムレンダラー元が Button クラスを継承したものなので、 ButtonRenderer を継承する
    public class CustonFontTextViewRenderer: ButtonRenderer
    {
        // ネイティブビューを作成してにゃーんする
        protected override void OnElementChanged(ElementChangedEventArgs<Xamarin.Forms.Button> e)
        {
            base.OnElementChanged(e);

            // Button のところに設定された FontFamily を取得して、どのフォントを使うのか選択するのに使う
            // もし、設定してなかったら NullReferenceException がでちゃうから、 Null チェックしつつ取得してく
            var fontfamily = e.NewElement?.FontFamily;
            
            // 取得できてなかった時のために
            if (fontfamily != null)
            {
                var element = (Button) Control;
                // UWP は比較的簡単にかける
                element.FontFamily = new FontFamily(e.NewElement.FontFamily);
            }
        }
    }
}

Xamarin.Android プロジェクト で レンダラー用のクラスを作成

コードは View フォルダに配置しました。 Android はフォントファイルを Resource/Fonts に置く

ビルドアクション

  • AndroidAsset

出力ディレクトリにコピー

  • コピーしない

CustonFontTextViewRenderer.cs

using Android.Graphics;
using Android.Widget;
using LTTimer.Droid.View;
using Xamarin.Forms;
using Xamarin.Forms.Platform.Android;
using Button = Xamarin.Forms.Button;

// おまじない
// 第一引数に、Xamarin.Forms プロジェクト内においてあるカスタムレンダラー元のクラスを指定
// 第二引数に、Xamarin.UWP プロジェクト内においてあるカスタムレンダラー先のクラスを指定
[assembly:ExportRenderer(typeof(Button),typeof(CustonFontTextViewRenderer))]

namespace LTTimer.Droid.View
{
    // カスタムレンダラー元が Button クラスを継承したものなので、 ButtonRenderer を継承する
    public class CustonFontTextViewRenderer: ButtonRenderer
    {
        protected override void OnElementChanged(ElementChangedEventArgs<Xamarin.Forms.Button> e)
        {
            base.OnElementChanged(e);

            // Button のところに設定された FontFamily を取得して、どのフォントを使うのか選択するのに使う
            // もし、設定してなかったら NullReferenceException がでちゃうから、 Null チェックしつつ取得してく
            var fontFamily = e.NewElement?.FontFamily?.ToLower();
            
            if (fontFamily != null)
            {
                var label = (TextView)Control;
                // Android でLabelのフォントファミリーを設定するには、 Typeface.CreateFromAsset メソッドを使う
                // フォントサイズは特に変えたくなかったので、第二引数にもともとのフォントサイズを代入しています。
                label.Typeface = Typeface.CreateFromAsset(Context.Assets,e.NewElement.FontFamily);
            }
        }
    }
}

## Xamarin.iOS プロジェクト で レンダラー用のクラスを作成

ios は、 フォントファイルの埋め込みが少し面倒でしたにゃーんした
今回も、 View 配下にコードを配置しました。

CustonFontTextViewRenderer.cs

using LTTimer.iOS.View;
using UIKit;
using Xamarin.Forms;
using Xamarin.Forms.Platform.iOS;

// おまじない
// 第一引数に、Xamarin.Forms プロジェクト内においてあるカスタムレンダラー元のクラスを指定
// 第二引数に、Xamarin.UWP プロジェクト内においてあるカスタムレンダラー先のクラスを指定
[assembly:ExportRenderer(typeof(Button),typeof(CustonFontTextViewRenderer))]

namespace LTTimer.iOS.View
{
    // カスタムレンダラー元が Button クラスを継承したものなので、 ButtonRenderer を継承する
    public class CustonFontTextViewRenderer: ButtonRenderer
    {
        protected override void OnElementChanged(ElementChangedEventArgs<Button> e)
        {
            base.OnElementChanged(e);

            // Button のところに設定された FontFamily を取得して、どのフォントを使うのか選択するのに使う
            // もし、設定してなかったら NullReferenceException がでちゃうから、 Null チェックしつつ取得してく
            var fontFamily = e.NewElement?.FontFamily;
            if (fontFamily != null)
            {
                var element = Control;
                // UIFont のスタティックメソッドである、 **FromName()** を使い作成したインスタンスを 設定していく
                element.TitleLabel.Font = UIFont.FromName(fontFamily,element.TitleLabel.Font.PointSize);
            }
        }
    }
}

iOS のフォントの設定はいろいろ大変

iOS のフォントの設定等はいろいろ大変だったので別セクションにします。

いつもどうり、Xamarin.iOS のプロジェクトにフォントを追加

iOS でも、ほかのプラットフォームと同じように、 Resource/Fonts/ 配下に配置します。

ビルドアクション

  • AndroidAsset

出力ディレクトリにコピー

  • コピーしない

info.pilot へ設定の追加

Xamarin.iOS のプロジェクトにある、 info.pilot ファイルを開きます。

画面の左下にある以下のようなボタンをクリックします。

テキストボックス的なのがでてくるので、 Font Provided by application と入力します。途中で入力補完がかかるので、 それを選択します。

次に、 String と書かれた部分の右側をダブルクリックして、文字を編集できるようにします。

そこへ、 Fonts/{FontFileName} と入力します。

完成したので アプリに表示させてみる

MainPage.Xaml を開き、追記して表示していきます。 ポイントは、 OnPlatform を使い、iOS,Android,UWP で処理を切り分けているところでしょうか。

Font-Family で設定する値

iOS

フォント名、 MacFontBook でフォントを開いたときに、 PostScript名 というところの名前を入力します。

f:id:kuxumarin:20170317152223p:plain

Android

Resource フォルダを起点として、フォントファイルまでのパスを記入します。

UWP アプリ

今回使ったのは、 Windows 10 なら標準に入っているということで、 フォント名だけを入れるだけでおkです。

MainPage.xaml

<view:CustonFontTextView Text="&#xE713;">
            <view:CustonFontTextView.FontFamily>
                <OnPlatform x:TypeArguments="x:String"
                    iOS="Segoe MDL2 Assets"
                    Android="Fonts/SEGMDL2.TTF"
                    WinPhone="Segoe MDL2 Assets">
                </OnPlatform>
            </view:CustonFontTextView.FontFamily>
        </view:CustonFontTextView>

動かしてみた

iOS

Android

UWP アプリ

つらかったところ

フォントを設定しても表示されない

iOSInfo.Pilot へ設定を追加しないといけないところに気づけなくて、ハマった

パスをチェック

タイポしてると フォントファイルを取得できずに NullReferenceException が発生してアプリが落ちることがたまによくあった

再起動すればOK

最後に悩んだら、再起動すればなんとかなった。

参考記事

blog.yamamoworks.net

www.sirochro.com

https://docs.microsoft.com/ja-jp/windows/uwp/style/segoe-ui-symbol-font#a-namelayering-and-mirroringa重ね合わせとミラーリングdocs.microsoft.com

CouldntCreateInternalSwitch って出てきて、visual studio emulator for android を起動できなかったから解決してみた。

やったこと

最終的には、新しい デバイスを追加しました。

以下のようなエラーメッセージが出て、 visual studio emulator for android を起動できませんでした。

gist.github.com

結果的には、Visual Studio Emulator for Android で新しいデバイスを追加しました

手を尽くしてもどうにもできないっぽかったのであきらめて、Visual Studio Emulator for Android に新しいデバイスを追加で解決しました。また、どうせなら、ということで、 最新の Android のemulatorにしときました。

Visual Studio Emulator for Android への新しいデバイスの追加方法

1. Visual Studioツール > Visual Studio Emulator for Android のメニューをクリック

2. Visual Studio Emulator for Android のメイン画面でデバイスを削除したり、新しく追加したり

Visual Studio Emulator for Android のメイン画面的なのが出てきました。ここで、新しくデバイスを追加したり、いろいろできます。 問題は、この画面を開いてると CPU を異常に喰うとこぐらいでしょうか。

新しいデバイスを追加してもうまく表示されてはくれません

以下の画面のように、 Visual Studio Emulator for Android を起動しようとしても、 Preparing virtual machine と出て固まってしまいました。

原因を Stack over flow でググったら、 Wifi を切れば行けるみたいなことがかいてありました。

I had the same problem. I just solve it by DESACTIVE the Wifi network card.

stackoverflow.com

まぁ、Wifi を切って さらに新しいデバイスを追加したら行けた感じです。

無事に Visual studio emulator for Android を表示することができました!

Xamarin 4.3.0.784 にアップデートしたら、VS で Xamarin のプロジェクトを開けなくなった。から解決してみた(結局徹夜で修正するハメに。。。

現象

  1. Xamarin 4.3.0.784 にアップデートした
  2. Visual Studio 2015 で Xamarin を含むプロジェクトを開けなくなった。オプションの Xamarin の項目を開くのがすごく遅くなった。

環境

対策

前回と同じように JDK 1.8 を入れて参照先を適切なパスに変えた。

参考記事

goo.gl

どうやって解決策を見つけたのか

  1. Visual Studio のログを見た

monodroid から始まるログファイルをみると

gist.github.com

どうやら、JDK が読み込めてない感じのようでした。

2017-03-03_04-13-58.10420.Ide というファイルも見てみました。

gist.github.com

Android Deghiner が読み込めていないようでしたが、 JDK の参照を適切なパスに直したら、なぜか一緒に修正されてしまいました。

ログを見るのは大切(*‘▽’)

Xamarin 4.3.0.784 にしたら、Your Java version (1.7.0) is too old. You must have at least 1.8 installed. ってでたから、解決してみた

困ってたこと

Your Java version (1.7.0) is too old. You must have at least 1.8 installed. のため、プロジェクト {Project Name} は Android 7.1 (API レベル 25 - Nougat) を使用してビルドできません それをインストールするか、[ツール] -> [オプション] -> [Xamarin] -> [Android 設定] メニューで Oracle 1.8+ 用の Java Development Kit パスを設定してください.

ってエラーが出てた

https://lh3.googleusercontent.com/-232okkTTyqA/WLIREM6Zx-I/AAAAAAAAYbg/cwBklpRUrcY/s0/devenv_2017-02-24_02-15-07.png

環境

  • Visual Studio 2015
  • Xamarin for Visual Studio 4.3.0.784
  • Xamarin.Android 7.1.0.41 (9578cdc)

やったこと

1. 最新版の JDK をインストールした

www.oracle.com

https://lh3.googleusercontent.com/-5_YCr8hosa4/WLIQno3TZUI/AAAAAAAAYbY/iL_BJSuv18k/s0/msiexec_2017-02-24_02-20-45.pnglh3.googleusercontent.com

2. Visual Studio の設定より使用するJDK を変更した

https://lh3.googleusercontent.com/-FasM_zjq8rQ/WLIQuW1ZMZI/AAAAAAAAYbc/enaqaZWC64E/s0/devenv_2017-02-24_02-45-27.pnglh3.googleusercontent.com

Xamarin.Forms で作ったUWP アプリを Windows Store に公開してみた~アプリパッケージの作成からストアへの申請まで~

若干、釣りタイトル。申請がどうなったのか待てないので実際は、 Xamarin.Forms で作ったUWPアプリをストアに申請してみたって言った方が正確です。

自己紹介

初めまして、大学一年生のくぅと言います。 C# と Xamarin が好きです。 まだまだ未熟ですが、色々吸収していきます。

やっていくこと

Xamarin.Forms で作成した UWP アプリを Windows Store に公開する。

環境

  • Windows 10 Pro
  • Visual Studio 2015 Enterprise
  • i5/mem 8 GB (1かずあきさん)
  • Azure Pass

やったこと

Xamarin.Forms + UWP アプリを作成

まずは、公開するためのアプリを作成します。

Windows Store で公開するために、作成中のアプリと Windows Store 内のアプリを紐づける

ソリューションエクスプローラーの中にある UWP アプリのプロジェクトを右クリックし、アプリを Windows Store と紐づけるためのメニューを開きます。

https://lh3.googleusercontent.com/-IreBZEj8G5k/WJofrei9K1I/AAAAAAAAYOw/3ksV4yI-dqM/s0/devenv_2017-02-05_23-15-32.png

クリックするとアプリと Windows Store を紐づけることの説明が出てきます。

https://goo.gl/IBTxKm

Microsoft アカウントでログインするとすでに予約したアプリ名とすでにストアで公開しているアプリの一覧が表示されます。

https://goo.gl/ZC7u0Y

紐づけたいアプリ名を指定し、次へをクリックすると紐づけるアプリの確認ウィンドウが出るので関連付けをクリックします。

https://goo.gl/NKJsT8

Windows Store にアップロードするアプリパッケージの作成

自分の場合、アプリパッケージを作成する段階でアイコンに関するエラーが何回やっても解決できなかったことがあったので大変かも。(10回ぐらいチャレンジした) とはいえ、全部の症例と解決方法を書くにはこのブログは狭すぎるのでTwitterとかで質問を投げてください → Twitter

ソリューションエクスプローラー内にある UWP アプリプロジェクトを右クリックし、 アプリパッケージを作成するメニューを開く

https://goo.gl/FYDyAB

アプリパッケージを作成する最初のウィンドウが出てきます。ここでは次へをクリックします。

https://goo.gl/vL6dEm

アプリパッケージの出力先、version番号等を設定し次へをクリックします。

https://lh3.googleusercontent.com/-OBLlAG5GjP8/WJoiniPZTCI/AAAAAAAAYPk/Z9YEw3iWwNE/s0/2017-02-08_04-40-15.png

アプリパッケージの作成結果画面が表示されます。また、Windows アプリ認定キットを使って検証を開始することもできます。

どうせ、ストアの審査で Windows アプリ認定キットを使ってチェックされるのでローカル環境でもチェックしておきましょう。せっかく申請しても、ストアでリジェクトされてはつまらないです。

https://lh3.googleusercontent.com/-iyBQLGn5uXE/WJqDzX9uCfI/AAAAAAAAYSw/ASBxu-1ZhAk/s0/2017-02-08_11-34-52.png

Windows アプリ認定キットの検査項目は全部選んだ方がいいと思います。

https://lh3.googleusercontent.com/-9j9KmJEJt_4/WJojwIwvFbI/AAAAAAAAYQA/Vn-fNUE-Kj0/s0/appcertui_2017-02-07_22-44-08.png

Windows アプリ認定キットの検査しているときの画像

https://lh3.googleusercontent.com/-i_Ytb5hhMOc/WJoj4FnmmGI/AAAAAAAAYQE/oQuE54U9jYk/s0/appcertui_2017-02-07_22-44-13.png

Windows アプリ認定きっとの検査に無事通ることができました。

https://lh3.googleusercontent.com/-KXOQgJ2y61c/WJqD-XhuKVI/AAAAAAAAYS0/um1eOAZz65c/s0/appcertui_2017-02-07_22-47-26.png

Windows ストアの申請フォームを埋めて申請する

Windows Store のダッシュボードにアクセスしてください。

https://developer.microsoft.com/ja-jp/dashboard/apps/overview

https://goo.gl/nN6RC2

すでにアプリの名前を予約済みであればリストの中に予約した名前のアプリの欄が Not Started になっているのがあります。

もしなければ、ここで新しく名前を予約します。

予約済みの人は、 予約したアプリ名の欄をクリックして次の画面へ遷移します。

アプリの名前をまだ予約していないなら、先ほどアクセスしたウェブサイトの 新しいアプリを作成 のボタンをクリックしてください

https://goo.gl/4bNGAN

Windows Store のダッシュボード内でのアプリの名前の予約方法

https://goo.gl/qsL7dv

予約したいアプリの名前をテキストボックスにいれ、製品名の予約と書かれたボタンをクリックしてアプリ名の予約は完了です。

ここからは、アプリ名を予約した人も、予約してなかった人も同じ画面が表示されてるはずです。

https://goo.gl/IjXYRS

申請を開始ボタンをクリックしてください

https://goo.gl/nF7xup

アプリの生成に必要な欄を埋めていきます。

https://goo.gl/O2foql

価格と使用可能状況

基本価格

無料で公開するときは、無料 を選択してください

https://goo.gl/mWWxYW

それ以外は特に設定を変えなくてもいいかなと思います。 ページの下の方にある 保存のボタンをクリックしてください。

プロパティ

カテゴリとサブカテゴリ

自分の作成したアプリにあったカテゴリを選択すればいいです。ここで注意点ですが、ゲームカテゴリ以外を選択してアプリを公開するとあとからカテゴリを変更できないです。

https://goo.gl/epYxq1

それ以外はそれぞれのアプリにあった設定にしてください

年齢区分

ここでは、アプリの種類と年齢制限に関するアンケートみたいなのに答えればおkです。

パッケージ

ここでは、先ほど Visual Studio 上で作成したアプリパッケージのアップロードとどのデバイス(デスクトップ、ホロレンズ、XBOX 等)に公開するのかの選択をしてください。

https://goo.gl/L8McC3

https://lh3.googleusercontent.com/-0bElhkZbgj4/WJotqkTPcuI/AAAAAAAAYSQ/IFNRJbNwpT4/s0/2017-02-08_05-27-22.png

Windows Phone 8.1 のユーザーはいまだ多そうな印象ですが、今回は無視しました。

ストア登録情報

説明通りに書いていけば大丈夫です。 大変だったところは、プロモーション用のいろいろな解像度の画像を用意するところです。 また、スクリーンショットもここで必要になるので注意が必要です。

認定の注意書き

ここでは、アプリをMicrosoftの審査するひとが必要な情報等を書き込みます。例えば、Twitterクライアントを作るなら試すために必要になるアカウントのID・PSを書いてください。

以上が Windows Store へアプリを公開する方法でした。

https://lh3.googleusercontent.com/-LlwPQF5x_ao/WJotdIg5BRI/AAAAAAAAYSE/5buo5RadGVY/s0/ApplicationFrameHost_2017-02-08_04-18-43.png

審査の段階が1つ進んだ('◇')ゞ

https://goo.gl/nYPdpB

まとめ

アイコンやプロモーション用の画像を用意するのが大変。。。

参考サイト

おすすめ書籍

個人的に読みやすく好きな本たちでした

かずきのXamarin.Forms入門

かずきのXamarin.Forms入門

Xamarin.Android/Xamarin.Forms で"@(Content) build action is not supported" って警告メッセージが出た時の対処法

自己紹介

初めまして、大学一年生のくぅと言います。 C# と Xamarin が好きです。 まだまだ未熟ですが、色々吸収していきます。

やっていくこと

Xamarin.Android/Xamarin.Forms で"@(Content) build action is not supported" って警告メッセージが出た時の対処法について書く

やったこと

Visual Studio のXamarin.Android のプロジェクトに入っている AndroidManifest.xml のプロパティのビルドアクションをなしに変更した

具体的に

Xamarin.Android 内のプロジェクトにはいっている AndroidManifest.xml を選択している写真

https://goo.gl/4YkQmZ

Xamarin.Android 内のプロジェクトにはいっている AndroidManifest.xml のプロパティ画面

https://goo.gl/4GhxDr

ビルドアクションを無しにしている画面

https://goo.gl/obtrEW

まとめ

画像ファイルとかでよくこの警告を出してしまっていたが、 AndroidManifest.xml にも応用できるとは知らなかった。

参考サイト

おすすめ書籍

個人的に読みやすく好きな本たちでした

かずきのXamarin.Forms入門

かずきのXamarin.Forms入門

.NET開発テクノロジ入門2016年版Visual Studio 2015対応版

.NET開発テクノロジ入門2016年版Visual Studio 2015対応版

Xamarin.Forms の label 要素のタップイベントをMVVMで使いやすくできないか調べてみた

自己紹介

初めまして、大学一年生のくぅと言います。 C# と Xamarin が好きです。 まだまだ未熟ですが、色々吸収していきます。

やっていくこと

前回は、 Xamarin.Forms の label 要素のタップイベントを検出する  を見ていきました。

今回は、MVVM、Prism で使えるように Command で使えないか調べてみた記録です。

やったこと

前回は、Label クラスの中にある cs Label.GestureRecognizers を使ってタップイベントをとれるようにしました。 今回は、さらに label.GestureRecognizers クラスの Command を使ってMVVMで使えるように少し改造してみました。

サンプルコード

<Label Text="Hello Xamarin"FontSize="128">a
    <Label.GestureRecognizers>
        <TapGestureRecognizer Command="{Binding ShowDialog}"></TapGestureRecognizer>
    </Label.GestureRecognizers>
</Label>

まとめ

GestureRecognizers クラスは便利、しかもMVVMでも使いやすい

参考サイト

forums.xamarin.com

おすすめ書籍

個人的に読みやすく好きな本たちでした

かずきのXamarin.Forms入門

かずきのXamarin.Forms入門

.NET開発テクノロジ入門2016年版Visual Studio 2015対応版

.NET開発テクノロジ入門2016年版Visual Studio 2015対応版

Xamarin.Forms の **label** 要素のタップイベントを検出する

自己紹介

初めまして、大学一年生のくぅと言います。 C# と Xamarin が好きです。 まだまだ未熟ですが、色々吸収していきます。

やっていくこと

Xamarin.Forms の label 要素のタップイベントを検出する

やったこと

Label クラスの中にある cs Label.GestureRecognizers を使ってタップイベントをとれるようにした

サンプルコード

<Label Text="Hello Xamarin" FontSize="128">
    <Label.GestureRecognizers>
        <TapGestureRecognizer Tapped="tapped"></TapGestureRecognizer>
    </Label.GestureRecognizers>
</Label>

まとめ

GestureRecognizers クラスは便利そう

参考サイト

forums.xamarin.com

おすすめ書籍

個人的に読みやすく好きな本たちでした

かずきのXamarin.Forms入門

かずきのXamarin.Forms入門

.NET開発テクノロジ入門2016年版Visual Studio 2015対応版

.NET開発テクノロジ入門2016年版Visual Studio 2015対応版

#DocumentDB Loves Xamarin: Planet Scale Mobile App in Five Steps を翻訳してみた

これは、Kirill Gavrylyukによって書かれたDocumentDBチームの特別ゲスト投稿です。

KirillはDocumentDBチームのMicrosoftで働いています。 あなたは@kirillg_msftでTwitterで彼を見つけることができます。

今週、Xamarin開発者は、Azure NoSQLのデータベースとしてDocumentDBを利用できるようになりました。 モバイデベロッパーが必要とするすべてのもの、必要に応じて拡張されたサービスとしての完全管理のNoSQLデータベース、世界中のどこにいてもデータをアプリケーションに完全に透過的にもたらすことができます。 MobileDB開発者がDocumentDBですぐに利用できることは、次のとおりです。

https://s3.amazonaws.com/blog.xamarin.com/wp-content/uploads/2017/01/25110545/DocumentDBFeatures.png

スキーマレスデータに対する豊富なクエリ

DocumentDBは、スキーマレスJSONドキュメントとしてデータを異機種コレクションに格納し、スキーマや索引を気にせずに豊富で高速なクエリを提供します。

スピードとSLAの保証

DocumentDBを使用してドキュメントを読み書きするには、わずか数ミリ秒かかります。開発者は必要なスループットを指定でき、99.99%のSLAでDocumentDBがそれを尊重します。

無限スケール

あなたのアプリケーションが成長するにつれて、DocumentDBコレクションは成長します。小さなデータサイズと100秒間の要求から始めて、任意の大きさで、1秒あたりのスループットペタバイトのデータあたり10億〜100億回の要求に成長することができます

グローバルに分散

あなたのモバイルアプリのユーザーは、外出先で、世界中で頻繁に利用されています。 DocumentDBはグローバルに分散されたデータベースで、マップ上を1回クリックするだけで、ユーザーがいる場所にデータを持ち込むことができます。

組み込みのユーザー権限

DocumentDBを使用すると、複雑なカスタム認証コードなしで、ユーザー単位のデータやマルチユーザーの共有データなどの一般的なパターンを簡単に実装できます。

地理空間的クエリー

多くのモバイルアプリは、今日、地理的なコンテキスト体験を提供しています。ジオスペース型のファーストクラスのサポートにより、DocumentDBはこれらの体験を容易に達成します。

バイナリ添付ファイル

あなたのアプリデータには、しばしばバイナリブロブが含まれています。添付ファイルのネイティブサポートにより、DocumentDBをアプリケーションデータのワンストップショップとして簡単に使用できます。

以下の簡単な5つの手順に従って、惑星規模のアプリを構築してください!

ステップ1:入門

DocumentDBを使い始めるのは簡単です。 ポータルをAzureにして、新しいDocumentDBアカウントを作成し、Quickstartタブに行き、DocumentDBアカウントに接続されたXamarin.Forms ToDoリストのサンプルをダウンロードするだけです。

https://s3.amazonaws.com/blog.xamarin.com/wp-content/uploads/2017/01/25110821/Quickstart.png

既存のXamarinアプリケーションをお持ちの場合は、このDocumentDB NuGetパッケージを追加するだけです。 今日、私たちはXamarin.iOS、Xamarin.Android、およびXamarin.Forms共有ライブラリをサポートしています。

ステップ2:データの操作

データレコードは、異種コレクションのSchemaless JSONドキュメントとしてDocumentDBに格納されます。 構造が異なるドキュメントを同じコレクションに格納することができます。

var result = await client.CreateDocumentAsync (collectionLink, todoItem);

Xamarinプロジェクトでは、スキーマレスデータに対して言語統合クエリを使用できます。

var query = client.CreateDocumentQuery<TodoItem> (collectionUrl)
    .Where (todoItem => todoItem.Complete == false)
    .AsDocumentQuery ();
 
Items = new List<TodoItem> ();
while (query.HasMoreResults) {
    Items.AddRange (await query.ExecuteNextAsync<TodoItem> ());
}

ステップ3:ユーザーの追加

多くの「開始」サンプルと同様に、上記でダウンロードしたDocumentDBサンプルは、アプリケーションのコードにハードコードされたマスターキーを使用してサービスに認証します。これは、もちろん、あなたのローカルエミュレータを除いてどこでも実行しようとしているアプリケーションのための良い考えではありません。

代わりに、私たちのアプリケーションは、ログインしているユーザーのレコードにアクセスできるようにします。以下は、たとえば、ToDoリストアプリをマルチユーザToDoリストアプリに変更する方法です。サンプルの完全なバージョンがある、ここで入手できます。

  • FacebookActive Directory、または他のプロバイダを使用して、アプリケーションにログインを追加します。

  • / userIdをパーティションキーとして使用してDocumentDB UserItemsコレクションを作成します。あなたのコレクションのパーティションキーを指定することで、アプリケーションのユーザー数が増えるにつれてDocumentDBが無制限に拡張され、高速クエリーが提供されます。

  • DocumentDBリソースの追加トークンブローカーは、ユーザーを認証し、ログインしたユーザーに短いトークンを発行し、ユーザーのパーティション内の文書にのみアクセスできる単純なWeb APIです。この例では、App Token BrokerをApp Serviceでホストします。

  • Facebookでリソーストークンブローカーに認証するようにアプリケーションを変更し、ログインしたFacebookユーザーのリソーストークンを要求してから、UserItemsコレクションのユーザーのデータにアクセスします。

次の図は、このソリューションを示しています。

https://s3.amazonaws.com/blog.xamarin.com/wp-content/uploads/2017/01/25111449/UsersDocumentDB.png

ステップ4:オンデマンドスケーリング

DocumentDBは管理されたサービスとしてのデータベースです。ユーザーベースが増えるにつれて、VMのプロビジョニングやコアの増強について心配する必要はありません。DocumentDBに伝える必要があるのは、アプリが必要とする1秒あたりの処理数(スループット)だけです。あなたは、スループットと呼ばれるの尺度使用してポータルスケールタブを経由してスループットを指定することができます秒あたりの要求単位(RUを)。たとえば、1KBのドキュメントの読み取り操作には1 RUが必要です。「スループット」メトリックのアラートを追加してトラフィックの増加を監視し、アラートが発生したときにスループットをプログラムによって変更することもできます。

https://s3.amazonaws.com/blog.xamarin.com/wp-content/uploads/2017/01/25111556/ScalingDocumentDB.png

ステップ5:Go Planet-Scale!

あなたのアプリが人気を集めているので、あなたは世界中のユーザーを獲得するかもしれません。あるいは、あなたのDocumentDBコレクションで隕石がAzureデータセンターに攻撃を受けた場合、慎重に見逃したくないかもしれません。AzureポータルとDocumentDBアカウントに移動し、マップをクリックすると、世界中の任意の数の地域にデータを複製できます。これにより、ユーザーがどこにいてもデータを利用できるようになり、雨の日に備えてフェールオーバーポリシーを追加することができます。

https://s3.amazonaws.com/blog.xamarin.com/wp-content/uploads/2017/01/25112109/ReplicateDataGLobally.png

このブログとサンプルは、XamarinアプリケーションでDocumentDBを活用するのに役立ちます。いつものように、私たちがやっているとどのような改善あなたはを通してDocumentDBのために今後見たい方法を知っているユーザーボイス、StackOverflowのの#紺碧-documentdb、または私に手を差し伸べる@kirillg_msft。

翻訳元

blog.xamarin.com