iOS Push 透传推送与本地推送科普
在移动应用的开发过程中,推送通知是一个重要的功能,它帮助开发者与用户保持联系。iOS中的推送通知主要分为两种类型:透传推送(Remote Push Notifications)和本地推送(Local Notifications)。本文将介绍这两种推送的工作原理,并提供代码示例,最后用甘特图展示它们的工作流程。
透传推送
透传推送是通过服务器向用户设备发送通知的方式。一般流程如下:
- 用户同意接收推送通知:用户在第一次启动应用时,会收到请求权限的弹窗。
- 服务器注册设备Token:成功获取设备Token后,将其发送给服务器。
- 服务器发送推送通知:服务器使用APNs(Apple Push Notification service)发送通知。
代码示例
首先,我们需要在AppDelegate
中请求用户授权接收通知:
import UIKit
import UserNotifications
@UIApplicationMain
class AppDelegate: UIResponder, UIApplicationDelegate {
var window: UIWindow?
func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplication.LaunchOptionsKey: Any]?) -> Bool {
// 请求用户允许接收通知
UNUserNotificationCenter.current().requestAuthorization(options: [.alert, .sound, .badge]) { (granted, error) in
if granted {
print("用户允许接收通知")
} else {
print("用户拒绝接收通知")
}
}
application.registerForRemoteNotifications()
return true
}
// 处理获得的 Device Token
func application(_ application: UIApplication, didRegisterForRemoteNotificationsWithDeviceToken deviceToken: Data) {
let tokenString = deviceToken.map { String(format: "%02.2hhx", $0) }.joined()
print("Device Token: \(tokenString)")
// 这里可以将 tokenString 发送给服务器
}
// 处理获取 Device Token 的错误
func application(_ application: UIApplication, didFailToRegisterForRemoteNotificationsWithError error: Error) {
print("获取 Device Token 出错: \(error.localizedDescription)")
}
}
接着,假设服务器已经准备好并支持APNs协议,开发者只需调用API向用户发送推送消息。这时,用户的设备上就会出现透传推送的通知。
本地推送
本地推送是通过应用内部调度通知,不需要服务器支持。用户可以设置本地的通知时间和内容。流程如下:
- 创建通知内容:设置通知标题、内容和触发时间等。
- 添加通知请求:将通知请求添加到UNUserNotificationCenter。
- 发送通知:在用户设定的时间,系统会触发通知。
代码示例
在AppDelegate
或任意一个视图控制器中设置本地推送:
import UserNotifications
func scheduleLocalNotification() {
let content = UNMutableNotificationContent()
content.title = "本地通知"
content.body = "这是一个本地通知示例"
content.sound = UNNotificationSound.default
// 设置触发时间为5秒后
let trigger = UNTimeIntervalNotificationTrigger(timeInterval: 5, repeats: false)
// 创建通知请求
let request = UNNotificationRequest(identifier: "local_notification", content: content, trigger: trigger)
// 添加请求到UNUserNotificationCenter
UNUserNotificationCenter.current().add(request) { error in
if let error = error {
print("添加本地通知出错: \(error.localizedDescription)")
}
}
}
在调用scheduleLocalNotification()
函数后,用户将在5秒后收到本地通知。
甘特图展示
以下是透传推送与本地推送的工作流程甘特图,使用mermaid
语法可视化:
gantt
title Push Notification Workflow
dateFormat YYYY-MM-DD
section 透传推送
请求用户权限 :a1, 2023-10-01, 1d
注册Device Token :a2, after a1, 1d
服务器发送通知 :a3, after a2, 3d
section 本地推送
创建通知内容 :b1, 2023-10-05, 2d
添加通知请求 :b2, after b1, 1d
发送通知 :b3, after b2, 1d
结语
通过本文的介绍,我们对iOS中的透传推送和本地推送有了更清晰的认识。透传推送方便用于服务器控制推送内容,而本地推送则可以在离线状态下发送通知。两者各有千秋,可根据应用需求合理选择。希望这篇文章能对您今后的开发工作提供帮助!