在應用程式中測試和疑難排解鄰近性 (HTML)
[ 本文的目標對象是撰寫 Windows 執行階段 App 的 Windows 8.x 和 Windows Phone 8.x 開發人員。如果您正在開發適用於 Windows 10 的 App,請參閱 最新文件 ]
這個主題提供的指導方針,可以讓應用程式開發人員在將應用程式提交到市集之前,先測試和疑難排解應用程式中的鄰近性。
在您開始前
鄰近性是在兩個不同的裝置上執行同一應用程式的兩個執行個體間建立分享應用程式使用經驗的最佳方法。在啟用鄰近性的應用程式中,應用程式使用者只需同時點選兩部裝置便可初始化連線,或是瀏覽尋找無線範圍內執行該應用程式的另一部裝置。瀏覽其他電腦上的對等應用程式是透過 WiFi-Direct 進行。在 Windows Phone,對等應用程式探索則是透過藍牙進行,並尋找在其他手機上執行的對等應用程式。
為了測試對於點選手勢的回應功能,每部裝置都必須安裝近接裝置,例如近距離無線通訊 (NFC) 無線電波。為了測試在電腦上使用無線瀏覽的功能,每部電腦都必須支援 Wi-Fi Direct。
注意 為了測試 Windows Phone 市集應用程式的瀏覽功能,每部手機都必須支援藍牙。
設定以進行測試:
如果您沒有支援鄰近性輕觸 (例如,近距離無線通訊 (NFC) 無線電波) 的硬體,可以使用鄰近性驅動程式範例,這個範例是 Windows 驅動程式套件 (WDK) 範例的一部分。您可以使用範例驅動程式,在兩部裝置之間透過網路連線模擬點選手勢。如需如何下載 WDK 的相關資訊,請參閱 Windows 驅動程式套件 (WDK)。一旦安裝 WDK 和範例之後,您就可以在安裝 WDK 範例的位置 src\nfp 目錄中找到鄰近性驅動程式範例。如需建置和執行模擬器的指示,請參閱 src\nfp\net 目錄中的 NetNfpProvider.html 檔案。一旦啟動模擬器之後,當您的鄰近性應用程式在前景中執行時,該模擬器便會在背景中執行。您的應用程式必須位於前景中,輕觸模擬才能運作。
使用 PeerFinder 類別連線應用程式
您可以使用 PeerFinder 類別,在兩部不同裝置上執行的相同應用程式 (也就是對等應用程式) 之間建立通訊端連線。使用 PeerFinder 類別,您可以從點選手勢連線對等應用程式,或者可以使用 Wi-Fi Direct,在無線範圍內的對等應用程式之間進行瀏覽。這兩個連線對等應用程式的方法都可以在對等應用程式之間建立開啟的通訊端,但是建議您在應用程式中同時支援觸發 (點選) 和瀏覽 (Wi-Fi Direct) 連線功能。
如需連線對等應用程式的範例,請參閱快速入門:使用輕觸或瀏覽來連線應用程式或範例庫中的鄰近性範例。如需建立使用鄰近性的應用程式的指導方針,請參閱使用鄰近性功能進行程式開發的指導方針。
測試對等應用程式連線
- 在兩部裝置上安裝您的應用程式,並在這兩部裝置上啟動該應用程式。
- 在這兩部裝置上宣告對等連線。這是藉由呼叫 Start 方法來達成。
- 若要測試觸發的連線,請同時輕觸裝置。
- 確定應用程式中的 UI 會反映點選手勢的狀態。也就是,在找到對等應用程式時,或是當裝置處於連線程序期間等狀況。如需詳細資訊,請參閱 TriggeredConnectionStateChanged 事件。
- 如果連線成功,接著請確保應用程式中的 UI 會反映這兩部裝置的網路功能已生效。
- 如果連線不成功,接著請確保應用程式中的 UI 會通知使用者網路連線已失敗。
- 若要測試無線連線,請讓兩部裝置的其中一部瀏覽可用的對等連線。這是藉由呼叫 FindAllPeersAsync 方法來達成。只支援電腦之間或手機之間的瀏覽,不支援手機和電腦之間的瀏覽。在電腦上執行的應用程式和在手機上執行的應用程式,瀏覽機制並不相同。Windows Phone 只支援透過藍牙瀏覽,而電腦只支援透過 WiFi-Direct 瀏覽。
- 如果連線成功,接著請確保應用程式中的 UI 會反映這兩部裝置的網路功能已生效。
- 如果連線不成功,接著請確保應用程式中的 UI 會通知使用者網路連線已失敗。
- 如果您的應用程式支援連線至兩個以上的對等應用程式,請擴大測試以使用多部裝置。
如果支援觸發 (點選) 連線的應用程式已安裝於兩部裝置,則使用點選手勢從某一部裝置要求連線,將會提示第二部裝置的使用者啟動或安裝該應用程式。應用程式必須正在提出要求之裝置的前景中執行。使用 FindAllPeersAsync 方法瀏覽連線時,不支援這項功能。
測試從點選手勢啟動應用程式
- 在兩部裝置上安裝您的應用程式。只在第一部裝置上啟動該應用程式。
- 在執行您應用程式的裝置上宣告對等連線。這是藉由呼叫 Start 方法來達成。
- 同時輕觸這兩部裝置。
- 在第二部裝置上,確認已發出通知,提示使用者啟動該應用程式。接受通知。
- 確保應用程式已在第二部裝置上成功啟動,而且該應用程式會立即建立鄰近性網路通訊端。確保應用程式中的 UI 會反映這兩部裝置的網路功能已生效。
- 如果應用程式啟動失敗,請確認在提出要求的裝置上,該應用程式中的 UI 會反映失敗的嘗試。如果應用程式已啟動,但是無法建立鄰近性網路通訊端,請確保這兩部裝置應用程式中的 UI 都會反映這項失敗。
您的應用程式應該編寫可以處理當啟動對等應用程式的要求遭到拒絕時的情況。
測試從點選手勢拒絕要求
- 在兩部裝置上安裝您的應用程式。只在第一部裝置上啟動該應用程式。
- 在執行您應用程式的裝置上宣告對等連線。這是藉由呼叫 Start 方法來達成。
- 同時輕觸這兩部裝置。
- 在第二部裝置上,確認已發出通知,提示使用者啟動或安裝該應用程式。拒絕通知。
- 確認應用程式並未在第二部裝置上啟動,而且提出要求的應用程式中的 UI 會反映要求遭到拒絕。
使用 ProximityDevice 類別發佈和訂閱訊息
您可以使用 ProximityDevice 類別,在點選手勢期間發佈裝置之間的小型訊息。裝置必須位於已安裝鄰近性硬體的範圍內,通常是 2 到 3 公分。
若要在點選手勢期間發佈訊息,請在發佈的裝置上使用 PublishMessage、PublishBinaryMessage 或 PublishUriMessage 方法,並在接收的裝置上使用 SubscribeForMessage 方法。 如需發佈和訂閱訊息的範例,請參閱快速入門:使用輕觸來發佈和訂閱訊息或範例庫中的鄰近性範例。
測試發佈和訂閱訊息的應用程式
- 在某一部裝置上啟動發佈的應用程式,並在另一部裝置上啟動訂閱的應用程式。這可以是兩部裝置上的相同應用程式,但不一定要如此。
- 讓應用程式進入發佈和接收訊息的狀態。這包含在發佈的應用程式中呼叫其中一個發佈方法,以及在接收的應用程式中呼叫 SubscribeForMessage 方法。
- 同時輕觸這兩部裝置。
- 如果訊息已成功傳輸,請確保訂閱應用程式中的 UI 會反映已收到訊息。作為發佈應用程式中的選項,您可以呼叫發佈方法的多載,這個方法會包含類型為 MessageTransmittedHandler 的事件處理常式的參數,訊息已經傳輸時會呼叫這個事件處理常式。在這個事件處理常式的程式碼中,您可以更新發佈應用程式中的 UI,以反映訊息已成功傳輸。
- 如果訊息無法發佈或未收到,請檢閱應用程式中的程式碼,以判斷問題所在。如需疑難排解步驟,請參閱這個主題中"疑難排解"小節的"未收到已發佈和訂閱的訊息"。
- 測試這兩個應用程式可以離開發佈和訂閱訊息的狀態。在發佈的裝置上,呼叫 StopPublishingMessage 方法。在訂閱的裝置上,呼叫 StopSubscribingForMessage 方法。在同時輕觸這兩部裝置之後,確認已無法發佈或接收訊息。
疑難排解
如果您遇到的問題未列於此處,或許能在 Windows 開發人員論壇找到答案。
問題 | 疑難排解步驟 |
---|---|
輕觸沒有回應。使用點選手勢連線對等應用程式時,或者在輕觸期間發佈和訂閱訊息時,無法執行回應點選手勢的程式碼。 | 確保參與點選手勢的裝置都位於鄰近性範圍內 (至少 2cm)。您可能必須根據鄰近性裝置的位置來調整裝置。當裝置位於鄰近性範圍內時,Windows 會播放音效。 您可以使用 DeviceArrived 和 DeviceDeparted 事件,分辨裝置何時進入或離開鄰近性。將適用於 DeviceArrived 和 DeviceDeparted 事件的事件處理常式新增到您的程式碼。如果事件處理常式程式碼已執行,則點選手勢就會成功。如果 DeviceArrived 和 DeviceDeparted 事件的事件處理常式程式碼未執行,則您的鄰近性硬體或驅動程式可能有問題。 如果您的應用程式正在使用 PeerFinder 類別來建立觸發的連線,而且引發了 DeviceArrived 事件,但是未引發 TriggeredConnection 事件,請確認下列各項: |
應用程式未在輕觸之後啟動。 | 確認參與輕觸的兩部裝置中,至少有一部裝置的前景正在執行該應用程式。如果是這種情況,而應用程式仍然無法在輕觸之後啟動,請參閱"輕觸沒有回應"的疑難排解步驟。 如果在前景執行的應用程式中引發了 TriggeredConnection 事件,但是參與點選手勢的另一部裝置並未出現啟動應用程式的提示,請確認應用程式已正確安裝。如果應用程式已正確安裝,它將會從開始磚啟動,並且當它在前景執行時,會因為點選手勢進行連線。 |
瀏覽時找不到任何對等應用程式。 |
|
嘗試從輕觸連線,會在一分鐘以後失敗。 | 檢查參與輕觸的兩部裝置上的無線設定,確認它們均已啟用 Wi-Fi 和藍牙無線電波。如果其中一部裝置不包含可支援 Wi-Fi Direct 或藍牙無線電波的無線裝置,請確認這兩部裝置都會連線到相同的網路。 |
未收到已發佈和訂閱的訊息。在發佈和訂閱訊息時,訂閱的裝置未收到發佈的訊息。 | 在發佈的裝置上,您可以使用 PublishMessage、PublishUriMessage 或 PublishBinaryMessage 方法的超載,而這些方法包含類型為 MessageTransmittedHandler 的事件處理常式的參數,傳輸訊息之後,就會呼叫這個事件處理常式。如果發佈方法的呼叫成功,而且 MessageTransmittedHandler 事件處理常式中的程式碼已執行,則訊息就會成功傳輸。 在訂閱的裝置上,確認您傳遞給 SubscribeForMessage 方法的 messageType 參數值符合已傳遞給 PublishMessage 或 PublishBinaryMessage 方法的 messageType 參數值 (如果是 PublishUriMessage 方法,則 messageType 值必須是 WindowsUri)。訊息類型值會區分大小寫。 |
相關主題
Windows.Networking.Proximity namespace
範例