Share via


設定您的應用程式以接收目標式推播通知

您可以使用合作夥伴中心的推播通知頁面,將目標推播通知傳送至您安裝通用 Windows 平台 (UWP) 應用程式的裝置,直接與客戶互動。 例如,您可以使用目標推播通知來鼓勵您的客戶採取動作,例如為您的應用程式評等或嘗試新功能。 您可以傳送數種不同類型的推播通知,包括快顯通知、磚通知和原始 XML 通知。 您也可以追蹤推播通知所產生的應用程式啟動率。 如需此功能的詳細資訊,請參閱傳送推播通知給您應用程式的客戶

您必須先使用 Microsoft Store Services SDK 中的 StoreServicesEngagementManager 類別方法來註冊您的應用程式以接收通知,才能從合作夥伴中心將目標推播通知傳送給您的客戶。 您可以使用此類別的其他方法,通知合作夥伴中心您的應用程式已啟動,以回應目標推播通知 (如果您想要追蹤因通知產生的應用程式啟動率),以及停止接收通知。

設定專案

在您撰寫任何程序碼之前,請遵循下列步驟,在專案中新增 Microsoft Store Services SDK 的參考:

  1. 如果您尚未這麼做,請在開發電腦上安裝 Microsoft Store Services SDK
  2. 在 Visual Studio 中,開啟您的專案。
  3. 在 [方案總管] 中,以滑鼠右鍵按一下專案的 [參考] 節點,然後按一下 [加入參考]
  4. 在 [參考管理員] 中,展開 [通用 Windows],然後按一下 [延伸模組]
  5. 在 SDK 清單中,按一下 [Microsoft Engagement Framework] 旁的核取方塊,然後按一下 [確定]

註冊推播通知

若要註冊您的應用程式,以從合作夥伴中心接收目標推播通知:

  1. 在您的專案中,找出在啟動期間執行的程式碼區段,您可以在其中註冊應用程式以接收通知。

  2. 將以下陳述式新增至程式碼檔案頂端。

    using Microsoft.Services.Store.Engagement;
    
  3. 取得 StoreServicesEngagementManager 物件,並在您稍早識別的啟動程式碼中呼叫其中一個 RegisterNotificationChannelAsync 多載。 您的應用程式每次啟動時,都應該呼叫這個方法。

注意

當您呼叫 RegisterNotificationChannelAsync 方法時,會在應用程式的本機應用程式資料存放區中建立名為 MicrosoftStoreEngagementSDKId.txt 的檔案 (ApplicationData.LocalFolder 屬性傳回的資料夾)。 此檔案包含目標推播通知基礎結構所使用的識別碼。 請確定您的應用程式不會修改或刪除此檔案。 否則,您的使用者可能會收到多個通知例項,或是通知可能無法以其他方式正常運作。

目標推播通知如何路由傳送給客戶

當您的應用程式呼叫 RegisterNotificationChannelAsync 時,此方法會收集目前登入裝置之客戶的 Microsoft 帳戶。 稍後,當您將目標推播通知傳送至包含此客戶的區段時,合作夥伴中心會將通知傳送至與此客戶之 Microsoft 帳戶相關聯的裝置。

如果啟動您的應用程式的客戶將裝置提供給其他人使用時仍以其 Microsoft 帳戶登入該裝置,請注意,其他人可能會看到以原始客戶為目標的通知。 這可能會產生非預期的後果,特別是對提供客戶可登入使用之服務的應用程式。 若要防止其他使用者在本例中看到您的目標通知,請在客戶登出應用程式時呼叫 UnregisterNotificationChannelAsync 方法。 如需詳細資訊,請參閱本文稍後的取消註冊推播通知

您的應用程式如何在使用者啟動您的應用程式時回應

註冊您的應用程式以接收通知,並從合作夥伴中心將推播通知傳送給應用程式的客戶之後,當使用者啟動您的應用程式以回應您的推播通知時,將會呼叫您應用程式中下列其中一個進入點。 如果您有一些要在使用者啟動應用程式時執行的程式碼,您可以將程式碼新增至應用程式中的其中一個進入點。

  • 如果推播通知具有前景啟用類型,請在專案中覆寫 App 類別的 OnActivated 方法,並將程式碼新增至此方法。

  • 如果推播通知具有背景啟用類型,請將您的程式碼新增至背景工作Run 方法。

例如,您可能想要獎勵在應用程式中購買任何付費附加元件的應用程式使用者,而授與他們免費的附加元件。 在此情況下,您可以將推播通知傳送給以這些使用者為目標的客戶區段。 然後,您可以在上面所列的其中一個進入點中,新增程式碼來授與他們免費的應用程序內購買

向合作夥伴中心通知您的應用程式啟動

如果您在合作夥伴中心為目標推播通知選取 [追蹤應用程式啟動率] 選項,請從應用程式的適當進入點呼叫 ParseArgumentsAndTrackAppLaunch 方法,以通知合作夥伴中心您的應用程式已啟動以回應推播通知。

這個方法也會傳回您應用程式的原始啟動引數。 當您選擇追蹤推播通知的應用程式啟動率時,會將不透明的追蹤 ID 元新增至啟動引數,以協助追蹤合作夥伴中心的應用程式啟動。 您必須將應用程式的啟動引傳遞至 ParseArgumentsAndTrackAppLaunch 方法,而且此方法會將追蹤 ID 傳送至合作夥伴中心、從啟動引數中移除追蹤 ID,並將原始啟動引數傳回至您的程式碼。

呼叫此方法的方式取決於推播通知的啟用類型:

  • 如果推播通知具有前景啟用類型,請從您應用程式中的 OnActivated 方法覆寫呼叫此方法,並在傳遞至此方法的 ToastNotificationActivatedEventArgs 物件中傳遞可用的引數。 下列程式碼範例假設您的程式碼檔案具有 Microsoft.Services.Store.EngagementWindows.ApplicationModel.Activation 命名空間的 using 陳述式。

    protected override void OnActivated(IActivatedEventArgs args)
    {
        base.OnActivated(args);
    
        if (args is ToastNotificationActivatedEventArgs)
        {
            var toastActivationArgs = args as ToastNotificationActivatedEventArgs;
    
            StoreServicesEngagementManager engagementManager = StoreServicesEngagementManager.GetDefault();
            string originalArgs = engagementManager.ParseArgumentsAndTrackAppLaunch(
                toastActivationArgs.Argument);
    
            // Use the originalArgs variable to access the original arguments
            // that were passed to the app.
        }
    }
    
  • 如果推播通知具有背景啟用類型,請從背景工作Run 方法呼叫此方法,並在傳遞至此方法的 ToastNotificationActionTriggerDetail 物件中傳遞可用的引數。 下列程式碼範例假設您的程式碼檔案具有 Microsoft.Services.Store.EngagementWindows.ApplicationModel.BackgroundWindows.UI.Notifications 命名空間的 using 陳述式。

    public void Run(IBackgroundTaskInstance taskInstance)
    {
        var details = taskInstance.TriggerDetails as ToastNotificationActionTriggerDetail;
    
        if (details != null)
        {
            StoreServicesEngagementManager engagementManager = StoreServicesEngagementManager.GetDefault();
            string originalArgs = engagementManager.ParseArgumentsAndTrackAppLaunch(details.Argument);
    
            // Use the originalArgs variable to access the original arguments
            // that were passed to the app.
        }
    }
    

取消註冊推播通知

如果您想要讓應用程式停止從合作夥伴中心接收目標推播通知,請呼叫 UnregisterNotificationChannelAsync 方法。

StoreServicesEngagementManager engagementManager = StoreServicesEngagementManager.GetDefault();
await engagementManager.UnregisterNotificationChannelAsync();

請注意,此方法會使用於通知的通道失效,讓應用程式不再收到來自「任何」服務的推播通知。 關閉之後,通道就無法再用於任何服務,包括來自合作夥伴中心的目標推播通知,以及其他使用 WNS 的通知。 若要繼續將推播通知傳送至此應用程式,應用程式必須要求新的通道。