Partager via


如何傳送已驗證的訊息到電話推播通知服務

英文原文已於 2012 年 6 月 5 日星期二發佈

推播通知服務是 Windows Phone 的一項酷炫功能,您可以傳送快顯通知訊息、更新 Windows Phone 應用程式的動態磚等。您不需其他任何其他傳輸安全性通訊協定即可使用此服務,但如此會讓每天的訊息上限為 500 封。但是,如果您對推播通知服務使用 SSL 設定相互驗證工作階段,就可以傳送不限次數的訊息。如此可讓使用者更有興趣保護自己的交談內容。但是,關於如何實際操作的文件資料幾乎很難找到。還好在 Windows Phone 應用程式中樞的社交論壇還挺不錯的,可以化零為整地讀遍這些資訊。為協助大家節省時間,不必找遍資料去收集資訊,我於此處將其彙整成一份簡單的文件。算是幫產品小組一個忙囉。:-) 步驟如下:

  1. 在下列網頁,您可以閱讀關於建立此安全通訊憑證的需求:https://msdn.microsoft.com/zh-tw/library/ff941099(VS.92).aspx (可能為英文網頁)。但有個簡單的方法,我發現如果您有支援的憑證授權單位所發出之 SSL 憑證,就可以順利運作。如需查看支援的憑證授權單位的清單,請參閱:https://msdn.microsoft.com/zh-tw/library/gg521150(VS.92).aspx (可能為英文網頁)
  2. 您必須使用此憑證並將其上傳至應用程式中樞。您不需要有私人金鑰的 PFX,只需要公開版本的憑證 (亦即 .cer 檔案) 即可。若要上傳,請先登入應用程式中樞,登入之後在左上方您的帳戶名稱上按一下滑鼠按鈕。進入帳戶管理頁面之後,您會在「我的帳戶」橫幅下看到一個稱為「證驗」的連結。在該連結上按一下,並依照指示上傳驗證。
  3. 您在 Windows Phone 應用程式中建立了 HttpNotificationChannel 類別執行個體。當您建立新的 HttpNotificationChannel 時,使用了 SSL 憑證的一般名稱 (CN) 做為新通道的第二個參數。在 .cer 檔案上按兩下開啟該檔案,即可找到憑證的一般名稱,請按一下 [詳細資料] 索引標籤,然後再按一下 [主旨] 內容。就可以看到下方視窗會列出各個值,而第一個值應會像 "CN = www.contoso.com";在此範例中,您只需要使用 "www.contoso.com"。那麼,當您建立新的通道後,看起來會像是:pushChannel = new HttpNotificationChannel("myChannelName", "www.contoso.com");
    1. 附註:如果您已經為不同的裝置建立通道,那麼就必須使用 HttpNotificationChannel.Find 找到您的通道,然後 .Close 及 .Dispose 此通道。之後您需要重新建立通道,才能將您的一般名稱與連線相關聯。
  4. 執行伺服器端程式碼時,您需要安裝此憑證,包括私人金鑰 (即 .pfx 檔案),還需要確定您的應用程式集區帳戶可以存取該憑證的私人金鑰。做法如下,開啟 MMC 工具並為本機電腦新增 [憑證] 嵌入式管理單元。將憑證安裝入 [個人] 節點後,請在 MMC 中的憑證上按一下滑鼠右鍵,然後選取 [所有工作...管理私密金鑰]。然後您需要為應用程式正在使用的應用程式集區新增帳戶,並為該金鑰至少授與「讀取」權限。
    1. 注意:如果您使用的是在 IIS 7.5 中新建立的帳號,例如 ApplicationPoolIdentity,就會需要授與 IIS apppool\ASP.NET v4.0 的存取權,在您的應用程式集區中名稱為 ASP.NET v4.0。
  5. 在您傳送訊息給推播通知服務的程式碼中,您必須新增憑證至 HttpWebRequest 物件。一般的做法是開啟 X509 存放區,取得「我的存放區」之憑證集合,此時您需要從憑證內容中複製憑證指紋並貼上該指紋,憑證該指紋即可在此集合中進行「尋找」,然後使用在集合中所傳回的第一個憑證 (亦即 myCollection[0])。在您取得憑證之後,便可如下列方式將其新增至您的要求:myRequest..ClientCertificates.Add(mySslCertificate);

其他的重要注意事項:

  • 所上傳的憑證使用期限只有四個月。如果應用程式的憑證並未提交至使用憑證的服務商場,就必須要再上傳一次。將應用程式的憑證提交至服務商場時,您有機會可以從已上傳的憑證清單中選取所需的憑證;請僅選取您為這些通訊以及所設定的通訊所上傳的憑證即可。
  • 如何能確定這樣就行了?當您在 Windows Phone 用戶端建立 HttpNotificationChannel 類別執行個體時,會收到傳送您訊息的通知通道 Uri。如果您並非使用經過驗證的連線,請查看此 Uri,您會在路徑上看到 "throttledthirdparty"。但是,如果您正確地建立了類別執行個體,則路徑會包含 "unthrottledthirdparty",此外所顯示的通訊協定會是 HTTPS 而不是 HTTP。而現在,若要真正確定它可以運作,在取回 Uri 之後,您必須能成功地傳送訊息。如果訊息可以成功送達您的裝置,那麼就可以知道沒問題了。

這是翻譯後的部落格文章。英文原文請參閱 How To Send An Authenticated Message to the Windows Phone Push Notification Service