美文网首页iOS精品文章程序员iOS开发技巧
iOS使用Notification Service Extens

iOS使用Notification Service Extens

作者: 风吹柳絮如花落 | 来源:发表于2018-01-30 16:56 被阅读315次

    只能统计iOS 10之后版本,iOS 10之前无效

    Notification Service Extension此扩展为苹果官方在iOS 10推出的扩展类,可以在展示Push横幅前截取Push,对Push进行对其展示、文案、等其他的东西进行修改。但是此扩展也可以进行对Push到达率进行统计,因为之前只能统计点击率。

    本人开发环境

    • MacBook Pro 10.12.6
    • Xcode 9.0
    • iPhone 6s 11.2.5

    Notification Service Extension概述

    如下图所示 APNs 是将消息首先推送给 ServiceExtension ,ServiceExtension 会处理好数据后再展示给用户一个优美的界面,ServiceExtension 就是一个厨师,收到原材料,给用户做成美味的食物一样,so sweat!

    2379949-77cd32e4ee3934d7.png

    在展示用户推送内容前,UNNotificationServiceExtension 是修改远程推送携带的内容。UNNotificationServiceExtension 类 可以让开发者自定义推送展示的内容,Notification Service app extension 不会自己提供推送界面的,当将适当类型的推送传递给用户的设备时,它会按需启动。你可以用 extension 修改推送内容和下载推送相关的资源。你可以在extension 中解密和加密的数据或下载推送相关的图片。

    你不需要自己创建 UNNotificationServiceExtension 实例,Xcode 已经帮我们创建好了。当满足如下两个条件,应用收到远程推送时,应用会加载 extension 和调用 didReceiveNotificationRequest:withContentHandler: 方法。

    在 didReceiveNotificationRequest:withContentHandler: 里面可以处理远程推送内容,修改远程推送内容的时间是有限的。如果修改内容任务没有完成,系统会调用 serviceExtensionTimeWillExpire 方法,给你提供最后一次提供修改内容的机会。如果你没有修改远程推送成功,系统将会展示远程推送最原始的内容。

    创建扩展Target

    1、在原有项目上new一个target,如下图所示
    屏幕快照 2018-01-30 下午4.23.56.png
    2、创建Notification Service Extension,如下图所示
    屏幕快照 2018-01-30 下午4.25.00.png
    3、自定义名称,其他的不需要更改,系统会自动配置

    截获push前提

    1、需要新增一个字段mutable-content": "1",与alert同级,如下图所示
    lALPBbCc1WBFE6XNARPNAfI_498_275.png_620x10000q90g.jpg
    • 远程推送的 aps 字典中,mutable-content : 1

      The remote notification’s aps dictionary includes the mutable-content key with the value set to 1.

    2、alert不能为空
    • 远程通知的配置是展示 Alert

      The remote notification is configured to display an alert.

    3、两个target的info.plist均需要配置
    • 不进行配置时会报如下图错误


      2379949-b128133f158736d1.png
    • 右键点击info.plist,Open As -> Source Code 将下面的代码填入最后的</dict> </plist>前即可
        <key>NSAppTransportSecurity</key>
        <dict>
            <key>NSAllowsArbitraryLoads</key>
            <true/>
        </dict>
    

    调试

    1、先run主target,如下图所示
    屏幕快照 2018-01-30 下午4.50.49.png
    2、再run Notification Service Extension,如下图所示
    屏幕快照 2018-01-30 下午4.50.59.png
    3、最后,手动选择你的主target,或者search,如下图所示
    屏幕快照 2018-01-30 下午4.51.11.png
    这样在收到push时,就可以进行打印Log或者断点进行调试了

    统计Push到达率

    1、后台以及杀死app
    1)操作方法
    - (void)didReceiveNotificationRequest:(UNNotificationRequest *)request withContentHandler:(void (^)(UNNotificationContent * _Nonnull))contentHandler 
    
    2)极光推送统计
    3)server端推送统计
    • 可以让server端在push中加一个类似pushId的字段
    • 在NotificationService中的didReceiveNotificationRequest方法中获取self.bestAttemptContent.userInfo
    • 使用NSURLSessionTask(建议使用官方网络)进行将规定的pushId进行post请求发给server端进行统计push到达率
    2、前台
    • 集成了极光推送时,可在下方代码中进行网络请求完成统计
    - (void)jpushNotificationCenter:(UNUserNotificationCenter *)center willPresentNotification:(UNNotification *)notification withCompletionHandler:(void (^)(NSInteger))completionHandler
    
    • 未集成时,可在下方代码中进行网络请求完成统计
    - (void)userNotificationCenter:(UNUserNotificationCenter *)center willPresentNotification:(UNNotification *)notification withCompletionHandler:(void (^)(UNNotificationPresentationOptions options))completionHandler
    

    数据获取

    PS

    • 可尝试以下的链接中的方式配合断点测试流程
      https://github.com/liuyanhongwl/ios_common/blob/master/files/App-Extension-Tips.md
      我做这块的时候不知道是电脑的问题还是什么问题,就是各种不走断点

    • 如果使用NotificationServiceExtension 通过以下连接中的操作还是不走断点的话并且打印 Program ended with exit code: 0的话,断开真机与Xcode连接即可,则会走extension中的代码了,具体原因未知,望大神告知,初步认为Xcode的bug。

    • 推翻网络上的部分文章 - 实测集成了Notification Service Extension可安装app - 2018/3/6 下午12:01:01

    https://www.jianshu.com/p/e458879f188d?appinstall=0
    https://zhidao.baidu.com/question/1801940902903964387.html
    两文章提到iOS 10以下无法安装集成Notification Service Extension的app,本人亲测,可安装

    参考文章

    <iOS 远程推送> iOS 10 UNNotificationServiceExtension

    相关文章

      网友评论

      • eb5a7b6138e9:“如果使用NotificationServiceExtension 通过以下连接中的操作还是不走断点的话并且打印 Program ended with exit code: 0的话,断开真机与Xcode连接即可,则会走extension中的代码了,具体原因未知,望大神告知,初步认为Xcode的bug。” 。。。楼主,这个问题找到原因了吗?
        风吹柳絮如花落:@Matt_Qian 还是木有诶~

      本文标题:iOS使用Notification Service Extens

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