美文网首页
推送相关知识笔记

推送相关知识笔记

作者: 黑羽肃霜 | 来源:发表于2019-07-20 21:55 被阅读0次
    • 本地推送
    • 远程推送
      • 静默推送,实际上是普通推送的一种特殊状态。静默推送是不允许带 alert badge sound 等字段的. 但是必须包含 "content-available":1.
      • 普通推送

    静默推送的前提是 APP 没有被杀死, 可以通过回调函数来执行相关的代码.
    相关讨论

    静默推送通常搭配 后台模式使用。后台模式: background Fetch。后台模式必须开启后台刷新权限
    Background Fetch 会为我们的 App 争取更多的后台时间, 但是一般是几十秒左右, 不会太多. 所以, 不要在回调中做太多耗时的操作.

    // 普通推送
    {
        "aps":
            {
                "alert":"Testing.. (15),
                "badge":1,
                "sound":"default"
            }
    }
    
    // 静默推送
    {
        "aps":
            {
                "content-available":1
            }
    }
    

    参考资料1
    参考资料2
    参考资料3

    
    // 发送推送
        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:willFinishLaunchingWithOptionsapplication:didFinishLaunchingWithOptions:, 在 (NSDictionary *)launchOptions 这个字典中有一个 UIApplicationLaunchOptionsLocalNotificationKey 对应的 值就是通知传过来的信息。 在这部分操作之后,再进入到这个回调中。
        • 此时 app 启动,接收到本地推送,会进入这个回调
    • ios 10 之后
      • app 在前台运行,接收到本地推送,会进入另一个代理。官方文档内容为

        Use userNotificationCenter:willPresentNotification:withCompletionHandler: instead.

      • app 在后台运行,接受到本地推送后点击
        • 此时 app 未启动,会正常的启动 app,此时需要去添加判断
        • 此时 app 启动,会进入到 didReceiveNotificationResponse 回调
    • title NSString 限制在一行,多出部分省略号
    • subtitle NSString 限制在一行,多出部分省略号
    • body NSString 通知栏出现时,限制在两行,多出部分省略号;预览时,全部展示

    相关文章

      网友评论

          本文标题:推送相关知识笔记

          本文链接:https://www.haomeiwen.com/subject/hckplctx.html