qidao123.com技术社区-IT企服评测·应用市场
标题:
附录C. 注意事项 iOS 体系限定(如后台使命时长) 用户隐私与推送频率发起
[打印本页]
作者:
圆咕噜咕噜
时间:
昨天 11:44
标题:
附录C. 注意事项 iOS 体系限定(如后台使命时长) 用户隐私与推送频率发起
以下是关于 iOS 通知开发的体系限定和隐私规范的详细指南,帮助避免常见问题并提升用户体验:
一、iOS 体系限定与应对策略
1. 后台使命时长限定
限定类型具体规则办理方案
当地通知触发
应用克制后,UNTimeIntervalNotificationTrigger 可能不触发改用 UNCalendarNotificationTrigger 或后台使命续期
后台处理时间
收到推送后约有
30秒
执行时间(实测通常更短)关键逻辑需在前台预加载,后台仅做标记
Service Extension
处理富媒体通知最长运行
30秒
大文件下载应利用 URLSession 后台下载
代码示例 - 后台使命优化
:
// 使用 BGTaskScheduler 延长后台时间
BGTaskScheduler.shared.register(forTaskWithIdentifier: "com.youapp.refresh", using: nil) { task in
self.handleAppRefresh(task: task as! BGAppRefreshTask)
}
func handleAppRefresh(task: BGAppRefreshTask) {
task.expirationHandler = {
// 任务即将超时时清理资源
}
// 实际任务逻辑(如更新数据后发本地通知)
DispatchQueue.global().async {
fetchNewData { result in
if result {
scheduleLocalNotification()
}
task.setTaskCompleted(success: true)
}
}
}
复制代码
2. 通知数量限定
限定项阈值发起待处理当地通知
64个
(超出时最早的通知会被丢弃)紧张通知利用 repeats: false通知分组表现同一线程ID默认表现
最新2条
(可睁开)公道设置 threadIdentifier
分组优化本事
:
let content = UNMutableNotificationContent()
content.threadIdentifier = "ORDER_UPDATE_123" // 相同ID的通知自动分组
复制代码
二、用户隐私与推送规范
1. 隐私合规要求
地区法规关键要求实现发起
GDPR(欧盟)
必须得到用户明确同意后才能发送营销通知实现分层授权(必要通知/营销通知)
CCPA(加州)
提供"不贩卖个人信息"的选项通知设置中增长数据利用开关
中国个人信息保护法
需单独同意敏感权限(如地理位置通知)分场景哀求权限
合规授权流程示例
:
func requestNotificationAuthorization() {
let options: UNAuthorizationOptions = [.alert, .badge]
UNUserNotificationCenter.current().requestAuthorization(options: options) { granted, _ in
if granted {
// 基础权限已授权,再请求营销权限
DispatchQueue.main.async {
showMarketingPermissionDialog()
}
}
}
}
复制代码
2. 推送频率发起
通知类型保举频率用户容忍度交易类(订单/支付)及时发送★★★★★交际互动(批评/点赞)≤ 5条/小时★★★☆☆营销推送≤ 1条/天★★☆☆☆消息资讯≤ 3条/天★★★☆☆
频率控制方案
:
// 使用 UserDefaults 记录最后发送时间
func canSendMarketingNotification() -> Bool {
let lastSendDate = UserDefaults.standard.object(forKey: "lastMarketingDate") as? Date ?? Date.distantPast
return Calendar.current.dateComponents([.day], from: lastSendDate, to: Date()).day! >= 1
}
复制代码
三、最佳实践清单
1. 必做项
测试全部场景
:应用在前台/后台/克制状态下的通知表现
处理权限拒绝
:引导用户去设置界面开启权限(利用 UIApplication.openSettingsURLString)
清算逾期通知
:应用启动时移除已无意义的预定通知
UNUserNotificationCenter.current().removeAllDeliveredNotifications()
复制代码
2. 避免项
❌
滥用临时授权(Provisional)
:静默发送过多通知会导致用户关闭权限
❌
过度利用角标
:未读数量超过20时iOS会主动表现"…",失去提示意义
❌
忽略勿扰模式
:查抄 UIScreen.main.isCaptured 避免在屏幕录制时发送敏感通知
3. 性能优化
附件预处理
:图片压缩到 ≤10MB,视频 ≤50MB
func compressImage(_ url: URL) -> URL? {
guard let image = UIImage(contentsOfFile: url.path) else { return nil }
let targetSize = CGSize(width: 1200, height: 1200) // 适合通知的尺寸
let renderer = UIGraphicsImageRenderer(size: targetSize)
let resizedImage = renderer.image { _ in image.draw(in: CGRect(origin: .zero, size: targetSize)) }
// 保存到临时目录...
}
复制代码
淘汰唤醒次数
:归并多个数据更新到单次通知
四、调试本事
模拟器快速测试
:
# 通过终端触发通知
xcrun simctl push booted com.you.app.id payload.json
复制代码
真机日志过滤
:
// 在AppDelegate中添加
func printNotificationSettings() {
UNUserNotificationCenter.current().getNotificationSettings { settings in
print("当前权限状态: \(settings.authorizationStatus.rawValue)")
}
}
复制代码
崩溃预防
:
// 所有UNUserNotificationCenter回调必须调用completionHandler
func userNotificationCenter(_ center: UNUserNotificationCenter,
willPresent notification: UNNotification,
withCompletionHandler completionHandler: @escaping (UNNotificationPresentationOptions) -> Void) {
completionHandler([]) // 即使不显示也要调用
}
复制代码
通过遵照这些规范,可以在满足体系限定和隐私要求的前提下,构建出高效、用户友好的通知体系。
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。
欢迎光临 qidao123.com技术社区-IT企服评测·应用市场 (https://dis.qidao123.com/)
Powered by Discuz! X3.4