AmplifyUtilsNotifications 1.1.1

AmplifyUtilsNotifications 1.1.1

AWS Mobile SDK ToolsAWS Amplify Swift Ops 维护。



  • Amazon Web Services

Amplify Swift 通知工具

Amplify Swift 通知工具为在 iOS 和 macOS 上处理推送通知提供了有用的功能。

尽管它是为与 AWS Amplify 一起使用而开发的,但它也可以独立使用。

API 文档

特性

  • 提供便利方法以支持请求通知权限和注册 APNs
  • 推送通知服务扩展以支持获取和将远程媒体附加到通知

平台支持

Amplify Swift 通知工具包支持 iOS 13+ 和 macOS 10.15+

许可证

本软件包采用Apache-2.0许可证授权。

安装

此软件包构建需要Xcode 13.4或更高版本。

Swift包管理器

  1. Swift包管理器与Xcode一起分发。要将此软件包添加到iOS项目,请打开Xcode中的项目,然后选择文件 > 添加包add-packages

  2. 在搜索栏中输入软件包GitHub仓库URL(https://github.com/aws-amplify/amplify-swift-utils-notifications)。

  3. 您将看到版本规则,以确定Swift包管理器应安装的版本。选择到此次主要版本为止,并将1.0.0作为依赖规则的最小版本,然后单击添加包amplify-swift-utils-notifications

  4. 选择AmplifyUtilsNotifications,然后单击“添加包”。

  5. 在您的应用代码中,根据需要明确导入插件。

    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

  1. 本包也通过 CocoaPods 提供。如果您尚未安装 CocoaPods,请按照以下说明进行操作。

  2. 将包作为依赖项添加到 Podfile 中。

    platform :ios, '13.0'
    use_frameworks!
    
    target 'HelloWorldApp' do
        pod 'AmplifyUtilsNotifications', '~> 1.0.0'
    end
  3. 然后运行以下命令

    pod install
  4. 使用 Xcode 打开 *.xcworkspace,您就能在项目中使用 AmplifyUtilsNotifications 包了。

AWS Pinpoint 通知服务扩展

此包包含一个可供使用的实现(AUNotificationService),用于处理 AWS Pinpoint 发送的远程通知。它可以帮助解码通知 JSON 数据并检索远程媒体 URL 作为附件。

AWS Pinpoint 格式的推送通知

  1. 将服务应用扩展添加到您项目中。Apple 文档

    add-notification-service-extension

  2. 更新新创建的通知服务扩展的 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 的推送通知。

  1. 定义一个符合 AUNotificationPayload 协议的 MyPayload 结构体。它定义了 remoteMediaURL

  2. 继承 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
        }
    }
  3. 通过将 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)
        }
    }
}

报告错误/功能请求

Open Bugs Open Questions Feature Requests Closed Issues

欢迎您使用 GitHub 问题追踪器报告错误或建议功能。

在提交问题之前,请检查现有开放最近关闭的问题,确保问题尚未被其他人报告。请尽量提供更多信息。以下信息非常有用:

  • 预期行为和观察到的行为
  • 可重现的测试用例或步骤系列
  • 使用的代码版本
  • 您针对错误所做的任何修改
  • 您环境或部署的任何自定义内容