分配的访问权限的展台应用:最佳做法
原文: 分配的訪問權(quán)限的展臺應(yīng)用:最佳做法
best practices guidance for developing a kiosk app for assigned access.
在 Windows 10 中,你可以使用鎖屏框架和分配的訪問權(quán)限創(chuàng)建展臺應(yīng)用,該應(yīng)用允許用戶與設(shè)備上的單個應(yīng)用進(jìn)行交互。 本文檔介紹了如何實現(xiàn)展臺應(yīng)用,并介紹了最佳做法。所有示例代碼都采用 C# 編寫,但應(yīng)該可以輕松地翻譯為你選擇的語言,因為基礎(chǔ)框架是 Windows RT。本文檔專為想要為其客戶編寫展臺應(yīng)用的 OEM 和 ISV 而編寫。
條款
| 分配的訪問權(quán)限 | 允許系統(tǒng)管理員通過限制公開給設(shè)備用戶的應(yīng)用程序入口點來管理用戶體驗的功能。例如,你可以限制你公司的客戶僅使用一個應(yīng)用,以便將你的電腦用作展臺。每當(dāng)有人使用指定帳戶登錄時,他們僅能使用該應(yīng)用。他們不能使用觸摸手勢、鼠標(biāo)、鍵盤或硬件按鈕切換應(yīng)用或關(guān)閉應(yīng)用。他們同樣看不到任何應(yīng)用通知。 |
| 鎖屏界面應(yīng)用(或鎖屏應(yīng)用) | 利用設(shè)置動態(tài)壁紙功能或利用新的鎖屏可擴(kuò)展性框架的應(yīng)用程序。 |
| 上方鎖屏界面應(yīng)用(或上方鎖屏應(yīng)用) | 鎖屏界面應(yīng)用運(yùn)行時(例如,桌面鎖定時),在其上方啟動的應(yīng)用程序。 |
| 下方鎖屏應(yīng)用 | 在已解鎖的 Windows 上下文中正常運(yùn)行的應(yīng)用程序。 |
| LockApplicationHost | 允許上方鎖屏界面應(yīng)用請求設(shè)備解鎖并允許應(yīng)用進(jìn)行注冊以便在設(shè)備開始解鎖時收到系統(tǒng)通知的 WinRT 類。 |
| 視圖或應(yīng)用程序視圖 | 每個視圖都是應(yīng)用中的一個獨立窗口。應(yīng)用可以擁有一個主視圖,并可根據(jù)需要創(chuàng)建多個輔助視圖。有關(guān)詳細(xì)信息,請參閱?ApplicationView。 |
?
在后臺
Windows 10 中分配的訪問權(quán)限可利用新的鎖屏框架。當(dāng)分配的訪問權(quán)限用戶登錄時,后臺任務(wù)將鎖定桌面,并且鎖屏界面應(yīng)用將啟動,然后運(yùn)行鎖屏上方的展臺應(yīng)用。展臺應(yīng)用實際上作為上方鎖屏界面應(yīng)用運(yùn)行。
當(dāng)鎖屏框架啟動鎖屏上方的展臺應(yīng)用時,它將為展臺應(yīng)用創(chuàng)建新的輔助視圖,并在新的輔助視圖中呈現(xiàn)其所有主視圖。
必須在應(yīng)用程序清單文件中使用?windows.aboveLockScreen?擴(kuò)展,才能使你的應(yīng)用顯示在“設(shè)置”的“分配的訪問權(quán)限”中。有關(guān)應(yīng)用程序清單的示例,請參閱附錄。
要點??Windows 10 中“設(shè)置”下的“分配的訪問權(quán)限”應(yīng)用列表旨在僅顯示 Windows 10 UWP(通用 Windows 平臺)應(yīng)用程序,其 UAP 擴(kuò)展名為?windows.aboveLockScreen。最佳做法
保護(hù)你的信息
如果展臺應(yīng)用打算以分配的訪問權(quán)限并且以正常的方式在鎖屏上方運(yùn)行,則你可能需在已解鎖的 Windows 上下文中創(chuàng)建一個要在鎖屏上方呈現(xiàn)的不同頁面和一個用于鎖屏下方的頁面。這將使你可以在展臺模式下避免顯示敏感信息,因為展臺模式通常意味著匿名訪問。下面是你使用兩個不同頁面時要遵循的步驟,一個用于鎖屏下方,一個用于鎖屏上方:
以下示例將演示如何執(zhí)行此操作。AssignedAccessPage.xaml 已預(yù)定義,而且當(dāng)應(yīng)用檢測到 AssignedAccessPage.xaml 正在上方鎖屏模式下運(yùn)行時,將導(dǎo)航到該頁面。因此,普通頁面將僅在下方鎖屏方案下顯示。
你可以使用此方法確定該應(yīng)用在其生命周期內(nèi)是否隨時都在鎖屏界面上運(yùn)行并相應(yīng)地做出響應(yīng)。
using Windows.ApplicationModel.LockScreen;// inside the override OnLaunched function in App.xaml.csif (rootFrame.Content == null) {LockApplicationHost host = LockApplicationHost.GetForCurrentView();if (host == null){// if call to LockApplicationHost is null, this app is running under lock// render MainPage normallyrootFrame.Navigate(typeof(MainPage), e.Arguments);}else{// If LockApplicationHost was successfully obtained// this app is running as a lock screen app, or above lock screen app// render a different page for assigned access use// to avoid showing regular main page to keep secure information saferootFrame.Navigate(typeof(AssignedAccessPage), e.Arguments);} }多個視圖、窗口和線程
請記住,僅主視圖或窗口才會在分配的訪問權(quán)限模式下呈現(xiàn),但是要呈現(xiàn)在新的輔助視圖中。你在應(yīng)用中創(chuàng)建的任何其他視圖將不呈現(xiàn)。請確保你希望用戶看到或訪問的所有內(nèi)容都在主窗口中,因為用戶無法看到其他視圖。
鎖屏框架可將展臺應(yīng)用的主視圖呈現(xiàn)于新的輔助視圖中(它對該應(yīng)用完全透明)。你不需要手動創(chuàng)建適用于上方鎖屏模式的輔助視圖,因為鎖屏框架會為你創(chuàng)建一個。這意味著你的應(yīng)用在上方鎖屏模式下運(yùn)行時實際上將有兩個視圖。當(dāng)你的應(yīng)用在分配的訪問權(quán)限模式下時,在你的主窗口中運(yùn)行以下代碼,以通過查看視圖計數(shù)和值來確認(rèn)當(dāng)前窗口是否為主窗口。
using Windows.ApplicationModel.Core;CoreApplication.GetCurrentView().IsMain //false CoreApplication.Views.Count //2下面是示例布局。
調(diào)度程序
每個視圖或窗口都有其自己的調(diào)度程序。在分配的訪問權(quán)限模式下,不應(yīng)使用?MainView?調(diào)度程序,應(yīng)改為使用?CurrentView?調(diào)度程序。
例如,在以下代碼示例中,.xaml 頁面上有一個“按鈕”和一個?TextBlock。向該按鈕添加單擊事件處理程序。該處理程序會執(zhí)行一些后臺工作,然后更新?TextBlock的文本。在此示例中使用?CoreApplication.MainView.Dispatcher?將導(dǎo)致應(yīng)用崩潰,因為在分配的訪問權(quán)限模式下,主窗口不是?MainView,但在輔助視圖中呈現(xiàn)。建議你使用?CoreApplication.GetCurrentView.Dispatcher。
using Windows.ApplicationModel.Core; private async void Button_Click(object sender, RoutedEventArgs e) {button.IsEnabled = false;// start a background task and update UI periodically (every 1 second)// using MainView dispatcher in below code will end up with app crash // in assigned access mode, use GetCurrentView().Dispatcher insteadawait CoreApplication.GetCurrentView().Dispatcher.RunAsync(CoreDispatcherPriority.Normal,async () =>{for (int i = 0; i < 60; ++i){// do some background work, here we use Task.Delay to sleepawait Task.Delay(1000);// update UItextBlock1.Text = " " + i.ToString();}button.IsEnabled = true;}); }添加除分配的訪問權(quán)限之外的方法
在某些情況下,用于停止應(yīng)用程序的電源按鈕、Esc 按鈕或其他按鈕可能在鍵盤上無法啟用或不可用。在這些情況下,請?zhí)峁┮环N方法來停止分配的訪問權(quán)限,例如軟件鍵。以下事件處理程序顯示了如何通過響應(yīng)可能由軟件鍵觸發(fā)的按鈕單擊事件來停止分配的訪問權(quán)限模式。
LockApplicationHost^ lockHost = LockApplicationHost::GetForCurrentView();if (lockHost != nullptr){lockHost->RequestUnlock();}生命周期管理
如果展臺應(yīng)用意外結(jié)束,分配的訪問權(quán)限框架將嘗試重新啟動它。如果用戶具有對鍵盤的物理訪問權(quán)限并按下 Ctrl+Alt+Del 顯示登錄屏幕,將觸發(fā)“正在解鎖”事件。分配的訪問權(quán)限框架偵聽此事件并將嘗試終止展臺應(yīng)用。你的展臺應(yīng)用也可以對此事件注冊一個處理程序并退出。有關(guān)如何執(zhí)行此操作的示例,請參閱下面的代碼。
using Windows.ApplicationModel.LockScreen;public AssignedAccessPage() {this.InitializeComponent();LockApplicationHost lockHost = LockApplicationHost.GetForCurrentView();if (lockHost != null){lockHost.Unlocking += LockHost_Unlocking; } }private void LockHost_Unlocking(LockApplicationHost sender, LockScreenUnlockingEventArgs args) {// save any unsaved work and gracefully exit the appApp.Current.Exit(); }在用戶按下 Ctrl+Alt+Del 并且登錄屏幕出現(xiàn)后,可能發(fā)生以下兩個事項:
不要在分配的訪問權(quán)限模式下創(chuàng)建新的窗口或視圖
如果在分配的訪問權(quán)限模式下調(diào)用以下函數(shù),則該調(diào)用將結(jié)束,并帶有運(yùn)行時異常。如果相同的應(yīng)用(在鎖屏下方使用時)調(diào)用此函數(shù),則不會導(dǎo)致運(yùn)行時異常。使用?LockApplicationHost?有助于確定應(yīng)用的分配的訪問權(quán)限模式,并相應(yīng)地對你的應(yīng)用進(jìn)行編碼,例如,如果應(yīng)用處于分配的訪問權(quán)限模式下,則不會創(chuàng)建新的視圖。
Windows.ApplicationModel.Core.CoreApplication.CreateNewView(); //causes exception附錄
下面是一個示例應(yīng)用程序清單,你可以看到 windows.aboveLockScreen UAP 擴(kuò)展名。必須在你的 Windows 10 通用 Windows 平臺 (UWP) 應(yīng)用中使用此擴(kuò)展名,以便它在“設(shè)置”的“分配的訪問權(quán)限”應(yīng)用列表中顯示。
<Package xmlns="http://schemas.microsoft.com/appx/manifest/foundation/windows10" xmlns:mp="http://schemas.microsoft.com/appx/2014/phone/manifest" xmlns:uap="http://schemas.microsoft.com/appx/manifest/uap/windows10" IgnorableNamespaces="uap mp"><Identity Name="bd4df68b-dc18-4748-a14e-bc21dac13736" Publisher="CN=chandde" Version="1.0.0.0" /><mp:PhoneIdentity PhoneProductId="bd4df68b-dc18-4748-a14e-bc21dac13736" PhonePublisherId="00000000-0000-0000-0000-000000000000" /><Properties><DisplayName>AboveLock</DisplayName><PublisherDisplayName>chandde</PublisherDisplayName><Logo>Assets\StoreLogo.png</Logo></Properties><Dependencies><TargetDeviceFamily Name="Windows.Universal" MinVersion="10.0.0.0" MaxVersionTested="10.0.0.0" /></Dependencies><Resources><Resource Language="x-generate" /></Resources><Applications><Application Id="App" Executable="$targetnametoken$.exe" EntryPoint="AboveLock.App"><uap:VisualElements DisplayName="AboveLock" Square150x150Logo="Assets\Square150x150Logo.png" Square44x44Logo="Assets\Square44x44Logo.png" Description="AboveLock" BackgroundColor="transparent"><uap:DefaultTile Wide310x150Logo="Assets\Wide310x150Logo.png"></uap:DefaultTile><uap:SplashScreen Image="Assets\SplashScreen.png" /></uap:VisualElements><Extensions><uap:Extension Category="windows.lockScreenCall" /><uap:Extension Category="windows.aboveLockScreen" /></Extensions></Application></Applications><Capabilities><Capability Name="internetClient" /></Capabilities> </Package>總結(jié)
以上是生活随笔為你收集整理的分配的访问权限的展台应用:最佳做法的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: java实现飞机大战小游戏(源码+注释)
- 下一篇: Docker学习(三):镜像