跳到主要内容

配置推送通知服务

推送通知服务用于向用户发送有关 RainMaker 的事件通知。在安卓和 iOS 中使用这一服务分别需要在通知设置中配置 FCM 和 APNS 环境。

在安卓中配置推送通知服务​

配置过程分为两步:需要在 Google Firebase 服务端以及安卓应用代码中进行配置。

Firebase 服务端配置​

  1. 为安卓应用配置推送通知服务,请参阅推送通知设置。

  2. 前往 Firebase 控制台,选择你的项目。在左侧导航栏中点击齿轮图标,然后选择 Project settings。

    firebase8

  3. 选择 Service accounts。在 Firebase Admin SDK 下,点击 Generate new private key。
    此操作将下载一个包含所有项目详细信息(包括私钥)的文件。

    firebase9

  4. 用管理员账号登录 RainMaker 管理面板。打开 Deployment Settings > Push Notifications。

    push_notification12

  5. 创建新的平台应用程序。选择类型为 Google Notification。

    push_notification13

  6. 将步骤 3 中下载的文件中的 Private Key 内容粘贴到此处。点击 Save。

    push_notification14

  7. 现在可以启用推送通知服务了,具体启用步骤请参阅启用通知推送。

安卓应用代码层面的配置​

  1. 安卓应用必须在 Firebase 中注册后,推送通知才能工作。如果尚未注册,可以按以下步骤注册。

  2. 点击 Download google-services.json 获取 Firebase 安卓配置文件 (google-services.json)。用下载好的文件替换应用中 app 模块 (应用级) 目录下现有的 google-services.json 文件。

    firebase10

  3. 其他设置保持不变。

    firebase11

  4. 继续进行推送通知配置。

Firebase 设置​

要继续配置,需要使用谷歌账号登录 Firebase 控制台。

创建 Firebase 项目​

  1. 在 Firebase 控制台中点击 Create a project,然后选择或输入 Project name。

    firebase1

    firebase2

    注意

    如果已有谷歌云项目,可以在下拉菜单中选择该项目,并将 Firebase 资源添加至该项目。

  2. (可选)如果你正在创建新项目,可以编辑 Project ID。如需使用特定标识符,必须在此设置步骤中修改项目 ID。Firebase 会自动为 Firebase 项目分配唯一 ID。

    注意

    在 Firebase 为项目配置完资源后,将无法再更改项目 ID。

  3. 点击 Continue。

    firebase3

  4. 点击 Create project(如果你使用现有的谷歌云项目,则点击 Add Firebase)。

    firebase4

    备注

    更多信息请参见 Firebase 网站上的创建 Firebase 项目。

在 Firebase 中注册应用​

要在安卓应用中使用 Firebase,必须先在 Firebase 项目中注册该应用。注册应用通常也称为将应用“添加”到项目。

备注

了解 Firebase 项目文档说明了在 Firebase 项目中添加应用的最佳实践与注意事项,包括如何处理多个构建变体。

  1. 前往 Firebase 控制台。

  2. 在 Project Overview 页面中央,点击安卓图标 (plat_android) 或 Add an app to get started,启动设置流程。

    firebase5

  3. 在 Android package name 字段输入应用包名 (application id)。点击 Register app。

    firebase6

    备注

    请确保输入应用实际使用的包名。包名应区分大小写,并且在此安卓应用注册到 Firebase 项目后将无法更改。

    备注

    更多信息请参见 Firebase 网站上的章节:在 Firebase 中注册您的应用。

在 iOS 中配置推送通知服务​

配置过程分为两步:需要在苹果开发者控制台以及 iOS 应用代码中进行配置。

苹果开发者控制台推送通知设置​

  1. 登录苹果开发者账号。

    push_notification1

  2. 启用此服务需要 App ID。若尚未创建,请前往苹果开发者控制台创建新账号,具体步骤请参阅在苹果开发者控制台创建应用 ID。

  3. 打开 Certificates 一栏,点击 +。

    push_notification2

  4. 为推送通知服务创建新的证书,请选择 Apple Push Notification service SSL (Sandbox & Production) 并点击 Continue。

    push_notification3

  5. 选择应用程序的 App ID 并点击 Continue。

    push_notification4

  6. 接下来需要创建证书签名请求 (CSR)。

    push_notification5

  7. 打开 Keychain Access 工具栏,选择 Certificate Assistant > Request a Certificate From a Certificate Authority。

    push_notification6

  8. 在 Certificate Assistant 对话框中,找到 User Email Address 一栏并输入电子邮件地址,CA Email Address 一栏无需填写。选择 Saved to disk 并点击 Continue 以保存证书。

    push_notification7

  9. 上传 CSR。

    push_notification8

  10. 证书已经成功创建,可以使用 Keychain Access 下载并查看。

    push_notification9

  11. 从 Keychain Access 导出证书,格式为 p12。

    push_notification10

    无需设置密码来保护导出的证书。

    push_notification16

  12. 启动通知推送需要使用 SSL 证书和对应的私钥。

    使用以下命令可获取 SSL 证书:

    openssl pkcs12 -in yourP12Certificate.p12 -clcerts -nokeys

    使用以下命令可获取私钥:

    openssl pkcs12 -in yourP12Certificate.p12 -nocerts -nodes

  13. 用管理员账号登录 RainMaker 管理面板。打开 Deployment Settings > Push Notifications。

    push_notification12

  14. 创建新的平台应用程序,选择类型为 Apple Notification (APNS)。

    push_notification13

  15. 将步骤 12 中获取的 SSL 证书和私钥粘贴至此处,点击 Save。

    push_notification11

    备注

    该证书也可用于沙盒和生产环境。沙盒环境用于测试通知和调试,APNS 用于分发。你可以重复步骤 13 和 14,选择类型为 APNS_SANDBOX (APNS_SANDBOX),为沙盒环境设置推送通知。

  16. 现在可以启用推送通知服务了,具体启用步骤请参阅启用通知推送。

在 ESP RainMaker 管理面板启用推送通知​

  1. 用管理员账号登录 RainMaker 管理面板。打开 Deployment Settings > Push Notifications。

    push_notification12

  2. 使用切换键启用推送通知。你可以自定义启用推送通知的事件。

    push_notification15

    备注

    使用同一个切换键也可以禁用推送通知功能。

iOS 应用代码层面的推送通知设置​

项目默认启用推送通知。ios/Notification/ESPNotificationModule.swift 中的 getNotificationPlatform() 方法应根据构建配置返回平台标识字符串:

  • 生产构建:返回 APNS 。
  • 开发/沙盒构建:返回 APNS_SANDBOX。

后端会使用该平台标识符识别通知的平台类型。该方法应检查构建配置(DEBUG 或 RELEASE),并返回相应的值:

@objc(getNotificationPlatform:reject:)
func getNotificationPlatform(resolve: @escaping RCTPromiseResolveBlock, reject: @escaping RCTPromiseRejectBlock) {
// 开发/沙盒构建 – 返回 APNS_SANDBOX
resolve("APNS_SANDBOX")
// 生产构建 – 返回 APNS
resolve("APNS")
}

On this page