app center analytics を使い倒そうapp center analytics 概要 no. 機能 項目 説明 1 event...

Post on 27-May-2020

3 Views

Category:

Documents

0 Downloads

Preview:

Click to see full reader

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