- 本地推送
- 远程推送
- 静默推送,实际上是普通推送的一种特殊状态。静默推送是不允许带 alert badge sound 等字段的. 但是必须包含 "content-available":1.
- 普通推送
静默推送的前提是 APP 没有被杀死, 可以通过回调函数来执行相关的代码.
相关讨论
静默推送通常搭配 后台模式使用。后台模式: background Fetch。后台模式必须开启后台刷新权限
Background Fetch 会为我们的 App 争取更多的后台时间, 但是一般是几十秒左右, 不会太多. 所以, 不要在回调中做太多耗时的操作.
// 普通推送
{
"aps":
{
"alert":"Testing.. (15),
"badge":1,
"sound":"default"
}
}
// 静默推送
{
"aps":
{
"content-available":1
}
}
// 发送推送
if (@available(iOS 10.0, *)) {
UNMutableNotificationContent *content = [[UNMutableNotificationContent alloc] init];
content.title = @"已断开"; // 这个 title 实际上不会弹出,只是为了
UNTimeIntervalNotificationTrigger * timerTrigger = [UNTimeIntervalNotificationTrigger triggerWithTimeInterval:1
repeats:false];
NSString *requestID = @"VPN_disConnectedID";
UNNotificationRequest *request = [UNNotificationRequest requestWithIdentifier:requestID content:content trigger:timerTrigger];
UNUserNotificationCenter *center = [UNUserNotificationCenter currentNotificationCenter];
[center addNotificationRequest:request withCompletionHandler:^(NSError * _Nullable error) {
}];
} else {
}
如果需要通知栏中点击的效果,需要使用 actions
let likeAction = UNNotificationAction(identifier: "like", title: "好感動", options: [.foreground])
let dislikeAction = UNNotificationAction(identifier: "dislike", title: "沒感覺", options: [])
let category = UNNotificationCategory(identifier: "luckyMessage", actions: [likeAction, dislikeAction], intentIdentifiers: [], options: [])
UNUserNotificationCenter.current().setNotificationCategories([category])
那么 UNMutableNotificationContent
中的 categoryID
就必须要赋值
content.categoryIdentifier = "luckyMessage"
本地推送的控制,几个回调的理解
application:didReceiveLocalNotification:
- ios 10 之前
- app 在前台运行,接收到本地推送,会进入这个回调
- app 在后台运行,接受到本地推送后点击
- 此时 app 未启动,会先进入
application:willFinishLaunchingWithOptions
和application:didFinishLaunchingWithOptions:
, 在(NSDictionary *)launchOptions
这个字典中有一个UIApplicationLaunchOptionsLocalNotificationKey
对应的 值就是通知传过来的信息。 在这部分操作之后,再进入到这个回调中。 - 此时 app 启动,接收到本地推送,会进入这个回调
- 此时 app 未启动,会先进入
- ios 10 之后
- app 在前台运行,接收到本地推送,会进入另一个代理。官方文档内容为
Use
userNotificationCenter:willPresentNotification:withCompletionHandler:
instead. - app 在后台运行,接受到本地推送后点击
- 此时 app 未启动,会正常的启动 app,此时需要去添加判断
- 此时 app 启动,会进入到
didReceiveNotificationResponse
回调
- app 在前台运行,接收到本地推送,会进入另一个代理。官方文档内容为
- title NSString 限制在一行,多出部分省略号
- subtitle NSString 限制在一行,多出部分省略号
- body NSString 通知栏出现时,限制在两行,多出部分省略号;预览时,全部展示
网友评论