UWP app擷取各類系統、使用者資訊 (2) - 商店授權資訊、零售示範模式資訊、廣告識別碼、EAS 裝置資訊、硬體識別資訊、移動網路資訊

來源:互聯網
上載者:User

標籤:pre   reader   很多   foreach   weight   demo   tom   開發   翻譯   

原文:UWP app擷取各類系統、使用者資訊 (2) - 商店授權資訊、零售示範模式資訊、廣告識別碼、EAS 裝置資訊、硬體識別資訊、移動網路資訊

應用開發中,開發人員時常需要擷取一些系統、使用者資訊用於資料統計遙測、問題反饋、使用者識別等功能。本文旨在介紹在 Windows UWP app中擷取一些常用系統、使用者資訊的方法。樣本項目代碼可參見 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 屬性 的類型為LicenseInformation。LicenseInformation 類型包含四項唯讀屬性:

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

我們可以通過前三項屬性控制應用的試用、購買授權。對於試用版應用,試用期間 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 版本資訊屬性值的鍵名。
廣告識別碼

Windows.System.UserProfile.AdvertisingManager 類提供了一個屬性 AdvertisingId,該屬性返回一個字串類型的值,即廣告識別碼。廣告識別碼 也是開發人員實現應用資料統計的重要參考項之一。不過使用 AdvertisingId 中有幾點問題需要注意:

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

有關廣告識別碼 的更多介紹,以及更多擷取裝置唯一 ID 實現資料統計的方案介紹,請參閱之前的文章 《Windows Store 應用獲得裝置識別碼 的幾種方案》。

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 相關的系統、裝置資訊:

  • FriendlyName 返回裝置名稱。
  • Id 返回裝置識別碼。
  • OperatingSystem 返回裝置作業系統。
  • SystemFirmwareVersion 返回系統韌體版本號碼。
  • SystemHardwareVersion 返回硬體版本號。
  • SystemManufacturer 返回製造商名稱。
  • SystemProductName 返回裝置型號名。
  • SystemSku 返回 SKU。此項僅限 Windows Store 應用使用。其內容從註冊表擷取,如果註冊表不可訪問,則該項返回Null 字元串。當為空白時,建議以裝置型號作為 SKU 值,否則應當適用製造商名稱和裝置型號名構造 SKU 值。

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

硬體識別資訊

如果你打算在你的應用中實現每裝置邏輯,那麼就會用到 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 應用獲得裝置識別碼 的幾種方案》。

移動網路資訊

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

  • Mobile Broadband Overview
  • Mobile broadband WinRT API overview
  • List of mobile broadband Windows Runtime APIs
  • Best practices for using Mobile Broadband Windows Runtime API

UWP app擷取各類系統、使用者資訊第二篇到此結束。後續隨著對 UWP 各種 API 瞭解的深入,我會繼續更新本系列文章和範例程式碼示範如何擷取常用資訊。

UWP app擷取各類系統、使用者資訊 (2) - 商店授權資訊、零售示範模式資訊、廣告識別碼、EAS 裝置資訊、硬體識別資訊、移動網路資訊

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.