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
  • 前言 本文介紹一款使用 C# 與 WPF 開發的音頻播放器,其界面簡潔大方,操作體驗流暢。該播放器支持多種音頻格式(如 MP4、WMA、OGG、FLAC 等),並具備標記、實時歌詞顯示等功能。 另外,還支持換膚及多語言(中英文)切換。核心音頻處理採用 FFmpeg 組件,獲得了廣泛認可,目前 Git ...
  • OAuth2.0授權驗證-gitee授權碼模式 本文主要介紹如何筆者自己是如何使用gitee提供的OAuth2.0協議完成授權驗證並登錄到自己的系統,完整模式如圖 1、創建應用 打開gitee個人中心->第三方應用->創建應用 創建應用後在我的應用界面,查看已創建應用的Client ID和Clien ...
  • 解決了這個問題:《winForm下,fastReport.net 從.net framework 升級到.net5遇到的錯誤“Operation is not supported on this platform.”》 本文內容轉載自:https://www.fcnsoft.com/Home/Sho ...
  • 國內文章 WPF 從裸 Win 32 的 WM_Pointer 消息獲取觸摸點繪製筆跡 https://www.cnblogs.com/lindexi/p/18390983 本文將告訴大家如何在 WPF 裡面,接收裸 Win 32 的 WM_Pointer 消息,從消息裡面獲取觸摸點信息,使用觸摸點 ...
  • 前言 給大家推薦一個專為新零售快消行業打造了一套高效的進銷存管理系統。 系統不僅具備強大的庫存管理功能,還集成了高性能的輕量級 POS 解決方案,確保頁面載入速度極快,提供良好的用戶體驗。 項目介紹 Dorisoy.POS 是一款基於 .NET 7 和 Angular 4 開發的新零售快消進銷存管理 ...
  • ABP CLI常用的代碼分享 一、確保環境配置正確 安裝.NET CLI: ABP CLI是基於.NET Core或.NET 5/6/7等更高版本構建的,因此首先需要在你的開發環境中安裝.NET CLI。這可以通過訪問Microsoft官網下載並安裝相應版本的.NET SDK來實現。 安裝ABP ...
  • 問題 問題是這樣的:第三方的webapi,需要先調用登陸介面獲取Cookie,訪問其它介面時攜帶Cookie信息。 但使用HttpClient類調用登陸介面,返回的Headers中沒有找到Cookie信息。 分析 首先,使用Postman測試該登陸介面,正常返回Cookie信息,說明是HttpCli ...
  • 國內文章 關於.NET在中國為什麼工資低的分析 https://www.cnblogs.com/thinkingmore/p/18406244 .NET在中國開發者的薪資偏低,主要因市場需求、技術棧選擇和企業文化等因素所致。歷史上,.NET曾因微軟的閉源策略發展受限,儘管後來推出了跨平臺的.NET ...
  • 在WPF開發應用中,動畫不僅可以引起用戶的註意與興趣,而且還使軟體更加便於使用。前面幾篇文章講解了畫筆(Brush),形狀(Shape),幾何圖形(Geometry),變換(Transform)等相關內容,今天繼續講解動畫相關內容和知識點,僅供學習分享使用,如有不足之處,還請指正。 ...
  • 什麼是委托? 委托可以說是把一個方法代入另一個方法執行,相當於指向函數的指針;事件就相當於保存委托的數組; 1.實例化委托的方式: 方式1:通過new創建實例: public delegate void ShowDelegate(); 或者 public delegate string ShowDe ...