shuhelohelo’s blog

Xamarin.Forms多めです.

App CenterのAnalyticsを使う.

www.slideshare.net

www.youtube.com

アプリケーションの利用状況やクラッシュ

App Center SDKの導入

App Centerの各アプリケーションのトップに表示されるGetting Startedにもあるように以下の2ステップで導入できます.

f:id:shuhelohelo:20200708162001p:plain

  1. Nugetからパッケージのインストール

f:id:shuhelohelo:20200708162026p:plain

以下の3つのパッケージをインストールする.

次のパッケージはTurnip Trackerではインストールされていたが,用途がよくわからない.

App Centerに登録したアプリケーションのOverviewには大切な情報が書いてある.

ここにGetting Startedという情報があって,そこにはApp.xaml.csのOnStartメソッドに以下のように書けとある. Xamarin.NativeとXamarin.Formsで書き方が異なるので注意.

android********の部分にはGUIDが書かれているのだが,これ,ただのサンプルコードではなく,このGUIDを使わないとApp Center SDKから情報が送られないようだ.

AppCenter.Start("android=**************************;" +
                  "uwp={Your UWP App secret here};" +
                  "ios={Your iOS App secret here}",
                  typeof(Analytics), typeof(Crashes));

f:id:shuhelohelo:20200708224110p:plain

てっきりこれは記述例だと思っていたので,適当な文字列を使用したらまったくApp Centerにデータが送られてこないので困った.

App Centerでは1つのアプリでもプラットフォームごとに登録していくのだが,おそらく各プラットフォームのGetting Startedにそのプラットフォーム用のGUIDの情報が表示されるのだろうと思う.

さて,Startメソッドについて.

1つ目の引数はApp Secretとある.

2つ目以降は使用するServiceで,例えばCrashesとAnalyticsを使うのであれば上記のように列挙する.

今回はOnStartメソッドに以下のように書いた.

各プラットフォームごとのApp Secretは同じ文字列を使ってはいけない,とのこと.

        protected override void OnStart()
        {
            string android = this._config["AppCenter_AppSecret_Android"];
            string ios = this._config["AppCenter_AppSecret_iOS"];
            string uwp = this._config["AppCenter_AppSecret_UWP"];
            AppCenter.Start($"android={android};" +
                            $"uwp={uwp};" +
                            $"ios={ios}",
                            typeof(Analytics), typeof(Crashes));
        }

appsettings.jsonに記載された情報を取得して使用する.このあたりの仕組については以前に書いた記事を参考にする.

機密情報はApp Centerの環境変数に設定しておき,コード内には記述しないようにしている. App Centerのビルドスクリプトで機密情報を差し込み,ビルドしている.

shuhelohelo.hatenablog.com

shuhelohelo.hatenablog.com

使ってみる

ユーザーの行動をトラッキングしたい箇所で,「名前」と必要に応じて「任意の情報」をDictionary形式で付加する.

            Analytics.TrackEvent("OpenBrowser", new Dictionary<string, string>
            {
                ["sessionId"] = SessionInfo.SessionID,
                ["uri"] = uri,
            });

そして実行してみると,それぞれTrackEventメソッドを挿入した箇所を処理が通ると,App CenterのAnalyticsにデータが表示される.

f:id:shuhelohelo:20200708230440p:plain

オフラインの場合

10MBまでローカルストレージに保存する.

10MBを超えたら古いものから削除していく.

オンラインになったときに50個一気に送るか,3秒ごとに送信する?

docs.microsoft.com