app center analytics を使い倒そうapp center analytics 概要 no. 機能 項目 説明 1 event...
Post on 27-May-2020
3 Views
Preview:
TRANSCRIPT
App Center Analytics を使い倒そう~静的コード生成を活用した Xamarin における AOP 活用~
AD62
About Me
http://www.nuits.jp
https://blog.nuits.jp
@nuits_jp
Today’s Goal
Today’s Goal
App Center Analytics概要
App Center
Test
Build
Distribute
Craches
Analytics
Push Notifications
App Center Analytics 概要
No. 機能分類 説明
1 Overview アプリケーション利用者の利用状況の確認
2 Custom Events カスタムイベント情報の収集と確認
3 Log Flow Analytics SDKの登録情報のリアルタイム監視
デバッグなどに利用
4 Export to Azure Microsoft AzureのApplication Insightsへ、データをエク
スポートして分析可能
App Center Analytics 概要
App Center Analytics 概要
App Center Analytics 概要
No. 機能 項目 説明
1 Active Users Monthly 月別のアクティブユーザー数
2 Weekly 週別のアクティブユーザー数
3 Daily 日別のアクティブユーザー数
4 Engagement Daily sessions per user 1ユーザーの1日の平均セッション数
5 Total sessions 期間内の総セッション数
6 Average sessions per day 一日の平均セッション数
7 Session duration セッション別接続時間
8 Average session length 平均セッション時間
9 Devices and OS Device model distribution 機器別の利用者数・比率
10 OS distribution OSバージョン別の利用者数・比率
11 Countries and Languages Countries 国別の利用者数・比率
12 Languages 言語別の利用者数・比率
13 Active Users per Version Active Users per Version アプリバージョン別利用者数
14 Latest Version アプリケーションの最終バージョン
15 Adoption 最終バージョンの移行率
App Center Analytics 概要
App Center Analytics 概要
App Center Analytics 概要
No. 機能 項目 説明
1 Event Page Count イベント発生数
2 Trend 前回期間からのカウントの変更トレンド
3 Users イベントを発生させたユーザー数
4 User change 前回期間からのユーザー数変更トレンド
5 Per user ユーザーごとの平均発行数
6 Detail event view Users イベントを発行させたユーザー数の推移
7 Count イベント発行数の推移
8 Count per user ユーザーごとのイベント発行数の推移
9 Count per session セッションごとのイベント発行数の推移
10 Properties カスタムしたログプロパティ
App Center Analytics 概要
App Center Analytics 概要
No. 機能分類 説明
1 Overview アプリケーション利用者の利用状況の確認
2 Custom Events カスタムイベント情報の収集と確認
3 Log Flow Analytics SDKの登録情報のリアルタイム監視
デバッグなどに利用
4 Export to Azure Microsoft AzureのApplication Insightsへ、データをエク
スポートして分析可能
Analyticsを使う3つのステップ
Analyticsを使う3つのステップ
AppCenter.Start("{Your App Secret}", typeof(Analytics));
Analytics.TrackEvent("Video clicked", new Dictionary<string, string> {{ "Category", "Music" },{ "FileName", "favorite.avi"}
});
「どこで」「どう」トラッキングしますか?
「どこで」トラッキングするか? MVVM編
Binding &
Command
Call
Notification
「どう」トラッキングするか?
Analytics.TrackEvent("Video clicked", new Dictionary<string, string> {{ "Category", "Music" },{ "FileName", "favorite.avi"}
});
汚染された結果
「どう」トラッキングするか?
AOPが最適!
AOPとは
AOPイメージ
つまり
Xamarin で AOP するには問題が…
静的コード生成を活用することで可能
静的コード生成とは
コンパイルJIT
or
AOT
⇒ トラッキングコードを埋め込まなくてよい
⇒機械的に埋め込む為、個別テストは不要
⇒影響箇所が集約され変更が容易に
AOPにより多くの問題が解消される
静的コード生成前とコード生成後
public string Message {set {
_message = value;}
public string Message {set {
Analytics.TrackEvent("Sample.MainPageViewModel#Message", new Dictionary<string, string> {{ "Value", value }});
_message = value;}
コード生成前のC#コードとバイトコード
public string Message {set {
_message = value;}
IL_0000: ldarg.0IL_0001: ldarg.1IL_0002: stfld string Sample.MainPageViewModel::_messageIL_0007: ret
バイトコード&それを生成するC#コード
IL_0000: ldarg.0IL_0001: ldarg.1IL_0002: stfld string Sample.MainPageViewModel::_messageIL_0007: ret
var body = getMethodDefinition.Body;body.Instructions.Add(Instruction.Create(OpCodes.Ldarg_0));body.Instructions.Add(Instruction.Create(OpCodes.Ldarg_1));var fieldDefinition = typeDefinition.Fields.Single(x => x.Name == "_message");body.Instructions.Add(Instruction.Create(OpCodes.Stfld, fieldDefinition));body.Instructions.Add(Instruction.Create(OpCodes.Ret));
生成するC#コードとバイトコード
Analytics.TrackEvent("Sample.MainPageViewModel#Message", new Dictionary<string, string> {{ "Value", value }});
IL_0000: ldstr "Sample.MainPageViewModel#Message"IL_0005: newobj instance void class
[mscorlib]System.Collections.Generic.Dictionary`2<string, string>::.ctor()IL_000a: dupIL_000b: ldstr "Value"IL_0010: ldarg.1IL_0011: callvirt instance void class
[mscorlib]System.Collections.Generic.Dictionary`2<string, string>::Add(!0, !1)IL_0016: call void
[Microsoft.AppCenter.Analytics]Microsoft.AppCenter.Analytics.Analytics::TrackEvent(string, class [mscorlib]System.Collections.Generic.IDictionary`2<string, string>)
コード生成の課題
適切な用法用量をまもる事が肝心
静的コード生成に利用するライブラリ
No. ライブラリ 説明
1 Mono.Cecil バイトコードを編集する機能を提供するライブラリ
2 Fody Mono.Cecilを利用し、コード生成プラグインを作成し、ビルド
時にコード生成を実行するフレームワーク
サンプルコード
https://github.com/nuitsjp/ReactiveTracker.Fody
https://github.com/nuitsjp/BlueMonkey-and-AppCenter
https://qiita.com/Nuits/items/3bd43f41a19d61510ef0
まとめ
まとめ
Any Questions?
© 2018 Atsushi Nakamura All rights reserved.
本コンテンツの著作権、および本コンテンツ中に出てくる商標権、団体名、ロゴ、製品、サービスなどはそれぞれ、各権利保有者に帰属します。
本情報の内容 (添付文書、リンク先などを含む) は、de:code 2018 開催日 (2018年5月22~23日) 時点のものであり、予告なく変更される場合があります
top related