窓を作っては壊していた人のブログ

この謎のブログタイトルの由来を知るものはもういないだろう

XamarinとApp Centerで実際に自分が試してみての所感

Xamarin その1 Advent Calendar 2017 - Qiita の4日目のエントリー(ポエム)です(ギリギリですみません)

3日目はくぅ君の

アプリ開発をサポートする App Center とは! Xamarin とも連携してくれるよ! - くうと徒然なるままに

でした. 使ってみたいなぁとは思ってはいたけれども使っていなかったDistribute機能やフリー枠のBuildのことが記載されています.

あと

実際に使ってどうだったのかは明日のやまちゅうさんの記事を楽しみにしてください。

ひぇーっ

はじめに

さて前回投稿した

teitoku-window.hatenablog.com

これの補足...記事という感じのスタンスでお話します.

まだ読んでない方向けに簡単に説明すると

  • 学祭アプリをXamarinで開発してApp Centerと連携してみた
  • App CenterのAnalyticsでアンケートを取ってみた

みたいなことをちょろっと書いていました.

ここでは実際にアプリはどんな感じで作ったのか,またApp Centerを使う上で自分が感じたことを例を交えてご紹介します.

学祭アプリについて

完成品および関連リポジトリへのリンク

東北大学祭2017を App Store で

69th東北大学祭 - Google Play の Android アプリ

github.com

ひとまず参考リンクを...以上2つが実際にリリースされたもの,加えてGitHubリポジトリです.

求められたこと

本アプリケーションは東北大学大学祭の運営委員の方から依頼されたアプリケーションでした. 本アプリケーション,およびソースコードに求められたことがいくつかあり,一部書き出してみると

  • 初回起動時にユーザー属性を取れるようなアンケートを行いたい
  • 直前になってデータベースを変更する場合があるため,柔軟に変更が可能,また即座に反映できる方が好ましい
  • 来年度も流用する可能性があるため,そこそこ新しめの環境でうごくもの

みたいなことが挙がりました. 今回はApp Centerと開発よりの話をするため1つ目と3つ目を紹介します. 2つ目は結論から言うとRealm Object Serverを使った,ということなのですが,それに関しては今後詰まってしまったポイントと一緒に他の記事にしようかなと考えています(コンパイルが通らないとかdynamic型に一回キャストしてからとかそういう感じのこと).

実際の開発での対応

まず3つ目の新しめという点です.

これに関しては数ヶ月ほど前に対応になった.NETStandard,その中でも2系で作っておけば問題ないと考えました. 実際の対応についてはこのコミットが始点になると思います.

Update netstandard2.0 · yamachu/TonpeiFes2017@30ce227 · GitHub

解説記事はこちら

.NETStandardに準拠して作ってみてよかったなと感じたこと,またこういうケースで美味しいだろうなと思った点としては,もしも作成したモバイルアプリケーションと通信するサーバーアプリケーションを作ることになった時にDataObjects周りや一部ロジックが共通化し易いことかなと思いました. 当初ASP.NET Coreでサーバーサイドアプリケーションを作成し共通のモデルのプロジェクトを参照しようと考えていたため,この選択は良かったと思いました.

今からまたXamarin.Formsでアプリケーションを作るのであれば,迷うことなくこの選択をすると思います.

次に1つ目のアンケートの点です.

先ほど

当初ASP.NET Coreでサーバーサイドアプリケーションを作成し共通のモデルのプロジェクトを参照しようと考えていた

という風にお話しました. 実際に行ったかというとこれはNOです. というのも

  • モバイルの実装及び検証の時間が非常にかかってしまいサーバーサイドを考える時間が一切取れなかった
  • アンケート1つのためにAPI実装してサーバーサイドのアプリ作ってホストするのがアホらしかった

ということがあったためです. それではどうしたかと言うと,App CenterのAnalytics機能,その中でもCustom Eventsを使いました.

App Center Analytics | Microsoft Docs

Custom Events機能はドキュメントを見ると

Examples of events and properties are:
* Event Name: "File Upload", Event properties: ".PDF", ".txt", ".PNG".
* Event Name: "Question answered", Event properties: "Accept", "Decline", "Ignore".

みたいな感じですよとあります. もう,アンケートにも使ってくださいと言わんばかりの例ですね!

ということでこんな風にすることでアンケートを取ることが出来ます.

TonpeiFes2017/AnalyticsService.cs at master · yamachu/TonpeiFes2017 · GitHub

これで自分でアンケート用のAPIサーバーを立てなくてもApp CenterのAnalytics機能を使うことでアンケートを取ることが可能になりました.

しかしAnalytics機能のCustom Eventも万能ではありません. 上記の例では1つのイベントに対して5つのユーザー属性を付与してアンケートというふうに扱いました. 今回はこれで問題なかったのですが,更に多くのプロパティを付与しようとすると少し工夫が必要となります.

Limitsの欄を見てみると

The maximum number of event properties that can be defined per event is five. If more than five properties are sent, they are automatically rejected.
The portal will show up the ten property values with highest count.

ギリギリですね...5個以上のプロパティをもたせると弾かれてしまうようです. またその下のshow up the ten property ...という風に,一つの要素に多くの値を持たせてみると上位10件しか取ることが出来ません.

始めこの制限を知らずに使っていてOthersという値にまとめられて何事!と冷や汗をかきました. 詳細にアンケートなどをとりたい場合は他の手段を考えることが必要だろうなと感じました.

ドキュメントを,ちゃんと見ましょうね!

App Centerを使って感じたこと

ここからはちょっとだけApp Centerを使ってみて感じたことを.

まず何よりも導入が非常に簡単でつまづきポイントが無かったことが非常に好印象でした. NuGetで入れて,Appクラスとかで

AppCenter.Start($"android={MOBILE_CENTER_ANDROID_API_KEY};ios={MOBILE_CENTER_IOS_API_KEY}",
                   typeof(Analytics), typeof(Crashes));

こんなのを書くだけで使うことが出来ます. 同じようなサービスはいくつか他のところからも提供されていますが,設定ファイルを落としてきてContentのタイプを変えて,ビルドタイプを変える時設定の変更は〜などなかなかに面倒な部分があることもあるので,非常に直感的だなと思いました.

また上記のコードにも含まれていますが,Crashの監視もApp Centerで行うことが出来ます. 本番環境で自分の想定していなかった使われ方,また端末のバージョンなど様々な環境のものが飛んで来るので非常に楽しいです. このCrash監視機能で実際に修正版をリリースできたため,とりあえずこれから作るアプリケーションにも入れておいたほうがいい気がします.

さいごに

お気持ち書いただけで技術的なことが含まれてない...っ!圧倒的ポエム...っ!! 書き始めの時間が遅くて文章壊れちゃってますが,雰囲気で,雰囲気で読み取ってくだされば幸いです.

本当にこの記事で伝えたかったことはシンプルで

  • App Center便利だし使ってみて
    • Limitsがちょい厳しめな感じあるのでちょっと注意
  • 今からXamarin.Formsでアプリ作るなら.NETStandard2.0で

ってことだけです.ねっ,簡単でしょ?

今度はPush通知やテスターさんへのDistribute機能などを使ってどんな感じか確かめてみたいものです.

また近日中に今回のアプリの設計にあたって非常に参考になった記事などをご紹介いたします.

次回は

さて5日目は @muak_xさんのCustom Cell関係のお話です.

ハイパフォーマンスなListViewにしたいときや,凝ったCellを作ってみたい時には避けて通れないNative Cell,非常に楽しみです.