[WPF] 使用 Visual Studio App Center 持续监视应用使用情况和问题
1. 什么是AppCenter
Visual Studio App Center 是幾個(gè)常見移動開發(fā)和云集成服務(wù)(如持續(xù)集成、持續(xù)交付和自動 UI 測試等服務(wù))的集合。 這些 App Center 服務(wù)可以針對 iOS、Android、WPF/Winforms、通用 Windows 平臺 (UWP) 和 tvOS 應(yīng)用運(yùn)行。
App Center 服務(wù)使開發(fā)人員可以輕松地生成、測試和分發(fā)應(yīng)用程序。 應(yīng)用由測試人員或客戶使用之后,App Center 會提供服務(wù)來監(jiān)視其應(yīng)用的使用情況和問題。
作為一個(gè)桌面軟件開發(fā)人員我很關(guān)心軟件的使用情況,但又偏偏很難獲取這些內(nèi)容,App Center 的診斷和分析功能正好滿足我的需求,而且這兩個(gè)功能可以免費(fèi)使用且十分簡單易用。這篇文章將重點(diǎn)介紹如何在 WPF 項(xiàng)目中使用這兩個(gè)功能。
2. 先決條件
- 你的項(xiàng)目面向的是 .NET Framework 4.6.1 (或更高版本) 或 .NET Core 3.0 (或更高) 版本。
- 僅當(dāng) WPF/WinForms 應(yīng)用程序在 Windows 上運(yùn)行時(shí),才支持 .NET Core。
- 如果你使用的是可移植庫中的 SDK,則它必須面向 .NET standard 1.0 或更高版本, (不支持 PCL) 。
3. 快速入門
首先需要在 App Center 上創(chuàng)建一個(gè)應(yīng)用:
應(yīng)用被創(chuàng)建后進(jìn)入 Overview 頁面,在這里可以找到 App Center 的入門指南,如下圖所示:
上面打了馬賽克的這段字符是 app secret,每個(gè)應(yīng)用有唯一的 app secret。
在 Nuget 安裝 Microsoft.AppCenter.Analytics 和 Microsoft.AppCenter.Crashes 兩個(gè)包。復(fù)制上面這段代碼到 App.xaml.cs 的 OnStartup 函數(shù)里:
完成上述步驟后重啟應(yīng)用,應(yīng)用的運(yùn)行情況將開始自動發(fā)送到 App Center,你可以在 Diagnostics (診斷)和 Analytics (分析)頁面看到這些數(shù)據(jù)。
4. 診斷
診斷頁面中的數(shù)據(jù)分成兩個(gè)部分:Crash(崩潰)和 Error(錯誤)。其中 Crash 由 App Center SDK 自動發(fā)送。在使用 App Center SDK,并且應(yīng)用遇到導(dǎo)致應(yīng)用崩潰的錯誤時(shí),詳細(xì)信息會在應(yīng)用關(guān)閉之前寫入本地存儲。 由于應(yīng)用遇到了意外錯誤,因此應(yīng)用所處的狀態(tài)不太可靠,不足以將數(shù)據(jù)發(fā)送到 App Center。 但是,當(dāng)用戶再次啟動應(yīng)用時(shí),它會將診斷數(shù)據(jù)發(fā)送到 App Center。
而 Error 則由用戶調(diào)用 Crashes.TrackError 函數(shù)主動發(fā)送。
每一個(gè)數(shù)據(jù)都可以看到詳細(xì)的錯誤信息,Stack traces,報(bào)告時(shí)間,同一類數(shù)據(jù)的 Most affected devices 和 Most affected OS,以及每一個(gè)錯誤報(bào)告的更具體的信息,如果有使用自定義事件,還可以在 EVENTS 標(biāo)簽頁中看到 Crash 發(fā)生前發(fā)生過的事件,以便確定 Crash 發(fā)生的原因。
5. 分析
一旦啟用了 App Center SDK,App Center 將自動收集用戶的關(guān)鍵指標(biāo),包括用戶計(jì)數(shù)、趨勢、設(shè)備、位置、活動時(shí)間、國家、語言、版本等。可以在 analytics/overview 查看這些信息。
還可以使用 App Center SDK 發(fā)送 Analytics.TrackEvent 函數(shù)發(fā)送自定義事件。事件可幫助你識別應(yīng)用程序崩潰的根本原因。 作為 App Center 崩潰服務(wù)的一部分,你可以查看在特定會話崩潰之前發(fā)生的所有事件。
6. 主動發(fā)送數(shù)據(jù)
一般情況下 App Center Sdk 會自動收集 這些數(shù)據(jù),除此之外還可以使用 Analytics.TrackEvent 跟蹤自定義事件。
Analytics.TrackEvent("Video clicked");也可以在這個(gè)函數(shù)中的 properties 附加一個(gè) Dictionary:
Analytics.TrackEvent("Video clicked", new Dictionary<string, string> {{ "Category", "Music" },{ "FileName", "favorite.avi"} });TrackEvent 有一些限制,它最多支持200個(gè)不同的事件名稱。每個(gè)名稱最多支持256個(gè)字符,properties 中每個(gè) key 和 value 的限制都為125個(gè)字符,超過的部分將被截?cái)唷?/p>
對于已處理的 Exception,可以使用 Crashes.TrackError 跟蹤錯誤:
try {// your code goes here. } catch (Exception exception) {var properties = new Dictionary<string, string>{{ "Category", "Music" },{ "Wifi", "On"}};Crashes.TrackError(exception, properties); }它的用法和 Analytics.TrackEvent 類似。雖然官方文檔沒寫,但字符串的長度限制應(yīng)該和 Analytics.TrackEvent 一樣。另外它還支持發(fā)送文件和文本作為附件:
try {// your code goes here. } catch (Exception exception) {var attachments = new ErrorAttachmentLog[]{ErrorAttachmentLog.AttachmentWithText("Hello world!", "hello.txt"),ErrorAttachmentLog.AttachmentWithBinary(Encoding.UTF8.GetBytes("Fake image"), "fake_image.jpeg", "image/jpeg")};Crashes.TrackError(exception, attachments: attachments); }附件的大小限制為 7 MB,嘗試發(fā)送更多的附件將觸發(fā)錯誤。
7. 處理 Crash
前面提到,崩潰時(shí)記錄的數(shù)據(jù)將再重啟應(yīng)用時(shí)發(fā)送到 App Center。這時(shí)候我們可以對這些崩潰的信息做些操作。
Crashes.HasCrashedInLastSessionAsync 用于檢查應(yīng)用是否再上一次啟動時(shí)崩潰,Crashes.GetLastSessionCrashReportAsync 用于獲取上次崩潰的詳細(xì)信息。
bool didAppCrash = await Crashes.HasCrashedInLastSessionAsync(); ErrorReport crashReport = await Crashes.GetLastSessionCrashReportAsync();如果你覺得有些崩潰不需要發(fā)送到 App Center,可以在 ShouldProcessErrorReport 回調(diào)中返回 false。
Crashes.ShouldProcessErrorReport = (ErrorReport report) => {// Check the report in here and return true or false depending on the ErrorReport.return true; };如果需要發(fā)送更詳細(xì)的崩潰報(bào)告,可以使用 GetErrorAttachments 回調(diào)添加附件,這個(gè)附件將聯(lián)通 Crash 數(shù)據(jù)一起發(fā)送。
Crashes.GetErrorAttachments = (ErrorReport report) => {// Your code goes here.return new ErrorAttachmentLog[]{ErrorAttachmentLog.AttachmentWithText("Hello world!", "hello.txt"),ErrorAttachmentLog.AttachmentWithBinary(Encoding.UTF8.GetBytes("Fake image"), "fake_image.jpeg", "image/jpeg")}; };如果想在發(fā)送報(bào)告前彈個(gè)框問問用戶要不要發(fā)送,可以在 ShouldAwaitUserConfirmation 回調(diào)中返回 true 并構(gòu)建 UI,然后用 Crashes.NotifyUserConfirmation 通知 SDK 發(fā)送消息:
Crashes.ShouldAwaitUserConfirmation = ConfirmationHandler; private static bool ConfirmationHandler() {Current.Dispatcher.InvokeAsync(() =>{var dialog = new UserConfirmationDialog();if (dialog.ShowDialog() ?? false){Crashes.NotifyUserConfirmation(dialog.ClickResult);}});return true; }8. 最后
App Center 通過診斷和分析兩個(gè)功能監(jiān)視應(yīng)用的實(shí)際情況,完善應(yīng)用開發(fā)生命周期的最后一步,幫助開發(fā)人員構(gòu)建更好的應(yīng)用程序。更多的信息可以參考下面的鏈接:
Visual Studio 應(yīng)用中心
Visual Studio 應(yīng)用中心定價(jià)
Visual Studio 應(yīng)用中心常見問題
Visual Studio App Center文檔
App Center 簡介 - Learn Microsoft Docs
microsoft/appcenter-sdk-dotnet: Development repository for the App Center SDK for .NET platforms, including Xamarin
總結(jié)
以上是生活随笔為你收集整理的[WPF] 使用 Visual Studio App Center 持续监视应用使用情况和问题的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: CSS弹性盒模型
- 下一篇: asp.net ajax控件工具集 Au