偵錯通知中樞
本節描述對使用 Azure 通知中樞的解決方案進行偵錯的一些秘訣。
偵錯推播通知可能是一項挑戰,因為牽涉到許多系統:您的裝置應用程式、後端、平臺通知系統,以及最有可能的推播通知服務,例如 Azure 通知中樞。 在典型的案例中,利用正確的推播認證設定您的通知中輸、利用平台通知系統和中樞註冊您的裝置應用程式,最後再更新您的後端以傳送通知,都需要費點功夫。 因為這類架構的複雜度,很有可能導致錯誤或失敗,接著造成裝置沒有收到通知。 很幸運地,有數個工具對偵錯您的推播通知組態很有幫助。
Azure 管理入口網站
Visual Studio 伺服器總管
服務匯流排總管
Azure 管理入口網站
您可以使用 Azure 管理入口網站監視通知和註冊的狀態,並且傳送測試通知。 您可以在通知中樞的 [偵錯] 索引標籤中存取這項功能,如下所示:
您可以使用範本) 來指定傳送測試通知時要使用的推播通知服務:Windows Phone、Windows、iOS、Android或自訂 (。 您可以傳送隨機測試通知,或將測試通知傳送至一組特定的註冊。 若要傳送測試推送通知,請在 [偵錯] 索引標籤上設定必要參數,然後按一下畫面底部的 [傳送]。
Visual Studio 伺服器總管
Visual Studio 中的伺服器總管會連接到您的 Microsoft Azure 訂用帳戶,您可以從 Visual Studio IDE 開始始用您的 Azure 服務。 連接時,您可以對通知中樞執行一些有限的測試和偵錯。 在 Visual Studio 中測試您的應用程式時,Visual Studio 中的偵錯會格外方便。 從 Visual Studio,您可以檢閱現有的推播通知註冊以了解指定的通知中樞。 您也可以將測試訊息傳送至已註冊的裝置,以測試您的通知中樞組態。
若要診斷 Visual Studio 中的通知中樞,請展開 Azure 底下伺服器總管中的 [通知中樞] 節點,然後以滑鼠右鍵按一下中樞名稱並按一下 [診斷]。
提示
直接從 Visual Studio 瀏覽到 Azure 管理入口網站,以滑鼠右鍵按一下伺服器總管中的中樞名稱,然後按一下 [在管理入口網站中開啟]。
以下是 [裝置註冊] 診斷索引標籤,會顯示現有的註冊:
當您有大量的註冊時,您可以同時根據標籤篩選清單並根據資料行排序清單。 您也可以選取現有的註冊,然後按一下編輯標籤圖示,以編輯現有註冊的標籤。
以下是 [測試傳送] 診斷索引標籤,可讓您將測試訊息傳送到現有的註冊:
您可以隨機傳送通知給用戶端註冊 (廣播),或是只傳送給具有特定標籤的註冊。 使用這項測試功能時,Visual Studio 保證收到測試通知的用戶端不會超過 10 個,且測試的結果會顯示在 [訊息結果] 資料表中。 這與在NotificationHubClient API 上將EnableTestSend設定為true相同。
當您選擇訊息類型時,會針對選取的平台和推播通知類型產生格式正確的測試訊息。
和通知中樞相關的其他資訊,包括組態狀態、連接字串資訊,以及註冊存留時間 (TTL) 都會顯示在 [屬性] 視窗中。 TTL 會以 PxxDTyyH的序列化日和小時格式顯示,其中 xx 是天, 而 yy 是小時,預設的 90 天註冊為 P90D。
服務匯流排總管
您也可以使用「服務匯流排總管」(Service Bus Explorer) 工具來協助偵錯程序。 您可以在這裡下載服務匯流排總管。 這項工具可讓您探索目前已向通知中樞註冊的裝置。 您也可以使用服務匯流排總管傳送測試通知。 您可以利用 Azure SDK 和 .NET 用戶端程式庫執行所有工作,也可以透過 REST 執行,但此工具可以讓偵錯程序更容易。 如需 服務匯流排 Explorer 的快速簡介,請參閱這段影片。
當您啟動服務匯流排總管時,請使用您的 ACS 連接字串將它連接到您的命名空間,而非使用您的中樞連接字串 (您用於您的應用程式和後端)。 例如:
下列是針對使用通知中樞的解決方案進行偵錯時的實用工作:
請確定裝置已利用中樞正確註冊。 若要這樣做,您可以取得中樞的所有註冊,並檢查註冊的存在是否具有正確的 PNSHandle (例如,ChannelURI、裝置權杖或 registrationId) 以及一組正確的標籤。 在服務匯流排總管中,在左邊選取您的通知中樞,然後使用底部的 [註冊] 按鈕查詢註冊。 用戶端應用程式中的程式碼應該提供註冊。 例如:
如果您有註冊,請確定您在傳送訊息時有取得「成功」結果 (您可以立即在服務匯流排總管中看到結果,不用等待入口網站儀表板更新)。 如果您收到任何其他結果,請參閱 此 MSDN 主題 ,以協助瞭解此處大部分問題 (與中樞和/或用戶端應用程式中的認證設定相關) 。
如需結果的每個平臺描述,請參閱 計量 主題。
如果平台通知服務傳回成功,就表示您的通知中樞成功地將您的通知傳遞到平台通知系統。 如果它仍未顯示,通常是因為每個平台特有的特性。 例如:
在 iOS 中,如果您的應用程式正在執行 (即使是在背景),它就會擷取您的通知。 若要顯示通知,您必須在您的
application:didReceivePushNotification:
類別中實作AppDelegate
方法。 此外,如果您的 json 裝載不正確,APNS 會接受通知但裝置將不會顯示任何項目。在 Windows Phone 中,如果您的應用程式是在幕前,將不會顯示快顯通知。
在 Android 中,請確定您的廣播接聽程式已正確設定,而且權限已設定在適當封裝的資訊清單中。
最後,請檢查您是否已註冊通知中樞並將相同類型的通知傳送至通知中樞。 如果您註冊了範本,您必須傳送範本通知。 如果您註冊原生通知,您必須將原生通知傳送至正確的平台。
結果代碼
當您從入口網站或服務匯流排總管傳送測試通知時,傳回的結果會是成功或失敗。 下表列出可能的結果和它們的意義:
結果類別 | 描述 |
---|---|
Success |
通知已成功傳遞到 PNS。 |
Throttled |
PNS 並未接受通知,因為相關聯的認證已進行節流處理。 |
ChannelThrottled |
PNS 並未接受通知,因為目標通道 (ChannelUri、裝置權杖...) 正在進行節流。 |
ChannelDisconnected |
PNS 並未接受通知,因為通道目前中斷連線。 |
Dropped |
PNS 並未接受通知,因為通道佇列已滿。 |
PNS 問題 |
|
PnsUnreachable |
無法連接到 PNS。 |
PnsInterfaceError |
與 PNS 服務匯流排 介面發生錯誤。 |
PnsServerError |
PNS 回報內部錯誤。 |
PnsUnavailable |
PNS 回報服務目前無法使用。 |
PNS 驗證問題 |
|
TokenProviderUnreachable |
如果連絡 PNS (例如 WNS) 之前必須取得授權權杖,卻無法連繫服務來取得權杖,就會發生此錯誤。 注意:當認證錯誤時,這不是結果。 |
TokenProviderInterfaceError |
與權杖提供者服務服務匯流排介面發生錯誤。 |
InvalidCredentials |
註冊中指定的認證不存在、遭到封鎖,或服務匯流排無法使用它們成功 ( (,PNS 拒絕它們,或提供授權權杖的服務拒絕他們) 。 |
InvalidToken |
如果連絡 PNS (例如 WNS) 之前必須取得授權權杖,PNS 卻拒絕權杖,就會發生此錯誤。 |
WrongToken |
提供給 PNS 的權杖有效,但不授與任何權限給指定的 PNShandle。 |
PNSHandle 問題 |
|
BadChannel |
PNS 無法辨識提供的 PNShandle 為有效的 PNShandle。 |
ExpiredChannel |
PNS 可以辨識 PNSHandle,但 PNShandle 已不再有效。 |
WrongChannel |
PNS 可辨識此控制代碼,但該控制代碼對目前的通知無效。 |
要求問題 |
|
InvalidNotificationFormat |
PNS 會指出通知格式的相關錯誤。 注意:如果提供的範本格式不正確,或將範本套用至傳入訊息的結果會導致格式不正確的通知,就會發生這種情況。 |
InvalidNotificationSize |
PNS 會指出通知大小的相關錯誤。 注意:如上所述。 |