最近项目在接入个推推送时,由于项目使用的是
swift
编写的,然后个推的SDK都是OC
编写的,所以在接入的过程中,难免会遇到混编的知识,所以在这里总结下接入的注意事项,做个记录。具体接入步骤如下:
- 1.创建
NotificationService
,具体操作如下图
-
2.将下载好的三方库导入项目中,具体操作如下图
- 3.创建桥接文件,并配置桥接文件路径,具体操作如下图
创建桥接文件swiftDemo-NotificationService-swift-Bridging-Header
配置配置项
- 4.在创建好的桥接文件中,导入项目中需要使用的OC的三方库的名称
#import <GTExtensionSDK/GeTuiExtSdk.h>
- 5.在需要使用的地方,直接调用即可
var contentHandler: ((UNNotificationContent) -> Void)?
var bestAttemptContent: UNMutableNotificationContent?
override func didReceive(_ request: UNNotificationRequest, withContentHandler contentHandler: @escaping (UNNotificationContent) -> Void) {
self.contentHandler = contentHandler
guard let bestAttemptContent = request.content.mutableCopy() as? UNMutableNotificationContent else { return }
// [ GTSDK ] 统计APNs到达情况和多媒体推送支持接口, 建议使用该接口
GeTuiExtSdk.handelNotificationServiceRequest(request, withAttachmentsComplete: { [weak self] (attachments: Array?, errors: Array?) in
guard let handler = self?.contentHandler else { return }
// [ 测试代码 ] TODO:日志打印,如果APNs处理有错误,可以在这里查看相关错误详情
// print("处理个推APNs展示遇到错误:\(String(describing: errors))")
// [ 测试代码 ] TODO:用户可以在这里处理通知样式的修改,eg:修改标题,开发阶段可以用于判断是否运行通知扩展
// bestAttemptContent.title = "\(bestAttemptContent.title) [Success]"
if let attachment = attachments as? [UNNotificationAttachment], !attachment.isEmpty {
// 设置通知中的多媒体附件
bestAttemptContent.attachments = attachment
}
// 展示推送的回调处理需要放到个推回执完成的回调中
handler(bestAttemptContent)
})
}