创建和发送推送通知

了解如何使用Experience PlatformMobile 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中的设置。
  • 从Assurance发送测试消息
  • 在Journey Optimizer中定义您自己的推送通知事件、历程和体验。
  • 从应用程序内发送您自己的推送通知。

设置

TIP
如果您已将环境设置为Journey Optimizer应用程序内消息传送课程的一部分,则您可能已执行了此设置部分中的某些步骤。

向APN注册应用程序ID

以下步骤并非特定于Adobe Experience Cloud,而是旨在引导您完成APN配置。

创建私钥

  1. 在Apple开发人员门户中,导航到​ 密钥

  2. 要创建密钥,请选择​ +
    创建新键

  3. 提供​ 密钥名称

  4. 选中​ Apple推送通知服务 (APN) ​复选框。

  5. 选择​ 继续
    配置新密钥

  6. 查看配置并选择​ 注册

  7. 下载.p8私钥。 在本课程的后面部分,它将在“应用程序表面”配置中使用。

  8. 记下​ 密钥ID。 它用在应用程序表面配置中。

  9. 记下​ 团队ID。 它用在应用程序表面配置中。
    键详细信息

其他文档可在此处找到。

在数据收集中添加应用程序表面

  1. 数据收集界面中,在左侧面板中选择​ 应用程序表面

  2. 要创建配置,请选择​ 创建应用程序表面
    应用表面主页

  3. 输入配置的​ 名称,例如Luma App Tutorial

  4. 从​ 移动设备应用程序配置 ​中,选择​ Apple iOS

  5. 在​ 应用程序ID (iOS捆绑包ID) ​字段中输入移动应用程序捆绑包ID。 例如,com.adobe.luma.tutorial.swiftui

  6. 打开​ 推送凭据 ​切换以添加凭据。

  7. 拖放您的.p8 Apple推送通知身份验证密钥 ​文件。

  8. 提供​ 密钥ID,在创建p8身份验证密钥期间分配的10字符字符串。 可在Apple开发人员门户页面的​ 证书、标识符和配置文件 ​页面的​ 密钥 ​选项卡下找到它。 另请参阅创建私钥

  9. 提供​ 团队ID。 团队ID是一个值,可以在​ 成员资格 ​选项卡下方或Apple开发人员门户页面顶部找到。 另请参阅创建私钥

  10. 选择​ 保存

    应用程序表面配置

更新数据流配置

要确保将从您的移动应用程序发送到Edge Network的数据转发到Journey Optimizer,请更新您的Experience Edge配置。

  1. 在数据收集UI中,选择​ 数据流,然后选择您的数据流,例如​ Luma Mobile App

  2. 为​ Experience Platform ​选择 更多 并从上下文菜单中选择 编辑 编辑

  3. 在​ 数据流 > 文件夹 > Adobe Experience Platform ​屏幕中:

    1. 如果尚未选择,请从​ 配置文件数据集 ​中选择​ AJO推送配置文件数据集。 使用MobileCore.setPushIdentifier API调用(请参阅注册推送通知的设备令牌)时需要此配置文件数据集,以确保将推送通知的唯一标识符(即推送标识符)存储为用户配置文件的一部分。

    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推送跟踪体验事件数据集 ​作为一个选项,请联系客户关怀团队。

使用Assurance验证设置

  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 ​选项卡并选择​ 目标 ​部分底部的​ + ​图标。

  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 ​和​ 时间戳)。 您可以使用下拉列表在​ SelectedAll ​和​ Primary ​之间切换,或者使用 Search 字段。

      • 已识别应用程序(ID)
      • 事件类型(eventType)
      • 主要(主要)

      编辑事件字段

      然后选择​ 确定

    5. 选择​ 事件ID条件 ​字段旁边的 编辑

      1. 在​ 添加事件ID条件 ​对话框中,将​ 事件类型(eventType) ​拖放到​ 将元素拖放到此处

      2. 在弹出窗口中,滚动到底部并选择​ application.test(这是您之前作为更新架构的一部分添加到事件类型列表中的事件类型)。 然后向上滚动到顶部并选择​ 确定

      3. 选择​ 确定 ​以保存条件。

        编辑事件条件

    6. 从​ 命名空间 ​列表中选择​ ECID (ECID)。 自动使用​ 映射identityMap ​的键ECID的第一个元素的ID填充​ 配置文件标识符 ​字段。

    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,将 Event LumaTestEvent ​拖放到画布上,其中显示​ 选择一个进入事件或读取受众活动

    • 在​ Events: 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 ​以发布并激活您的历程。
    已完成历程

触发推送通知

您已具备发送推送通知的所有要素。 剩下的问题是如何触发此推送通知。 实质上,它与您之前看到的相同:只需发送具有适当有效负载的体验事件(如Events中的)。

此时,您即将发送的体验事件未构建为简单的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。 此代码,这次还通过使用基于awaitasync的Swift并发模型,考虑到调用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 PlatformMobile SDK的Journey Optimizer和Journey Optimizer扩展为推送通知启用应用程序。
感谢您投入时间学习Adobe Experience Platform Mobile SDK。 如果您有疑问、希望共享一般反馈或有关于未来内容的建议,请在此Experience League社区讨论帖子上共享它们。

下一步: 创建并发送应用程序内消息

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