使用 Event Notifications 创建推送通知并将其发送到 iOS 移动
创建 Event Notifications 服务,为 Apple 推送通知服务 (APN) 添加推送目标,并将消息发送到 iOS 设备。
什么是 Event Notifications?
Event Notifications 是事件通知路由服务,用于通知您 IBM Cloud 帐户中发生的关键事件,或者通过使用 Webhook 来触发自动化操作。 您可以将事件通知从 IBM Cloud 服务 (例如 Availability Monitoring) 过滤和路由到电子邮件,SMS,推送通知 (FCM 或 APN) 和 Webhook。
客户机如何使用 iOS 推送通知?
下图显示客户机如何使用 iOS 推送通知。
目标
本教程向您展示了如何发送推送通知,如下所示:
- 使用 Event Notifications创建移动应用程序。
- 获取 APN 凭证。
- 下载代码并完成通知设置。
- 配置 iOS Push Notifications 并将其发送到移动设备。
准备工作
您必须满足以下先决条件:
- IBM Cloud 帐户。 如果您没有帐户,请 创建 IBM Cloud 帐户。
- Event Notifications 实例。
- IAM API 密钥,用于允许 SDK 访问您的帐户。 在 此处创建一个。
- Xcode 9.3+
- Swift 4.2+
- iOS 10.0+
创建 Event Notifications 服务实例
- 登录到 IBM Cloud 帐户。
- 在 IBM Cloud 目录 中,搜索
Event Notifications > Event Notifications
。 - 从受支持区域列表中选择
Region
,然后选择pricing plan
。 - 提供
Service name
。 - 选择
resource group
。 - 通过单击复选框来接受许可协议和条款。
- 单击
Create
。
获取 APN 凭证
对于 iOS 设备和应用程序,Apple 推送通知服务 (APNs) 允许应用程序开发者从 Event Notifications 上的 IBM Cloud 服务实例(提供者)将远程通知发送到 iOS 设备和应用程序。 消息会发送到设备上的目标应用程序。
您需要获取并配置 APNs 凭证。 APNs 证书由 Event Notifications 服务安全地进行管理,并用于连接到 APNs 服务器(提供者)。
注册应用程序标识
应用程序标识(捆绑标识)是用于标识特定应用程序的唯一标识。 每个应用程序都需要应用程序标识。 类似“推送通知”服务的服务配置为 App ID。
-
转至 Apple 开发者门户网站,然后选择 证书,标识和概要文件。
图 2。 证书,标识和概要文件 -
转至
Identifiers > Add identifier button
。
-
单击“添加新
Identifier
”按钮。
-
选择“应用程序标识”选项。

-
选择类型,然后单击
Continue
。图 6。 App ID 类型 -
为 App ID Prefix 提供字符串。 在
Description
字段中提供应用程序名称。 例如,Event Notifications iOS 应用程序。 -
对于
Bundle ID
,选择 显式 并提供捆绑软件标识值。 建议提供逆向域名样式的字符串。 例如,com.ibm.cloud.en.app
。图 7。 创建新的 App ID 详细信息 -
从“功能”中选择
Push Notifications
复选框,然后单击Continue
。图 8。 启用推送通知 -
完成设置,然后单击
Register > Done
。
现在,您的应用程序标识已注册。

创建开发和分发 APNs SSL 证书
在获取 APNs 证书之前,必须首先生成一个证书签名请求 (CSR),然后将其提交给 Apple(认证中心 (CA))。 CSR 中包含您公司的标识信息,以及您用于签署 Apple 推送通知的公用密钥和专用密钥信息。 然后,在 iOS 开发者门户网站上生成 SSL 证书。 该证书与其公用密钥和专用密钥一起存储在“钥匙串访问”中。
您可以在两种模式下使用 APNs:
- 沙箱模式,用于开发和测试。
- 生产模式,用于通过 App Store(或其他企业分发机制)分发应用程序。
必须分别针对开发环境和分发环境获取不同的证书。 证书与接收远程通知的应用程序的应用程序标识相关联。 对于生产,您最多可以创建两个证书。IBM Cloud 使用证书与 APN 建立 SSL 连接。
创建 APN p12 证书
-
转至 Apple 开发者门户网站,然后选择“证书”,“标识”和“概要文件”。
图 10. 证书,标识和概要文件 -
在
Identifiers area
中,选择 App ID。
-
选择
Push Notifications
复选框或选择Edit
选项。图 12. 推送通知复选框 - 在 "开发 SSL 证书" 窗格上,单击 " 创建证书 ...
- 在 "生产 SSL 证书" 窗格上,单击 " 创建证书 ...
图 13. 证书类型 -
在 Mac 上使用“密钥链访问”应用程序来创建证书签名请求 (CSR)。
-
从菜单中,选择
Keychain Access > Certificate Assistant > Request a Certificate From a Certificate Authority…
。图 14. 请求新的证书类型 -
在“证书信息”中,输入与应用程序开发者帐户关联的电子邮件地址和公共名称。 提供有意义的名称来帮助您识别此为开发(沙箱)证书还是分发(生产)证书;例如,sandbox_apns_certificate 或 production_apns_certificate。
-
选择
Saved to disk
以将.certSigningRequest
文件下载到 Mac,然后单击Continue
。图 15. 证书详细信息 -
在
Save As
菜单选项中,命名.certSigningRequest
文件,选择必须保存该文件的位置,然后单击Save
。图 16. 保存 CSR 文件 -
单击
Done
。 您现在就有一个 CSR 了。图 17. CSR 已创建 -
返回到 Apple 开发者门户网站,对于“上载 CSR 文件”选项,单击“选择文件”,然后选择文件
CertificateSigningRequest.certSigningRequest
。 单击Continue
。图 18. 上载 CSR 文件 -
单击
Download
。 这将下载aps_development.cer
文件。图 19. 下载证书 -
找到新安装的证书。 双击该证书,以将其安装到“密钥链访问”中。
-
在 Mac 上,转至
Keychain Access > My Certificates
。 -
选择证书和专用密钥,然后选择
Export
以将证书转换为个人信息交换格式 (.p12
格式)。图 20. 导出证书 -
在
Save As
字段中,为证书提供有意义的名称。 例如,sandbox-apns.p12 或 production-apns.p12,然后单击Save
。图 21. 保存证书 -
在
Enter a password
字段中,输入密码以保护导出的项,然后单击OK
。 您可以使用此密码在 Event Notifications 服务控制台上配置 APNs 设置。图 22. 保护证书 -
“密钥访问”应用程序提示您从“密钥链”屏幕导出密钥。 输入 Mac 的管理密码以允许系统导出这些项,然后选择“始终允许”选项。 将在所选位置生成 .p12 证书。
创建 APN p8 令牌
-
转至 Apple Developer Portal,然后选择
Certificates, Identifiers & Profiles
。图 23. 证书,标识和概要文件 -
转至
Keys
选项卡。
-
输入
Key Name
并启用 APN,然后单击continue
。图 25。 P8 令牌详细信息 -
单击
Register
。图 26. 注册 p8 令牌 -
请确保在注册后在新的重定向页面中下载密钥,因为这是一次性活动。
KeyID
可视为文件的一部分并显示在 UI 中,此 KeyID
用于注册 APNS 证书。TeamID
由 apple 为开发者帐户提供,可以在“团队名称”旁边看到。TeamID
用于注册 APNS 证书。可以将 BundleID
注册为与 P12 证书相同的证书。
添加通用 API 源
请执行以下步骤:
- 转至 Event Notifications 仪表板的
Sources
部分。 - 单击
Add
并选择 API 源。 - 输入名称和可选描述,然后单击
Add
。
创建 Event Notifications 目标
在 Event Notifications 控制台中单击 Destinations
,然后添加以下目标详细信息:
Name
: 添加目标的名称。Description
: 添加目标的可选描述。Type
: 从下拉列表中选择iOS Push Notifications
类型。- 选择目标计划: 生产前目标或生产目标。
Pre-production destination
-针对开发和测试环境,选择此目标作为低成本推送目标。Production destination
-使用此目标的完整功能。 允许无限的设备和出站消息。
- 使用基于
Authentication Type
的详细信息更新 iOS 推送凭证,然后选择Environment
。- 如果证书类型为
p8
,请上载 .p8 文件并提供KeyID
,TeamID
和BundleID
。 - 如果证书类型为
p12
,请上载 p12 证书并提供证书password
。
- 如果证书类型为
- 单击
Add
。
创建 Event Notifications 主题
在 Event Notifications 控制台中选择 Topics
,然后单击 Create
。 输入以下主题详细信息:
Name
: 输入主题的名称。Description
: 添加主题的可选描述。Source
: 从下拉列表中选择源。Event type
: 从下拉列表中选择事件类型。Event sub type
从事件子类型下拉列表中选择事件子类型。Severity
: 从严重性下拉列表中选择严重性。Advanced conditions
: 编写您自己的定制条件,必须遵循 jsonpath 规范。
创建 Event Notifications 预订
在 Event Notifications 控制台中单击 Subscriptions
。 输入以下预订详细信息:
Click
创建以显示预订向导。- 完成以下预订详细信息:
Subscription name
: 预订的名称。Subscription description
: 添加可选描述。
- 在
Subscribe to a topic
部分下,从下拉列表中选择主题,然后从目标下拉列表中选择目标。 Destination type
: 在Destination
下选择类型,然后单击Add
。
设置 Event Notifications IOS SDK
iOS SDK 使 iOS 应用程序能够接收推送通知。 完成以下步骤以安装 Event Notifications iOS SDK,初始化 SDK 并注册 iOS app的通知。
安装植入
此 SDK 的当前版本为: 0.0.1
要使用 Event Notifications iOS 目标 SDK,请定义包含服务的工件坐标 (组标识,工件标识和版本) 的依赖关系,如下所示:
CocoaPods
use_frameworks!
target 'MyApp' do
pod 'ENPushDestination', '~> 0.0.1'
end
Carthage
要使用 Carthage 安装 ENPushDestination
,请将以下内容添加到 Cartfile。
github "IBM/event-notifications-destination-ios-sdk" ~> 0.0.1
然后,运行以下命令以构建依赖关系和框架:
carthage update --platform iOS
Swift 包管理器
将以下内容添加到 Package.swift
文件以将 ENPushDestination 标识为依赖关系。 当您使用 swift 构建构建项目时,包管理器会克隆 ENPushDestination。
dependencies: [
.package(url: "https://github.com/IBM/event-notifications-destination-ios-sdk", from: "0.0.1")
]
安装-初始化 SDK
完成以下步骤以使 iOS 应用程序能够接收通知。
-
在
.swift
文件中添加import
语句。import ENPushDestination
-
初始化 ENPushDestination SDK
let instanceGUID = "<instance_guid>>"; let destinationID = "<instance_destination_id>"; let apiKey = "<instance_apikey>"; let enPush = ENPush.sharedInstance enPush.setCloudRegion(region: .usSouth) enPush.initialize(instanceGUID, destinationID, apiKey)
region
: Event Notifications 实例的区域。 例如,Region.usSouth
。
注册以获取通知
使用 ENPush.registerDevice()
API 在 Event Notifications 服务中向 iOS 目标注册设备。
支持以下选项:
-
在没有 userId的情况下注册:
/**Register iOS devices*/ enPush.registerWithDeviceToken(deviceToken: "<apns-device-token>") { response, statusCode, error in print(response?.id ?? "") }
-
向 UserId注册。 对于基于
userId
的通知,注册方法再接受一个参数-userId
。/**Register iOS devices*/ enPush.registerWithDeviceToken(deviceToken: "<apns-device-token>", withUserId: "userId") { response, statusCode, error in print(response?.id ?? "") }
userId
用于传递用于注册 Event Notifications的唯一userId
值。
从通知注销
使用以下代码片段从 Event Notifications注销。
enPush.unregisterDevice { response, statusCode, error in
/**.....*/
}
要从基于 UserId
的注册中注销,必须调用注册方法。 请参阅 注册以获取通知 中的 Register without userId option
。
Event Notifications 目标标记预订
在 iOS 设备上接收推送通知
要在 iOS 设备上接收推送通知,请将以下 Swift 方法添加到应用程序的 appDelegate.swift
:
func application(_ application: UIApplication, didReceiveRemoteNotification userInfo: [AnyHashable : Any], fetchCompletionHandler completionHandler: @escaping (UIBackgroundFetchResult) -> Void) {
//UserInfo dictionary will contain data sent from the server
}
通知选项
支持以下通知选项。
交互式通知
- 要启用交互式推送通知,必须将通知操作参数作为通知对象的一部分传递。 以下是用于启用交互式通知的样本代码:
let actionOne = ENPushNotificationAction(identifierName: "FIRST", buttonTitle: "Accept", isAuthenticationRequired: false, defineActivationMode: .foreground)
let actionTwo = ENPushNotificationAction(identifierName: "SECOND", buttonTitle: "Reject", isAuthenticationRequired: false, defineActivationMode: .destructive)
let category = ENPushNotificationActionCategory(identifierName: "category", buttonActions: [actionOne, actionTwo])
let notificationOptions = ENPushClientOptions()
notificationOptions.setInteractiveNotificationCategories(categoryName: [category])
enPush.initialize(instanceGUID, destinationID, apiKey, notificationOptions)
-
在 AppDelegate.swift 上实现回调方法:
func userNotificationCenter(_ center: UNUserNotificationCenter, didReceive response: UNNotificationResponse, withCompletionHandler completionHandler: @escaping () -> Void) { switch response.actionIdentifier { case "Accept": print("Clicked Accept") case "Reject": print("Clicked Reject") default: } completionHandler() }
当用户单击操作按钮时,将调用此回调方法。 此方法的实现必须执行与指定标识相关联的任务,并在 completionHandler 参数中运行块。
添加定制 DeviceId 以进行注册
要发送 DeviceId
,请使用 ENPushClientOptions
类的 setDeviceId
方法。
let options = ENPushClientOptions();
options.setDeviceId(deviceId: "YOUR_DEVICE_ID");
请记住为每个设备保留定制 DeviceId unique
。
启用富媒体通知
在 iOS 10 或更高版本上支持富媒体通知。 要接收富媒体通知,请实施 UNNotificationService扩展。 该扩展将拦截并处理富媒体通知。
在服务扩展的 didReceive() 方法中,添加以下代码以检索丰富的推送通知内容。
override func didReceive(_ request: UNNotificationRequest, withContentHandler contentHandler: @escaping (UNNotificationContent) -> Void) {
self.contentHandler = contentHandler
bestAttemptContent = (request.content.mutableCopy() as? UNMutableNotificationContent)
ENPushRichPushNotificationOptions.didReceive(request, withContentHandler: contentHandler)
}
向 iOS 设备发送通知
使用 发送通知 API 来发送 iOS 设备的推送通知。 您可以使用 Node 或 Go 管理 SDK,而不是直接调用 API。

