发送通知

improve this page | report issue


概述

要将推送通知或 SMS 通知发送到 iOS、Android 或 Windows 设备,首先需要使用 FCM 详细信息(针对 Android)、APNS 证书(针对 iOS)或 WNS 凭证(针对 Windows 8.1 Universal/Windows 10 UWP)来配置 MobileFirst Server。 然后,可以将通知发送到:所有设备(广播)、已注册特定标记的设备、单个设备标识、用户标识、仅 iOS 设备、仅 Android 设备、仅 Windows 设备或基于已认证的用户。

先决条件:请确保已阅读过通知概述教程。

跳转至

设置通知

要启用通知支持,需要在 MobileFirst Server 和客户机应用程序中执行几个配置步骤。
继续了解服务器端设置,或者跳转至客户端设置

在服务器端,必要的设置包括:配置所需供应商(APNS、FCM 或 WNS)和映射“push.mobileclient”作用域。

Firebase 云消息传递

注:Google 具有不推荐的 GCM,并已将云消息传递与 Firebase 相集成。 如果您正在使用 GCM 项目,请确保将 Android 上的 GCM 客户机应用程序迁移到 FCM

Android 设备将 Firebase 云消息传递 (FCM) 服务用于推送通知。
要设置 FCM:

  1. 访问 Firebase Console
  2. 创建新项目并提供项目名称。
  3. 单击设置“齿轮”图标并选择项目设置
  4. 单击云消息传递选项卡以生成服务器 API 密钥发送方标识,然后单击保存

您还可以使用 MobileFirst 推送服务 REST APIMobileFirst 管理服务 REST API 来设置 FCM

如果贵组织的防火墙限制了与因特网之间的流量,那么必须执行以下步骤:

  • 将防火墙配置为允许与 FCM 的连接,以便 FCM 客户机应用程序能够接收消息。
  • 需要打开的端口包括 5228、5229 和 5230。 FCM 通常只使用 5228,但有时也会使用 5229 和 5230。
  • FCM 没有提供特定的 IP,因此您必须允许防火墙接受与 Google ASN 15169 中所列 IP 块中的所有 IP 地址的出站连接。
  • 确保防火墙接受端口 443 上从 MobileFirst Server 到 fcm.googleapis.com 的出站连接。

添加 GCM 凭证的图像

Apple 推送通知服务

iOS 设备将 Apple 推送通知服务 (APNS) 用于推送通知。
要设置 APNS:

  1. 为开发或生产环境生成推送通知证书。 有关详细步骤,请参阅此处针对 iOS 部分。
  2. 在 MobileFirst Operations Console → [您的应用程序] → 推送 → 推送设置中,选择证书类型并提供证书的文件和密码。 然后,单击保存

  • 要发送推送通知,必须可从 MobileFirst Server 实例访问以下服务器:
    • 沙箱服务器:
      • gateway.sandbox.push.apple.com:2195
      • feedback.sandbox.push.apple.com:2196
    • 生产服务器:
      • gateway.push.apple.com:2195
      • Feedback.push.apple.com:2196
      • 1-courier.push.apple.com 5223
  • 在开发阶段,使用 apns-certificate-sandbox.p12 沙箱证书文件。
  • 在生产阶段,使用 apns-certificate-production.p12 生产证书文件。
    • 只有在将利用 APNS 生产证书的应用程序成功提交到 Apple 应用商店后才能测试该证书。

注:MobileFirst 不支持 Universal 证书。

您还可以使用 MobileFirst 推送服务 REST APIMobileFirst 管理服务 REST API 来设置 APNS

添加 APNS 凭证的图像

Windows 推送通知服务

Windows 设备将 Windows 推送通知服务 (WNS) 用于推送通知。
要设置 WNS:

  1. 请遵循 Microsoft 提供的指示信息来生成包安全标识 (SID)客户机密钥值。
  2. 在 MobileFirst Operations Console → [您的应用程序] → 推送 → 推送设置中,添加这些值并单击保存

您还可以使用 MobileFirst 推送服务 REST APIMobileFirst 管理服务 REST API 来设置 WNS

添加 WNS 凭证的图像

SMS 通知服务

将使用以下 JSON 来设置用于发送 SMS 通知的 SMS 网关。 使用 smsConf REST API 以利用 SMS 网关配置来更新 MobileFirst Server

{
	"host": "2by0.com",
	"name": "dummy",
	"port": "80",
	"programName": "gateway/add.php",
	"parameters": [{
		"name": "xmlHttp",
		"value": "false",
		"encode": "true"
	}, {
		"name": "httpsEnabled",
		"value": "false",
		"encode": "true"
	}]

}

可在推送服务 API 参考中找到与 SMS 相关的更多 REST API

作用域映射

push.mobileclient 作用域元素映射到应用程序。

  1. 装入 MobileFirst Operations Console,然后导航至 [您的应用程序] → 安全性 → 作用域/元素映射,单击新建
  2. 作用域元素字段中写入“push.mobileclient”。 然后,单击添加

    作用域 描述
    apps.read 允许读取应用程序资源。
    apps.write 允许创建、更新或删除应用程序资源。
    gcmConf.read 允许读取 GCM 配置设置(API 密钥和发送方标识)。
    gcmConf.write 允许更新或删除 GCM 配置设置。
    apnsConf.read 允许读取 APNS 配置设置。
    apnsConf.write 允许更新或删除 APNS 配置设置。
    devices.read 允许读取设备。
    devices.write 允许创建、更新或删除设备。
    subscriptions.read 允许读取预订。
    subscriptions.write 允许创建、更新或删除预订。
    messages.write 允许发送推送通知。
    webhooks.read 允许读取事件通知。
    webhooks.write 允许发送事件通知。
    smsConf.read 允许读取 SMS 配置设置。
    smsConf.write 允许更新或删除 SMS 配置设置。
    wnsConf.read 允许读取 WNS 配置设置
    wnsConf.write 允许更新或删除 WNS 配置设置。

    作用域映射

已认证的通知

已认证的通知是发送到一个或多个用户标识的通知。

push.mobileclient 作用域元素映射到应用程序所使用的安全性检查。

  1. 装入 MobileFirst Operations Console,然后导航至 [您的应用程序] → 安全性 → 作用域/元素映射,然后单击新建或编辑现有作用域元素条目。
  2. 选择安全性检查。 然后,单击添加

    已认证的通知

定义标记

在 MobileFirst Operations Console → [您的应用程序] → 推送 → 标记中,单击新建
提供适当的标记名称描述,然后单击保存

添加标记

预订将设备注册与标记捆绑在一起。 当从标记中注销设备时,将从该设备自身自动取消预订所有相关的预订。 在一个设备有多个用户的情况下,在移动应用程序中应根据用户登录条件来实施预订。 例如,在用户成功登录到应用程序时发出预订调用,而在处理注销操作的过程中显式发出取消预订调用。

发送通知

可以从 MobileFirst Operations Console 或通过 REST API 发送推送通知。

  • 通过 MobileFirst Operations Console,可以发送以下两种类型的通知:标记通知和广播通知。
  • 通过 REST API,可以发送所有形式的通知:标记通知、广播通知和已认证的通知。

MobileFirst Operations Console

可以将通知发送到单个设备标识、一个或多个用户标识、仅 iOS 设备、仅 Android 设备或已预订标记的设备。

标记通知

标记通知是只将预订了特定标记的所有设备作为目标的通知消息。 标记表示用户感兴趣的主题,并且能够根据所选兴趣来接收通知。

在 MobileFirst Operations Console → [您的应用程序] → 推送 → 发送通知选项卡中,从发送到选项卡中选择按标记划分的设备,并提供通知文本。 然后,单击发送

按标记发送

广播通知

广播通知是标记推送通知的一种形式,其将所有预订设备作为目标。 任何支持推送的 MobileFirst 应用程序在缺省情况下都可通过预订保留的 Push.all 标记(为每个设备自动创建)来启用广播通知。 可以使用编程方式取消预订 Push.all 标记。

在 MobileFirst Operations Console → [您的应用程序] → 推送 → 发送通知选项卡中,从发送到选项卡中选择所有,并提供通知文本。 然后,单击发送

发送到所有

REST API

使用 REST API 发送通知时,可以发送所有形式的通知:标记通知、广播通知和已认证的通知。

要发送通知,可使用 POST 向 REST 端点发出请求:imfpush/v1/apps/<application-identifier>/messages
示例 URL:

https://myserver.com:443/imfpush/v1/apps/com.sample.PinCodeSwift/messages

要查看所有推送通知 REST API,请参阅用户文档中的 REST API 运行时服务主题。

通知有效内容

请求可以包含以下有效内容属性:

有效内容属性 定义
message 要发送的警报消息
settings 设置是通知的不同属性。
target 目标集可以是使用者标识、设备、平台或标记。 只可以设置目标之一。
deviceIds 设备标识表示的一组设备。 具有这些标识的设备将收到通知。 这是单点广播通知。
notificationType 表示用于发送消息的通道(推送/SMS)的整数值。 允许的值包括 1(仅推送)、2(仅 SMS)和 3(推送和 SMS)
platforms 一组设备平台。 运行在这些平台上的设备将收到通知。 受支持的值有 A (Apple/iOS)、G (Google/Android) 和 M (Microsoft/Windows)。
tagNames 指定为 tagNames 的一组标记。 预订这些标记的设备将收到通知。 对基于标记的通知使用此类型的目标。
userIds 通过 userIds 表示的一组要发送通知的用户。 这是单点广播通知。
phoneNumber 用于注册设备和接收通知的电话号码。 这是单点广播通知。

推送通知有效内容 JSON 示例

{
    "message" : {
    "alert" : "Test message",
  },
  "settings" : {
    "apns" : {
      "badge" : 1,
      "iosActionKey" : "Ok",
      "payload" : "",
      "sound" : "song.mp3",
      "type" : "SILENT",
    },
    "gcm" : {
      "delayWhileIdle" : ,
      "payload" : "",
      "sound" : "song.mp3",
      "timeToLive" : ,
    },
  },
  "target" : {
    // The list below is for demonstration purposes only - per the documentation only 1 target is allowed to be used at a time.
    "deviceIds" : [ "MyDeviceId1", ... ],
    "platforms" : [ "A,G", ... ],
    "tagNames" : [ "Gold", ... ],
    "userIds" : [ "MyUserId", ... ],
  },
}

SMS 通知有效内容 JSON 示例

{
  "message" : {
    "alert": "Hello World from an SMS message"
  },
  "notificationType":3,
   "target" : {
     "deviceIds" : ["38cc1c62-03bb-36d8-be8e-af165e671cf4"]
   }
}

发送通知

可使用不同的工具发送通知。
出于测试目的,将使用 Postman,如下所述:

  1. 配置保密客户机
    通过 REST API 发送推送通知时,将使用由空格分隔的作用域元素 messages.writepush.application.<applicationId>。

    配置保密客户机

  2. 创建访问令牌

  3. http://localhost:9080/imfpush/v1/apps/com.sample.PushNotificationsAndroid/messages 发出 POST 请求
    • 如果使用远程 MobileFirst,请将 hostnameport 值替换为您自己的值。
    • 使用您自己的值更新应用程序标识值。
  4. 设置头:
    • Authorization: Bearer eyJhbGciOiJSUzI1NiIsImp ...
    • 将“Bearer”后面的值替换为上述步骤 (1) 中的访问令牌值。

    authorization 头

  5. 设置主体:
    • 更新其属性,如上述通知有效内容中所述。
    • 例如,通过添加具有 userIds 属性 (attribute) 的 target 特性 (property),可以将通知发送到特定的注册用户。
    {
         "message" : {
             "alert" : "Hello World!"
         }
    }
    

    authorization 头

在单击发送按钮后,设备现在应该收到通知:

样本应用程序的图像

定制通知

在发送通知消息之前,您还可以定制以下通知属性。

在 MobileFirst Operations Console → [您的应用程序] → 推送 → 标记 → 发送通知选项卡中,展开iOS/Android 定制设置部分以更改通知属性。

Android

  • 通知声音、通知可在 FCM 存储器中存储的时间、定制有效内容等。
  • 如果您想要更改通知标题,请在 Android 项目的 strings.xml 文件中添加 push_notification_tile

iOS

  • 通知声音、定制有效内容、操作键标题、通知类型和角标数字。

定制推送通知

代理支持

可使用代理设置来设置可选代理,通知将通过此可选代理发送至 Android 和 iOS 设备。 可以使用 push.apns.proxy.push.gcm.proxy. 配置属性来设置代理。 有关更多信息,请参阅 MobileFirst Server 推送服务的 JNDI 属性列表

后续教程

现在,已设置好服务器端,将开始设置客户端并处理收到的通知。

Inclusive terminology note: The Mobile First Platform team is making changes to support the IBM® initiative to replace racially biased and other discriminatory language in our code and content with more inclusive language. While IBM values the use of inclusive language, terms that are outside of IBM's direct influence are sometimes required for the sake of maintaining user understanding. As other industry leaders join IBM in embracing the use of inclusive language, IBM will continue to update the documentation to reflect those changes.
Last modified on June 01, 2020