建立和傳送推播通知

瞭解如何使用Experience Platform Mobile SDK和Journey Optimizer為行動應用程式建立推播通知。

Journey Optimizer可讓您建立歷程,並傳送訊息給目標對象。 在使用Journey Optimizer傳送推播通知之前,您必須確保有適當的設定和整合。 若要瞭解Journey Optimizer中的推播通知資料流程,請參閱檔案

架構

NOTE
本課程為選修課程,僅適用於想要傳送推播通知的Journey Optimizer使用者。

先決條件

  • 成功建立並執行應用程式,且已安裝並設定SDK。

  • 為Adobe Experience Platform設定應用程式。

  • 此處所述,存取Journey Optimizer和足夠的許可權。 此外,您需要足夠的許可權才能使用下列Journey Optimizer功能。

    • 建立應用程式表面。
    • 建立歷程。
    • 建立訊息。
    • 建立訊息預設集。
  • 付費Apple開發人員帳戶,有足夠的存取許可權來建立憑證、識別碼和金鑰。

  • 實體iOS裝置或模擬器以進行測試。

學習目標

在本課程中,您將學習

  • 向Apple推播通知服務(APN)註冊應用程式ID。
  • 在Journey Optimizer中建立應用程式表面。
  • 更新您的結構描述以包含推送訊息欄位。
  • 安裝及設定Journey Optimizer標籤擴充功能。
  • 更新您的應用程式以註冊Journey Optimizer標籤擴充功能。
  • 驗證Assurance中的設定。
  • 從保證傳送測試訊息
  • 在Journey Optimizer中定義您自己的推播通知事件、歷程和體驗。
  • 從應用程式內傳送您自己的推播通知。

設定

TIP
如果您已經在Journey Optimizer應用程式內傳訊課程中設定環境,您可能已經執行此設定區段中的某些步驟。

向APN註冊應用程式ID

下列步驟並非特定於Adobe Experience Cloud,而是旨在引導您完成APN設定。

建立私密金鑰

  1. 在Apple開發人員入口網站中,瀏覽至​ 金鑰

  2. 若要建立金鑰,請選取​ +
    建立新金鑰

  3. 提供​ 金鑰名稱

  4. 選取​ Apple推播通知服務 (APN) ​核取方塊。

  5. 選取​ 繼續
    設定新金鑰

  6. 檢閱組態並選取​ 註冊

  7. 下載.p8私密金鑰。 本課程稍後將用於App Surface設定。

  8. 記下​ 金鑰識別碼。 它用於App Surface設定。

  9. 記下​ 團隊識別碼。 它用於App Surface設定。
    金鑰詳細資料

其他檔案可在此處找到。

在資料收集中新增應用程式表面

  1. 資料收集介面,選取左側面板中的​ 應用程式介面

  2. 若要建立設定,請選取​ 建立應用程式表面
    應用程式表面首頁

  3. 輸入組態的​ 名稱,例如Luma App Tutorial

  4. 從​ 行動應用程式設定,選取​ Apple iOS

  5. 在​ 應用程式套件ID (iOS套件ID) ​欄位中輸入行動應用程式套件ID。 例如,com.adobe.luma.tutorial.swiftui

  6. 開啟​ 推送認證 ​切換以新增您的認證。

  7. 拖放您的.p8 Apple推播通知驗證金鑰 ​檔案。

  8. 提供​ 金鑰識別碼,在建立p8驗證金鑰期間指派的10字元字串。 您可以在Apple開發人員入口網站頁面的​ 憑證、識別碼和設定檔 ​頁面的​ 金鑰 ​標籤下找到它。 另請參閱建立私密金鑰

  9. 提供​ 團隊識別碼。 可以在​ 成員資格 ​標籤下或Apple開發人員入口網站頁面頂端找到團隊ID的值。 另請參閱建立私密金鑰

  10. 選取「儲存」。

    應用程式表面設定

更新資料流設定

為確保將從您的行動應用程式傳送至Edge Network的資料轉送至Journey Optimizer,請更新您的Experience Edge設定。

  1. 在資料收集UI中,選取​ 資料串流,然後選取您的資料串流,例如​ Luma Mobile App

  2. 選取​ Experience Platform ​的 更多 ,並從內容功能表選取 編輯 編輯

  3. 在​ 資料串流 > 資料夾 > Adobe Experience Platform ​畫面中:

    1. 如果尚未選取,請從​ 設定檔資料集 ​中選取​ AJO推播設定檔資料集。 使用MobileCore.setPushIdentifier API呼叫時需要此設定檔資料集(請參閱註冊推播通知的裝置Token),以確保推播通知的唯一識別碼(亦即推播識別碼)會儲存為使用者設定檔的一部分。

    2. 已選取​ Adobe Journey Optimizer。 如需詳細資訊,請參閱Adobe Experience Platform設定

    3. 若要儲存您的資料流組態,請選取​ 儲存

    AEP資料流組態

安裝Journey Optimizer標籤擴充功能

若要讓應用程式與Journey Optimizer搭配使用,您必須更新標籤屬性。

  1. 導覽至​ 標籤 > 擴充功能 > 目錄

  2. 開啟您的屬性,例如​ Luma Mobile App Tutorial

  3. 選取​ 目錄

  4. 搜尋​ Adobe Journey Optimizer ​擴充功能。

  5. 安裝擴充功能。

  6. 在​ 安裝擴充功能 ​對話方塊中

    1. 選取環境,例如​ 開發

    2. 從​ 事件資料集 ​清單中選取​ AJO推播追蹤體驗事件資料集 ​資料集。

    3. 選取​ 儲存至程式庫並建置

      AJO擴充功能設定

NOTE
如果您沒有看到​ AJO推播追蹤體驗事件資料集 ​選項,請聯絡客戶服務。

使用保證驗證設定

  1. 檢閱設定指示區段,將您的模擬器或裝置連線到Assurance。

  2. 在Assurance UI中,選取​ 設定
    設定click

  3. 選取​ 推送偵錯 ​旁的 加號

  4. 選取「儲存」。
    儲存

  5. 從左側導覽中選取​ 推播偵錯

  6. 選取「驗證安裝程式」標籤。

  7. 從​ 使用者端 ​清單中選取您的裝置。

  8. 確認您沒有收到任何錯誤。
    驗證

  9. 選取​ 傳送測試推播 ​索引標籤。

  10. (選擇性)變更​ 標題 ​和​ 內文 ​的預設詳細資料

  11. 選取 錯誤 傳送測試推播通知

  12. 檢查​ 測試結果

  13. 您應該會看到測試推播通知出現在應用程式中。

    {width="300"}

簽署

需要簽署Luma應用程式才能傳送推播通知,而且​ 需要付費的Apple開發人員帳戶

若要更新應用程式的簽署:

  1. 前往Xcode中的應用程式。

  2. 在專案導覽器中選取​ Luma

  3. 選取​ Luma ​目標。

  4. 選取「簽署與功能」標籤。

  5. 設定​ 自動管理簽署團隊 ​和​ 套件組合識別碼,或使用您特定的Apple開發佈建詳細資料。

    note important
    IMPORTANT
    請確定您使用​_唯一_​組合識別碼並取代com.adobe.luma.tutorial.swiftui組合識別碼,因為每個組合識別碼必須是唯一的。 一般而言,您會使用反向DNS格式作為套件組合ID字串,例如com.organization.brand.uniqueidentifier。 例如,此教學課程的完成版本使用com.adobe.luma.tutorial.swiftui

    Xcode簽署功能 {modal="regular"}

將推播通知功能新增至您的應用程式

IMPORTANT
若要在iOS應用程式中實作與測試推播通知,您必須擁有​ 付費 Apple開發人員帳戶。 如果您沒有付費的Apple開發人員帳戶,可以略過本課程的其餘部分。
  1. 在Xcode中,從​ TARGETS ​清單中選取​ Luma,選取​ 簽署與功能 ​標籤,選取​ +功能 ​按鈕,然後選取​ 推播通知。 這可讓您的應用程式接收推播通知。

  2. 接下來,您必須將通知擴充功能新增至應用程式。 返回​ General ​標籤,並選取​ TARGETS ​區段底部的​ + ​圖示。

  3. 系統會提示您為新目標選取範本。 選取​ 通知服務延伸模組,然後選取​ 下一步

  4. 在下一個視窗中,使用NotificationExtension作為擴充功能的名稱,然後按一下​ 完成 ​按鈕。

現在,您應該會在應用程式中新增推播通知擴充功能,類似於下列畫面。

Pusn通知延伸

在應用程式中實作Journey Optimizer

如先前課程所述,安裝行動標籤擴充功能僅會提供設定。 接下來,您必須安裝並註冊傳訊SDK。 如果未清除這些步驟,請檢閱安裝SDK區段。

NOTE
如果您已完成安裝SDK區段,則表示已安裝SDK,您可以略過此步驟。
  1. 在Xcode中,請確定已將AEP訊息新增至封裝相依性中的封裝清單。 請參閱Swift封裝管理員

  2. 導覽至Xcode專案導覽器中的​ Luma > Luma > AppDelegate

  3. 請確定AEPMessaging是匯入清單的一部分。

    import AEPMessaging

  4. 請確定Messaging.self是您註冊的擴充功能陣列的一部分。

    code language-swift
    let extensions = [
        AEPIdentity.Identity.self,
        Lifecycle.self,
        Signal.self,
        Edge.self,
        AEPEdgeIdentity.Identity.self,
        Consent.self,
        UserProfile.self,
        Places.self,
        Messaging.self,
        Optimize.self,
        Assurance.self
    ]
    

註冊推播通知的裝置代號

  1. MobileCore.setPushIdentifier API新增至func application(_ application: UIApplication, didRegisterForRemoteNotificationsWithDeviceToken deviceToken: Data)函式。

    code language-swift
    // Send push token to Mobile SDK
    MobileCore.setPushIdentifier(deviceToken)
    

    此函式擷取安裝應用程式的裝置所獨有的裝置代號。 然後使用您已設定的設定來設定推播通知傳送的代號,該設定依賴Apple的推播通知服務(APN)。

IMPORTANT
MobileCore.updateConfigurationWith(configDict: ["messaging.useSandbox": true])決定推播通知是使用APNs沙箱或生產伺服器來傳送推播通知。 在模擬器或裝置上測試您的應用程式時,請確定messaging.useSandbox設為true以便您接收推播通知。 使用Apple的Testflight部署應用程式以進行生產測試時,請確定您將messaging.useSandbox設為false,否則您的生產應用程式將無法接收推播通知。

建立您自己的推播通知

若要建立自己的推播通知,您必須在Journey Optimizer中定義觸發歷程的事件,負責傳送推播通知。

更新您的結構描述

您即將定義新的事件型別,目前無法當作結構描述中定義之事件清單的一部分使用。 您稍後在觸發推播通知時會使用此事件型別。

  1. 在Journey Optimizer UI中,從左側邊欄選取​ 結構描述

  2. 在索引標籤列中選取​ 瀏覽

  3. 選取您的結構描述,例如​ Luma Mobile App Event Schema ​以開啟它。

  4. 在架構編輯器中:

    1. 選取​ eventType ​欄位。

    2. 在​ 欄位屬性 ​窗格中,向下捲動以檢視事件型別的可能值清單。 選取​ 新增列,並將application.test新增為​ VALUE,並將Test event for push notification新增為DISPLAY NAME

    3. 選取​ 「套用」

    4. 選取「儲存」。

      新增值至事件型別

定義事件

Journey Optimizer中的事件可讓您統一觸發歷程以傳送訊息,例如推播通知。 如需詳細資訊,請參閱關於事件

  1. 在Journey Optimizer UI中,從左側邊欄選取​ 組態

  2. 在​ 儀表板 ​畫面中,選取​ 事件 ​方塊中的​ 管理 ​按鈕。

  3. 在​ 事件 ​畫面中,選取​ 建立事件

  4. 在​ 編輯事件event1 ​窗格中:

    1. 輸入LumaTestEvent作為事件的​ Name

    2. 提供​ 描述,例如Test event to trigger push notifications in Luma app

    3. 選取您先前在從​ 結構描述 ​清單建立XDM結構描述中建立的行動應用程式體驗事件結構描述,例如​ Luma Mobile App Event Schema v.1

    4. 選取​ 欄位 ​清單旁的 編輯

      編輯事件步驟1

      在​ 欄位 ​對話方塊中,確定已選取下列欄位(在永遠選取的預設欄位之上(_idid ​和​ timestamp)。 您可以使用下拉式清單在​ 已選取全部 ​與​ 主要 ​之間切換,或使用 搜尋 欄位。

      • 識別的應用程式(識別碼)
      • 事件型別(eventType)
      • 主要(主要)

      編輯事件欄位

      然後選取​ 確定

    5. 選取​ 事件識別碼條件 ​欄位旁的 編輯

      1. 在​ 新增事件識別碼條件 ​對話方塊中,將​ 事件型別(eventType) ​拖放到​ 將元素拖放到這裡

      2. 在彈出視窗中,捲動到底部並選取​ application.test (這是您先前新增至事件型別清單的事件型別,作為更新您的結構描述的一部分)。 然後向上捲動到頂端並選取​ 確定

      3. 選取​ 確定 ​以儲存條件。

        編輯事件條件

    6. 從​ 名稱空間 ​清單中選取​ ECID (ECID)設定檔識別碼 ​欄位自動填入對應identityMap 之索引鍵ECID的第一個專案識別碼

    7. 選取「儲存」。

      編輯事件步驟2

您剛才已根據您先前在本教學課程中建立的行動應用程式體驗事件結構描述建立事件設定。 此事件設定將會使用您的特定事件型別(application.test)篩選傳入的體驗事件,因此只有從該行動應用程式起始的特定型別事件,才會觸發您在下一個步驟中建立的歷程。 在真實情境中,您可能會想要從外部服務傳送推播通知,但相同的概念適用:從外部應用程式傳送體驗事件至Experience Platform,該事件具有您可在這些事件觸發歷程之前用來套用條件的特定欄位。

建立歷程

您的下一個步驟是建立歷程,在收到適當事件時觸發推播通知的傳送。

  1. 在Journey Optimizer UI中,從左側邊欄選取​ 歷程

  2. 選取​ 建立歷程

  3. 在​ 歷程屬性 ​面板中:

    1. 輸入歷程的​ 名稱,例如Luma - Test Push Notification Journey

    2. 輸入歷程的​ 描述,例如Journey for test push notifications in Luma mobile app

    3. 請確定已選取​ 允許重新進入,並將​ 重新進入等待期間 ​設定為​ 30

    4. 選取​ 確定

      歷程屬性

  4. 回到歷程畫布,從​ EVENTS,將 事件 LumaTestEvent ​拖放到畫布上,其中顯示​ 選取進入事件或讀取對象活動

    • 在​ 事件: LumaTestEvent ​面板中,輸入​ 標籤,例如Luma Test Event
  5. 從​ ACTIONS ​下拉式清單中,將 推播 推播 ​拖放到顯示於您​ LumaTestEvent ​活動右側的 新增 上。 在​ 動作:推播 ​窗格中:

    1. 提供​ 標籤,例如Luma Test Push Notification,提供​ 描述,例如Test push notification for Luma mobile app,從​ 類別 ​清單中選取​ 異動,並從​ 推播表面 ​中選取​ Luma

    2. 選取 編輯 編輯內容 ​以開始編輯實際的推播通知。

      推送屬性

      在​ 推播通知 ​編輯器中:

      1. 輸入​ 標題,例如Luma Test Push Notification,並輸入​ 內文,例如Test push notification for Luma mobile app

      2. 您可以選擇在​ 新增媒體 ​中輸入影像(.png或.jpg)的連結。 如果這樣做,影像將成為推播通知的一部分。

      3. 若要儲存並離開編輯器,請選取 左V形

        推播編輯器

    3. 若要儲存並完成推播通知定義,請選取​ 確定

  6. 您的歷程應如下所示。 選取​ Publish ​以發佈並啟用您的歷程。
    已完成歷程

觸發推播通知

您已具備傳送推播通知的所有要素。 剩下的問題是如何觸發此推播通知。 實質上,與您之前看到的一樣:只要傳送具有適當有效負載的體驗事件(如事件)即可。

此時,您即將傳送的體驗事件未建構為建構簡單的XDM字典。 您即將使用代表推播通知裝載的struct。 定義專用資料型別是在應用程式中實作建構體驗事件裝載的替代方式。

  1. 導覽至Xcode專案導覽器中的​ Luma > Luma > 模型 > XDM > TestPushPayload,並檢查程式碼。

    code language-swift
    import Foundation
    
    // MARK: - TestPush
    struct TestPushPayload: Codable {
       let application: Application
       let eventType: String
    }
    
    // MARK: - Application
    struct Application: Codable {
       let id: String
    }
    

    程式碼可呈現您要傳送以觸發測試推播通知歷程的下列簡單裝載

    code language-json
    {
       "eventType": string,
       "application" : [
           "id": string
       ]
    }
    
  2. 導覽至Xcode專案導覽器中的​ Luma > Luma > Utils > MobileSDK,並將下列程式碼新增至func sendTestPushEvent(applicationId: String, eventType: String)

    code language-swift
    // Create payload and send experience event
    Task {
        let testPushPayload = TestPushPayload(
            application: Application(
                id: applicationId
            ),
            eventType: eventType
        )
        // send the final experience event
        await sendExperienceEvent(
            xdm: testPushPayload.asDictionary() ?? [:]
        )
    }
    

    此程式碼會使用提供給函式(applicationIdeventType)的引數建立testPushPayload執行個體,然後在將裝載轉換至字典時呼叫sendExperienceEvent。 這次的程式碼也考慮使用Swift根據awaitasync的並行模型呼叫Adobe Experience Platform SDK的非同步方面。

  3. 導覽至Xcode專案導覽器中的​ Luma > Luma > Views > General > ConfigView。 在推播通知按鈕定義中,新增下列程式碼,以傳送測試推播通知體驗事件裝載,以便在點選按鈕時觸發您的歷程。

    code language-swift
    // Setting parameters and calling function to send push notification
    Task {
        let eventType = testPushEventType
        let applicationId = Bundle.main.bundleIdentifier ?? "No bundle id found"
        await MobileSDK.shared.sendTestPushEvent(applicationId: applicationId, eventType: eventType)
    }
    

使用您的應用程式進行驗證

  1. 使用 Play ,在模擬器中或在Xcode的實體裝置上重建並執行應用程式。

  2. 前往​ 設定 ​標籤。

  3. 點選​ 推播通知。 您會看到推播通知出現在應用程式中。

    {width="300"}

後續步驟

您現在應該擁有在應用程式中處理推播通知的所有工具。 例如,您可以在Journey Optimizer中建立歷程,在應用程式的使用者登入時傳送歡迎推播通知。 或使用者在應用程式中購買產品時的確認推播通知。 或輸入地點的地理柵欄(如您在地點課程中所見)。

SUCCESS
您現在已針對Experience Platform Mobile SDK使用Journey Optimizer和Journey Optimizer擴充功能啟用推播通知應用程式。
感謝您花時間學習Adobe Experience Platform Mobile SDK。 如果您有疑問、想分享一般意見或有關於未來內容的建議,請在這篇Experience League社群討論貼文上分享。

下一步: 建立並傳送應用程式內訊息

recommendation-more-help
9fed61f5-c338-47ad-8005-0b89a5f4af8b