简单易用的 iOS 推送通知 SDK,为移动应用提供统一的推送解决方案。
- iOS 13.0+
- Xcode 16.0+
- Swift 5.9+
- 生成 Framework
./scripts/build.sh或者前往 DooPush iOS SDK 发布页 下载最新版 DooPushSDK.framework
- 将
DooPushSDK.framework拖拽到项目中,设置为 "Embed & Sign"
在 Xcode 中:File → Add Package Dependencies,输入本地路径或 Git URL
pod 'DooPushSDK', :path => 'path/to/DooPushSDK'import DooPushSDK
func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplication.LaunchOptionsKey: Any]?) -> Bool {
// 配置 DooPushSDK
DooPushManager.shared.configure(
appId: "your_app_id",
apiKey: "your_api_key",
baseURL: "http://localhost:5001/api/v1" // 可选,用于本地开发
)
// 设置代理
DooPushManager.shared.delegate = self
// 启用开发模式日志(可选)
DooPushLogger.enableDevelopmentMode()
return true
}DooPushManager.shared.registerForPushNotifications { token, error in
if let token = token {
print("推送注册成功,设备token: \(token)")
} else if let error = error {
print("推送注册失败: \(error.localizedDescription)")
}
}在 AppDelegate 中添加:
func application(_ application: UIApplication, didRegisterForRemoteNotificationsWithDeviceToken deviceToken: Data) {
DooPushManager.shared.didRegisterForRemoteNotifications(with: deviceToken)
}
func application(_ application: UIApplication, didFailToRegisterForRemoteNotificationsWithError error: Error) {
DooPushManager.shared.didFailToRegisterForRemoteNotifications(with: error)
}
func application(_ application: UIApplication, didReceiveRemoteNotification userInfo: [AnyHashable: Any]) {
DooPushManager.shared.handleNotification(userInfo)
}
// MARK: - DooPush 代理方法
extension AppDelegate: DooPushDelegate {
func dooPush(_ manager: DooPushManager, didRegisterWithToken token: String) {
print("✅ 设备注册成功: \(token)")
}
func dooPush(_ manager: DooPushManager, didReceiveNotification userInfo: [AnyHashable: Any]) {
print("🔔 收到推送通知: \(userInfo)")
}
func dooPush(_ manager: DooPushManager, didFailWithError error: Error) {
print("❌ DooPush 错误: \(error.localizedDescription)")
}
}// 开发模式
DooPushLogger.enableDevelopmentMode()
// 生产模式
DooPushLogger.enableProductionMode()// 手动更新设备信息
DooPushManager.shared.updateDeviceInfo()
// 获取设备 token
let token = DooPushManager.shared.getDeviceToken()
// 获取设备ID
let deviceId = DooPushManager.shared.getDeviceId()
// 检查推送权限
DooPushManager.shared.checkPushPermissionStatus { status in
// 处理权限状态
}// 设置角标数字
DooPushManager.shared.setBadgeNumber(5)
// 清除角标
DooPushManager.shared.clearBadge()
// 角标增减操作
DooPushManager.shared.incrementBadgeNumber() // +1
DooPushManager.shared.decrementBadgeNumber() // -1
// 获取当前角标
let currentBadge = DooPushManager.shared.getCurrentBadgeNumber()configure(appId:apiKey:baseURL:)- 配置 SDKregisterForPushNotifications(completion:)- 注册推送通知handleNotification(_:) -> Bool- 处理推送通知,返回是否处理成功updateDeviceInfo()- 更新设备信息
getDeviceToken() -> String?- 获取设备 tokengetDeviceId() -> String?- 获取设备唯一标识checkPushPermissionStatus(completion:)- 检查推送权限状态
setBadgeNumber(_:)- 设置应用角标数字clearBadge()- 清除应用角标getCurrentBadgeNumber() -> Int- 获取当前角标数字incrementBadgeNumber(by:)- 增加角标数字decrementBadgeNumber(by:)- 减少角标数字
didRegisterForRemoteNotifications(with:)- 处理系统推送注册成功回调didFailToRegisterForRemoteNotifications(with:)- 处理系统推送注册失败回调
dooPush(_:didRegisterWithToken:)- 设备注册成功dooPush(_:didReceiveNotification:)- 收到推送通知dooPush(_:didFailWithError:)- 发生错误
dooPushDidUpdateDeviceInfo(_:)- 设备信息更新成功dooPush(_:didChangePermissionStatus:)- 推送权限状态变更dooPush(_:didClickNotification:)- 用户点击通知(v1.2.0+)dooPush(_:didOpenNotification:)- 通知导致应用打开(v1.2.0+)dooPushGatewayDidOpen(_:)- Gateway WebSocket 已连接(v1.2.0+)dooPush(_:gatewayDidCloseWithCode:reason:)- Gateway WebSocket 已关闭(v1.2.0+)dooPush(_:gatewayDidFailWithError:)- Gateway WebSocket 连接失败(v1.2.0+)
# Framework构建
./scripts/build.sh
# 运行测试
swift test
# CocoaPods验证
pod spec lint DooPushSDK.podspec --verbose- Feat:注册设备时上报 APNs 推送环境(development / production),用于平台展示、筛选和按正确 APNs endpoint 发送,减少开发 token 与生产 token 混用导致的发送失败。
- Fix:加固 Gateway WebSocket 连接生命周期,使连接建立与断开更稳健,并让 teardown 幂等,避免重复拆除时进入异常状态(
harden websocket gateway connection lifecycle/make websocket gateway teardown idempotent)。
- 新增 5 个
DooPushDelegate可选方法:通知点击 / 打开(didClickNotification/didOpenNotification),以及 Gateway WebSocket 连接 / 关闭 / 失败(dooPushGatewayDidOpen/gatewayDidCloseWithCode:reason:/gatewayDidFailWithError:)。 - 与 Android SDK v1.2.0 对齐
updateDeviceInfo/ 角标 / 权限 API(这些 API 已在更早版本可用,此版本主要是跨端统一)。 - 与 React Native SDK v0.5.0 对齐底座版本。
- chore:发版流水线连通性测试(无功能变更)。验证 monorepo
sync-ios-sdk.yml→doopush-ios-sdk公仓 →auto-build-release.yml→ GitHub Release 全链路。
- 修复 podspec 与 React Native(CocoaPods 静态库链接 + Swift module)的兼容性:移除自定义
module_map、不存在的 LICENSE 文件引用、public_header_files直接暴露 ObjC 头(Swift@objc已自动暴露)
- 新增
DooPushNotificationManagementMode(active/passive)以支持第三方 SDK 共存 - 新增
setNotificationManagementMode(_:)切换运行模式 - 新增
registerDevice(withToken:vendor:completion:)用于外部 token(如 expo-notifications)的服务端注册 - 通知代理增加 KVO 自动重装:被第三方替换后自动恢复并向上转发