UWP 應用獲取各類系統、用戶信息 (2) - 商店授權信息、零售演示模式信息、廣告 ID、EAS 設備信息、硬體識別信息、移動網路信息

来源:http://www.cnblogs.com/validvoid/archive/2016/02/17/uwp-system-info-collect-2.html
-Advertisement-
Play Games

應用開發中,開發者時常需要獲取一些系統、用戶信息用於數據統計遙測、問題反饋、用戶識別等功能。本文旨在介紹在 Windows UWP 應用中獲取一些常用系統、用戶信息的方法。示例項目代碼可參見 Github: https://github.com/validvoid/UWP-SystemInfoCol


應用開發中,開發者時常需要獲取一些系統、用戶信息用於數據統計遙測、問題反饋、用戶識別等功能。本文旨在介紹在 Windows UWP 應用中獲取一些常用系統、用戶信息的方法。示例項目代碼可參見 Github:

https://github.com/validvoid/UWP-SystemInfoCollector

由於涉及內容較多,故本文會分為多篇展開。本篇為系列第二篇,介紹如何獲取商店授權信息、零售演示模式信息、廣告ID、EAS 設備信息、硬體識別信息、硬體設備信息以及移動網路信息。

 

原博客閱讀地址:http://validvoid.net/uwp-system-info-collect-2/

 

商店授權信息

Windows.ApplicationModel.Store 命名空間提供了與 Windows Store 商店交互的類型和成員。我們使用其中的 CurrentApp 類獲取當前應用的授權信息。

需要註意的是,如果你還沒有 Windows Store 開發者賬號,或者正在進行本地調試,需要使用 CurrentAppSimulator 而不是 CurrentApp 類。顧名思義,CurrentAppSimulator 正是 CurrentApp 的模擬類,代替了過去 WP8 上的 Mock IAP Lib 用於模擬正式的商店交互。CurrentAppSimulator 的成員和用法與 CurrentApp 完全一致。推薦做法是使用編譯條件,Debug 時使用 CurrentAppSimulator,而 Release 時使用 CurrentApp

有關 CurrentAppSimulator 的詳情,可以參考 MSDN 文檔

授權信息

CurrentApp 類包含三個屬性:

  • AppId 獲取 Windows Store 商店為通過認證的應用生成的 GUID。
  • LicenseInformation 獲取當前應用的授權元數據。
  • LinkUri 獲取當前應用商店頁面的 URI。

其中的 LicenseInformation 屬性是判斷當前應用整體授權情況(不包含應用內購產品的授權信息)的關鍵。該屬性的工作不要求網路連接,因此在設備離線狀態下,應用依然可以通過此 API 正確檢測授權情況。LicenseInformation 屬性 的類型為LicenseInformationLicenseInformation 類型包含四項只讀屬性:

  • ExpirationDate 獲取相對於系統時鐘的授權過期時間。
  • IsActive 指示當前授權狀態是否有效。
  • IsTrial 指示當前授權是否為試用授權。
  • ProductLicenses 獲取與當前應用關聯的應用內商品授權列表。

我們可以通過前三項屬性控制應用的試用、購買授權。對於試用版應用,試用期間 IsTrial 屬性會返回 true, IsActive 屬性也會返回 true。超過試用期,IsActive 會返回 false。從試用版升級為完整版,則IsTrial 屬性會返回 false,IsActive 屬性會返回 true。

市場活動 ID

除以上成員外,CurrentApp 類還提供了一個方法GetAppPurchaseCampaignIdAsync。該方法用於返回市場活動 ID。這是 Windows 10 新增的一項特性。市場活動 ID(campaign ID) 本質上是一個可自定義的參數,允許你據此獲得應用安裝的來源渠道,從而進一步開展應用推廣、用戶活動、分渠道數據分析等工作。假設你要開展影響活動,從微博安裝應用的用戶可獲贈某項應用內產品,那麼在微博發佈應用的商店下載鏈接時,就需要附加上市場活動 ID。當用戶通過此攜帶市場活動 ID 的鏈接安裝你的應用並滿足轉化條件時,用戶啟動應用後,應用可以通過 GetAppPurchaseCampaignIdAsync 獲取到你在推廣鏈接中預置的市場活動 ID,進而為該用戶發放贈品。從用戶點擊攜帶市場活動 ID 的鏈接到完成應用安裝,就實現了一次轉化。

創建市場活動 ID

如果你希望發佈應用的商店頁面鏈接,使用戶通過瀏覽器導航跳轉進入應用的商店網頁進行安裝,那麼需要使用 HTTP 格式的商店鏈接,並附加市場活動 ID 參數。例如:

圖中前半部分為 Skype 的商店頁面鏈接,在此鏈接後附加了 ?cid=facebook_campaign 表示這是來自 Facebook 頁面的推廣鏈接。

而如果你希望在其它應用中通過附加市場活動 ID 的鏈接直接跳轉到 Windows Store 商店應用推廣你的應用,則需要使用協議格式的 URL。同樣以 Skype 舉例,在另一個應用中,使用代碼方式跳轉到鏈接:

ms-windows-store://pdp/?PRODUCTID=9wzdncrfj364&cid=facebook_campaign  

市場活動 ID 的轉化條件

你可以在 Windows 開發人員中心面板中的“通道和轉換報告”欄目查看市場活動 ID 的轉化數據。需要註意的是,對於該欄目的數據統計,以及調用 GetAppPurchaseCampaignIdAsync 以編程方式獲得市場活動 ID 的滿足條件是不一樣的。

要被“通道和轉換報告”統計認定為有效轉化,需要滿足以下條件:

  • 具有已識別的微軟帳戶的用戶點擊了自定義市場活動 ID 的應用 URL,然後重定向到該應用的 Windows 應用商店頁面。
  • 該用戶在完成上一步動作後 24 小時內安裝該應用。即使用戶點擊了自定義市場活動 ID 的 Windows 應用商店 URL,但在另一臺登錄相同微軟賬戶電腦或設備上安裝該應用,這仍然認定為有效轉化。

要被編程方式獲取市場活動 ID 認定為有效轉化,需要滿足以下條件:

  • 具有已識別的 Microsoft 帳戶的用戶點擊了自定義市場活動 ID 的應用 URL,然後重定向到該應用的 Windows 應用商店頁面。
  • 用戶在點擊 URL 後跳轉到的 Windows 應用商店頁面立即安裝該應用。如果用戶離開頁面,然後在 24 小時內返回到該頁面(無論在同一臺電腦或設備上還是不同的電腦或設備上)並安裝應用,將認定為“通道和轉換報告”的有效轉化,但如果你以編程方式獲取市場活動 ID,則這不會認定為有效轉化。

有關市場活動 ID 的更多詳情,可以參考 MSDN 文檔 Create a custom app promotion campaign,或中文版《創建自定義應用促銷活動》。不過個人覺得中文版的翻譯不是很順暢,推薦閱讀英文版。之後我也會另寫一篇博客補上市場活動 ID 的更多相關內容。

零售演示模式信息

Windows 10 包含一個隱藏的“零售演示模式”。啟用該模式時 Windows 會刪除系統當前登錄的賬戶信息,自動開啟一個演示用賬戶。如果你的應用被選為零售 Windows 設備上的預裝應用,那麼可能需要獲取與系統零售演示模式相關的信息。 Windows.System.Profile 命名空間下的 RetailInfo 正是提供次功能的一個工具類。

RetailInfo 類只包含一個方法 IsDemoModeEnabled 和一個屬性 Properties

'IsDemoModeEnabled' 用於檢測當前應用是否運行於零售演示模式。如果是,返回 true,否則將返回 false。假設你的應用是 Windows 設備的預裝應用,你希望顧客在商店體驗 Windows 系統和你的應用時展示一些不同的內容,就可以通過此方法判斷當前是否運行於演示模式,如果是則展示用於演示的內容,比如產品介紹視頻。

只讀屬性 Properties 返回一系列用於演示模式應用的屬性設置。當應用不處於演示模式時,該屬性不返回任何內容。類似於上一篇文章中提到的 KnownUserPropertiesRetailInfo.Properties 的鍵名由 KnownRetailInfoProperties 類定義,該類包含以下只讀屬性:

屬性訪問類型說明
BatteryLifeDescription 只讀 獲取電池續航信息屬性值的鍵名。
DisplayDescription 只讀 獲取顯示設備說明信息屬性值的鍵名。
DisplayModelName 只讀 獲取顯示設備型號信息屬性值的鍵名。
FormFactor 只讀 獲取設備規格信息屬性值的鍵名。
FrontCameraDescription 只讀 獲取前置攝像頭信息屬性值的鍵名。
GraphicsDescription 只讀 獲取圖形處理器信息屬性值的鍵名。
HasNfc 只讀 獲取是否搭載 NFC 設備信息屬性值的鍵名。
HasOpticalDrive 只讀 獲取是否搭載光碟機信息屬性值的鍵名。
HasSdSlot 只讀 獲取是否搭載 SD 卡插槽信息屬性值的鍵名。
IsFeatured 只讀 獲取是否為推薦產品信息屬性值的鍵名。
IsOfficeInstalled 只讀 獲取是否安裝 Office 信息屬性值的鍵名。
ManufacturerName 只讀 獲取製造商名稱屬性值的鍵名。
Memory 只讀 獲取記憶體信息屬性值的鍵名。
ModelName 只讀 獲取設備型號名屬性值的鍵名。
Price 只讀 獲取設備價格信息屬性值的鍵名。
ProcessorDescription 只讀 獲取處理器信息屬性值的鍵名。
RearCameraDescription 只讀 獲取背部攝像頭信息屬性值的鍵名。
RetailAccessCode 只讀 獲取零售訪問代碼信息屬性值的鍵名。
ScreenSize 只讀 獲取屏幕尺寸信息屬性值的鍵名。
StorageDescription 只讀 獲取儲存設備說明信息屬性值的鍵名。
Weight 只讀 獲取設備重量信息屬性值的鍵名。
WindowsEdition 只讀 獲取搭載 Windows 版本信息屬性值的鍵名。

廣告 ID

Windows.System.UserProfile.AdvertisingManager 類提供了一個屬性 AdvertisingId,該屬性返回一個字元串類型的值,即廣告 ID。廣告 ID 也是開發者實現應用數據統計的重要參考項之一。不過使用 AdvertisingId 中有幾點問題需要註意:

  • 廣告 ID 是每用戶、每設備唯一的
  • 廣告 ID 可以被用戶通過系統設置關閉
  • 廣告 ID 不具有持久性,在不同情況下會發生改變
  • 廣告 ID 在兒童賬戶中是關閉的

有關廣告 ID 的更多介紹,以及更多獲取設備唯一 ID 實現數據統計的方案介紹,請參閱之前的文章 《Windows Store 應用獲得設備 ID 的幾種方案》

EAS 設備信息

Windows.Security.ExchangeActiveSyncProvisioning 命名空間下的EasClientDeviceInformation 類提供了獲取 EAS 設備信息的能力。所謂的 EAS 即 Exchange ActiveSync。EAS 是一套使移動設備與 Exchange 服務同步數據的協議。EasClientDeviceInformation 往往也是開發者獲取系統信息的一個重要渠道,例如,使用 Github 上的示例代碼在一臺搭載 Windows 10 Mobile 的名為 "Steve's Phone" 的 Lumia 1520 上會得到如下 EAS 信息輸出:

EAS Client Device Information  
Id: 3d776048-51ef-da40-d1ad-3ce62a9b8ca4  
FriendlyName: Steve's Phone  
OperatingSystem: WindowsPhone  
SystemFirmwareVersion: 02540.00019.15236.45005  
SystemHardwareVersion: 5.3.0.  
SystemManufacturer: NOKIA  
SystemProductName: RM-939_apac_prc_200  
SystemSku: NOKIA RM-939_apac_prc_200  

而在一臺搭載了技嘉 B85 主板的 Windows 10 台式機上運行則會得到以下 EAS 輸出:

Id: 3f69ad8d-1362-3f96-507c-453ff2efbe7c  
FriendlyName: Creeper's PC  
OperatingSystem: WINDOWS  
SystemFirmwareVersion:  
SystemHardwareVersion:  
SystemManufacturer: Gigabyte Technology Co., Ltd.  
SystemProductName: B85M-D3V  
SystemSku: To be filled by O.E.M.  

EasClientDeviceInformation 的使用方法也很簡單:

var eascdi = new Windows.Security.ExchangeActiveSyncProvisioning.EasClientDeviceInformation(); 

 

EasClientDeviceInformation 包含了以下只讀屬性提供 EAS 相關的系統、設備信息:

如果你打算使用 EAS ID 做唯一設備是別,需要註意 EAS ID 是每用戶、每設備、每應用唯一的,這意味著不同用戶、不同設備、不同應用獲取到的 EAS ID 都是不一樣的。有關設備 ID 的更多內容,可參閱我之前編寫的文章《Windows Store 應用獲得設備 ID 的幾種方案》

硬體識別信息

如果你打算在你的應用中實現每設備邏輯,那麼就會用到 Windows.System.Profile 命名空間下定義的 HardwareIdentification 類。該類只包含一個方法:GetPackageSpecificToken。該方法用於返回當前應用在當前設備的硬體識別 ID(簡稱為 ASHWID)。方法的返回值類型為 HardwareToken

HardwareToken 類型包含三個只讀屬性:

  • Certificate 獲取用於校驗硬體識別 ID 的證書。
  • Id 獲取硬體識別 ID。
  • Signature 獲取用於校驗硬體識別 ID 的數字簽名。

要獲得 ASHWID 的值,我們可以使用如下方法:

string strDeviceUniqueId = "";  
string strSignature = "";  
string strCertificate = "";

var token = HardwareIdentification.GetPackageSpecificToken(null);  
IBuffer hardwareId = token.Id;  
IBuffer signature = token.Signature;  
IBuffer certificate = token.Certificate;

var byteArray = new byte[hardwareId.Length];  
var dataReader = DataReader.FromBuffer(hardwareId);  
dataReader.ReadBytes(byteArray);

foreach (byte b in byteArray)  
{
    string strTemp = b.ToString();
    if (1 == strTemp.Length)
    {
        strTemp = "00" + strTemp;
    }
    else if (2 == strTemp.Length)
    {
        strTemp = "0" + strTemp;
    }
    strDeviceUniqueId += strTemp;
}

 

需要註意的是,ASHWID 是用戶間一致,每設備、每應用唯一的。也就是說同一用戶在不同設備上使用同一應用獲得的 ASHWID 取值不同;同一用戶在相同設備上使用不同應用獲得的 ASHWID 取值也不同。

有關 ASHWID 以及實現每設備應用邏輯的更多詳情可以參閱我之前編寫的文章《Windows Store 應用獲得設備 ID 的幾種方案》


移動網路信息

在 Windows.Networking.NetworkOperators 命名空間中定義了很多移動網路相關 API。例如 MobileBroadbandAccount 類表示了移動寬頻賬戶,'MobileBroadbandNetwork' 類表示移動寬頻網路等。該命名空間下提供的所有功能特性屬於微軟合作伙伴 API。這意味著開發者需要從微軟獲得特定的私有許可權才能在應用中調用這些 API 並正常工作。由於我不是手機製造商,也不是移動網路工作人員,無法拿到這些私有許可權的授權,並且大部分開發者也拿不到,故在此不再贅述此命名空間相關 API,僅在此給出參考資料,有興趣的朋友可以參閱:


UWP 應用獲取各類系統、用戶信息第二篇到此結束。後續隨著對 UWP 各種 API 瞭解的深入,我會繼續更新本系列文章和示例代碼演示如何獲取常用信息。


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 下麵貼出的是centos6.5 /etc/rc.sysinit文件內容 #!/bin/bash # # /etc/rc.d/rc.sysinit - run once at boot time # # Taken in part from Miquel van Smoorenburg's bchec
  • 在CentOS 6.5上安裝python2.7
  • linux與Windows共用文件配置: 1.進入超級用戶:$su root 2.啟動tftp伺服器:#netstat -a | grep tftp,出現如圖所示的消息表示tftp伺服器已安裝成功; 3.安裝NFS伺服器: #rpm –q nfs-utils,如果有下圖的信息出現說明已經安裝: 4.
  • 在項目開發的過程中,發現程式總是死在判斷DMA一次傳輸是否完成這個標誌位上。進一步回退分析,發現是在I2C讀的過程中,有使用到DMA去取外部I2C設備的data。 但是data並沒有讀完,Data為32bits,DMA在讀到18bits時,就出現讀不到data bit了。導致I2C硬體模塊不能進一步
  • WM_DEVICECHANGE消息 查閱MSDN得知: The framework calls this member function to notify an application or device driver of a change to the hardware configurati
  • 關於如下程式結構的描述中,哪一項是正確的? for ( ; ; ) { 迴圈體; //何問起 } a) 不執行迴圈體b) 一直執行迴圈體,即死迴圈c) 執行迴圈體一次d) 程式不符合語法要求 答案:http://hovertree.com/tiku/bjaf/9eclwqps.htm 首頁:http
  • [ASP.NET MVC] ASP.NET Identity登入技術應用 情景 ASP.NET Identity是微軟所貢獻的開源項目,用來提供ASP.NET的驗證、授權等等機制。在ASP.NET Identity里除了提供最基礎的:用戶註冊、密碼重設、密碼驗證等等基礎功能之外,也提供了進階的:Co
  • /// <summary> /// 獲得四位的隨機數 /// </summary> /// <returns></returns> public string Randomnum() { Random ro = new Random(); int iResult; int iUp = 999; in
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...