如何要求、建立以及儲存通知通道 (HTML)
[ 本文的目標對象是撰寫 Windows 執行階段 App 的 Windows 8.x 和 Windows Phone 8.x 開發人員。如果您正在開發適用於 Windows 10 的 App,請參閱 最新文件 ]
注意 不是使用 JavaScript?請參閱如何要求、建立以及儲存通知通道 (XAML)。
您可以開啟通道統一資源識別元 (URI),讓應用程式能夠透過它接收推播通知。然後可以將通道傳送到用來傳送推播通知的伺服器,並在您不再需要時將它關閉。 對於特定應用程式或次要磚而言,通道是唯一的位址,代表單一裝置上的單一使用者。
您應該在每次應用程式啟動時就要求新的通道,以及在 URI 變更時隨即更新雲端伺服器。如需詳細資訊,請參閱<備註>。
重要 通知通道會自動在 30 天後到期。
您必須知道的事
技術
- Windows Runtime
先決條件
- 磚、通知詞彙、概念以及 XML 的實用知識。這個主題也假設您知道如何使用 Windows 執行階段 API,以 JavaScript 建立基本的 Windows 市集應用程式。
- 熟悉推播通知、Windows 推播通知服務 (WNS) 概念、需求以及操作。這些內容會在 Windows 推播通知服務 (WNS) 概觀中進行討論。
指示
步驟 1: 要求通道 URI
以下範例會要求通道 URI。向「通知用戶端平台」發出要求,接著該平台會從 WNS 要求通道 URI。要求完成時,傳回的值是包含 URI 的 PushNotificationChannel 物件。
var channel;
var pushNotifications = Windows.Networking.PushNotifications;
var channelOperation = pushNotifications.PushNotificationChannelManager.createPushNotificationChannelForApplicationAsync();
return channelOperation.then(function (newChannel) {
channel = newChannel;
// Success. The channel URI is found in newChannel.uri.
},
function (error) {
// Could not create a channel. Retrieve the error through error.number.
}
);
步驟 2: 將通道 URI 傳送至伺服器
通道 URI 是封裝在 HTTP POST 要求中並傳送到伺服器。
重要 您應該透過安全的方式將這個資訊傳送到伺服器。您應該在應用程式傳輸通道 URI 時,要求該應用程式對伺服器驗證自己。加密資訊並使用安全的通訊協定 (如 HTTPS)。
var serverUrl = "https://www.contoso.com";
var xhr = new WinJS.xhr({
type: "POST",
url: serverUrl,
headers: {"Content-Type": "application/x-www-form-urlencoded"},
data: "channelUri=" + channel.uri
}).then(function (req) {
// Channel URI successfully sent to server. Retrieve the response from req.response.
},
function (req) {
// Could not send channel URI to server. Retrieve the error through req.statusText.
}
);
備註
要求通道
您應該使用以下邏輯,在每次應用程式啟動時都要求一個新的通道:
- 要求通道。
- 將新通道與先前的通道做比較。如果通道相同,則不需採取任何進一步的動作。請注意,這會要求您的應用程式在每次成功將通道傳送給您的服務時將通道儲存在本機,以便您有通道可供稍後比較。
- 如果通道已變更,就將新的通道傳送給您的 Web 服務。請納入在下列情況下一律傳送新通道的錯誤處理邏輯:
- 您的應用程式之前從未傳送通道給 Web 服務。
- 您的應用程式上次嘗試傳送通道給 Web 服務失敗。
對 createPushNotificationChannelForApplicationAsync 方法的不同呼叫不一定會傳回不同的通道。如果通道自從上次呼叫之後並未變更,您的應用程式應該不要將相同的通道重新傳送給您的服務,以保留效能和網際網路傳輸流量。應用程式可以同時擁有多個有效的通道 URI。因為每個唯一的通道在到期之前都會維持有效狀態,所以要求新通道並不會產生任何問題,因為這不會影響任何之前通道的到期時間。
透過在每次叫用應用程式時要求新通道,您始終可以存取有效通道的機會是最多的。如果保持動態的內容對您的磚或快顯通知案例來說是必要的,這一點就格外重要。如果考量到使用者使用應用程式的頻率可能每 30 天不會超過 1 次,您可以實作一個背景工作以定期執行您的通道要求碼。
處理通道要求中的錯誤
如果無法使用網際網路,對 createPushNotificationChannelForApplicationAsync 方法的呼叫會失敗。若要處理這個狀況,請在程式碼中新增重試邏輯,如步驟 2 所示。我們建議進行三次嘗試,每個不成功的嘗試之間要有 10 秒的延遲。如果三次嘗試都失敗,您的應用程式應該等到使用者下次啟動時再重試。
關閉通道
您的應用程式可以呼叫 close 方法來立即停止在所有通道上傳遞通知。雖然對於應用程式來說這麼做並不常見,但是在某些情況下您可能會想要停止對您應用程式的所有通知傳遞。例如,如果您的應用程式具有使用者帳戶的概念,則當使用者登出該應用程式時,預期磚不再顯示使用者的個人資訊就顯得相當合理。若要成功清除磚的內容並停止傳遞通知,您應該執行下列動作:
- 在正在傳遞磚、快顯通知、徽章或任何原始通知給使用者的通知通道上呼叫 PushNotificationChannel.close 方法,以停止所有的磚更新。呼叫 close 方法可確保不會繼續將該使用者的通知傳送到用戶端。
- 呼叫 TileUpdater.clear 方法將先前的使用者資料從磚移除,以清除磚的內容。