Amplify Swift 通知工具
Amplify Swift 通知工具为在 iOS 和 macOS 上处理推送通知提供了有用的功能。
尽管它是为与 AWS Amplify 一起使用而开发的,但它也可以独立使用。
特性
- 提供便利方法以支持请求通知权限和注册 APNs
- 推送通知服务扩展以支持获取和将远程媒体附加到通知
平台支持
Amplify Swift 通知工具包支持 iOS 13+ 和 macOS 10.15+
许可证
本软件包采用Apache-2.0许可证授权。
安装
此软件包构建需要Xcode 13.4或更高版本。
Swift包管理器
-
Swift包管理器与Xcode一起分发。要将此软件包添加到iOS项目,请打开Xcode中的项目,然后选择
文件 > 添加包
。 -
在搜索栏中输入软件包GitHub仓库URL(https://github.com/aws-amplify/amplify-swift-utils-notifications)。
-
您将看到版本规则,以确定Swift包管理器应安装的版本。选择
到此次主要版本为止
,并将1.0.0
作为依赖规则的最小版本,然后单击添加包
。 -
选择
AmplifyUtilsNotifications
,然后单击“添加包”。 -
在您的应用代码中,根据需要明确导入插件。
import SwiftUI import AmplifyUtilsNotifications @main struct HelloWorldApp: App { @UIApplicationDelegateAdaptor(AppDelegate.self) var appDelegate var body: some Scene { WindowGroup { ContentView() } } } class AppDelegate: NSObject, UIApplicationDelegate { func applicationDidFinishLaunching(_ application: UIApplication) { Task { let isPushNotificationAllowed = await AmplifyUtilsNotifications.AUNotificationPermissions.allowed // ... } } }
CocoaPods
-
将包作为依赖项添加到 Podfile 中。
platform :ios, '13.0' use_frameworks! target 'HelloWorldApp' do pod 'AmplifyUtilsNotifications', '~> 1.0.0' end
-
然后运行以下命令
pod install
-
使用 Xcode 打开 *.xcworkspace,您就能在项目中使用
AmplifyUtilsNotifications
包了。
AWS Pinpoint 通知服务扩展
此包包含一个可供使用的实现(AUNotificationService
),用于处理 AWS Pinpoint 发送的远程通知。它可以帮助解码通知 JSON 数据并检索远程媒体 URL 作为附件。
AWS Pinpoint 格式的推送通知
-
将服务应用扩展添加到您项目中。Apple 文档。
-
更新新创建的通知服务扩展的
info.plist
。<dict> <key>NSExtension</key> <dict> <key>NSExtensionPointIdentifier</key> <string>com.apple.usernotifications.service</string> <key>NSExtensionPrincipalClass</key> <string>AmplifyUtilsNotifications.AUNotificationService</string> </dict> </dict>
注意
我们建议您保留自动生成的
NotificationService.swift
源文件,或者为您的通知服务扩展目标添加一个空 swift 文件。空源列表会在您尝试将扩展安装到真实设备时导致错误。
非 AWS Pinpoint 格式的推送通知
您还可以从 AUNotificationService
继承以支持不同的通知有效负载格式或添加自定义功能。
例如,我们希望发送具有字段名 video_url
的推送通知。
-
定义一个符合
AUNotificationPayload
协议的MyPayload
结构体。它定义了remoteMediaURL
。 -
继承
AUNotificationService
并将payloadSchema
属性更改为之前步骤中定义的MyPayload
。import AmplifyUtilsNotifications struct MyPayload: AUNotificationPayload { var remoteMediaURL: String? { video_url } let video_url: String } class NotificationService: AUNotificationService { override init() { super.init() self.payloadSchema = MyPayload.self } }
-
通过将
NSExtensionPrincipalClass
设置为$(PRODUCT_MODULE_NAME).NotificationService
更新info.plist
。
您也可以重写 didReceive
函数来修改所需的内容。例如,将后缀 [MODIFIED]
添加到您的通知标题。
override func didReceive(
_ request: UNNotificationRequest,
withContentHandler contentHandler: @escaping (UNNotificationContent) -> Void
) {
super.didReceive(request) { content in
self.contentHandler = contentHandler
let mutableContent = content.mutableCopy() as? UNMutableNotificationContent
mutableContent?.title = content.title + "[MODIFIED]"
if let mutableContent {
contentHandler(mutableContent)
}
}
}
报告错误/功能请求
欢迎您使用 GitHub 问题追踪器报告错误或建议功能。
在提交问题之前,请检查现有开放或最近关闭的问题,确保问题尚未被其他人报告。请尽量提供更多信息。以下信息非常有用:
- 预期行为和观察到的行为
- 可重现的测试用例或步骤系列
- 使用的代码版本
- 您针对错误所做的任何修改
- 您环境或部署的任何自定义内容