美文网首页极光征文
极光征文 | 极光推送 iOS SDK 使用心得

极光征文 | 极光推送 iOS SDK 使用心得

作者: AppleTTT | 来源:发表于2019-01-07 18:03 被阅读8次

    做 iOS 开发已经有4年多了,推送是每一个应用必不可少的功能。虽然本人总是在 app 弹出推送权限时下意识的就点了不允许,但是作为产品运营的必备技能,推送功能是每款产品必加的需求。

    最开始使用极光推送是两三年前了。从一开始的极光推送,到后来的极光统计极光认证,集成极光的产品越来越多,也越来越信任极光的服务,哈哈哈(有点打广告的嫌疑,不过极光产品确实走心)。。。

    本文只针对极光推送这个sdk说明下自己使用的心得,其他sdk之后有机会再做介绍,哈哈!

    推送集成

    要集成极光推送比较重要的两点就是证书和sdk集成了,极光推送文档说明的可以说非常详细了,这里我就不再赘述。

    推送统计

    关于推送的统计,一个是消息点击统计,另一个是消息送达统计(都是针对APNs通知,应用内消息暂时好像没有提供统计功能)。

    基于消息统计功能,我们就可以更好的分析用户偏好,做好app的运营啦。

    消息点击统计

    收到 APNs 消息,我们需要在代理方法中调用极光的 handleRemoteNotification: 方法,极光内部会为我们统计消息点击数,可以说是非常方便了。

    //系统的代理方法
    - (void)application:(UIApplication *)application didReceiveRemoteNotification:(NSDictionary *)userInfo fetchCompletionHandler:(void (^)(UIBackgroundFetchResult))completionHandler {
    
      // Required, iOS 7 Support
      [JPUSHService handleRemoteNotification:userInfo];
      completionHandler(UIBackgroundFetchResultNewData);
    }
    
    - (void)application:(UIApplication *)application didReceiveRemoteNotification:(NSDictionary *)userInfo {
    
      // Required, For systems with less than or equal to iOS 6
      [JPUSHService handleRemoteNotification:userInfo];
    }
    
    //极光的代理方法
    // iOS 10 Support
    - (void)jpushNotificationCenter:(UNUserNotificationCenter *)center willPresentNotification:(UNNotification *)notification withCompletionHandler:(void (^)(NSInteger))completionHandler {
      // Required
      NSDictionary * userInfo = notification.request.content.userInfo;
      if([notification.request.trigger isKindOfClass:[UNPushNotificationTrigger class]]) {
        [JPUSHService handleRemoteNotification:userInfo];
      }
      completionHandler(UNNotificationPresentationOptionAlert); // 需要执行这个方法,选择是否提醒用户,有 Badge、Sound、Alert 三种类型可以选择设置
    }
    
    // iOS 10 Support
    - (void)jpushNotificationCenter:(UNUserNotificationCenter *)center didReceiveNotificationResponse:(UNNotificationResponse *)response withCompletionHandler:(void (^)())completionHandler {
      // Required
      NSDictionary * userInfo = response.notification.request.content.userInfo;
      if([response.notification.request.trigger isKindOfClass:[UNPushNotificationTrigger class]]) {
        [JPUSHService handleRemoteNotification:userInfo];
      }
      completionHandler();  // 系统要求执行这个方法
    }
    

    点击数据在推送之后,刷新一下就可以直接看到消息详情里面已经统计到了呢


    1.点击统计.png

    消息送达统计

    在 iOS 10系统之后,极光新推出的一项送达统计功能。依赖于 Notification service extension 功能。这个功能主要是让 iOS 的通知增加了富媒体的展示,比如图片、音频、视频都可以放在我们的通知里面,推送到用户的设备。极光借助这个功能,实现了消息送达的统计。

    这是一个新的sdk, jpush-extension-ios-xxx.a,具体集成参考[统计送达集成]
    (https://docs.jiguang.cn/jpush/client/iOS/ios_guide_new/#_9)。

    2.统计送达集成.png

    需要注意的是,这个sdk 需要添加到 service extension target 下,不然的话可能会跟JPush sdk 冲突。


    3.静态库添加.png

    集成完成之后,推送的时候需要增加一个字段mutable-content: true 才可以调用到我们的 service extension 功能, 就可以统计到通知的送达数据了。这一点在集成文档里面有特别说明。

    iOS 10 新增的 Notification Service Extension 功能,用 mutable-content 字段来控制。
    若使用 Web 控制台,需勾选 “可选设置”中 mutable-content 选项;若使用 RESTFul API 需设置 mutable-content 字段为 true。

    送达数据统计可以到极光后台查询


    4.送达统计.png

    测试发现,应用杀死的状态下,送达也可以被统计到的。

    推送遇到的坑

    token 获取问题

    在JPush 3.0.8 之前注册登录极光都需要依赖device token, 如果 token 没有获取到,就没有办法初始化,然后推送的功能都用不了。测试的时候发现弹出请求通知权限框的时候,我点不允许,有的设备可以拿到token, 有的不能。。。按道理,点击不允许通知不就是不允许推送吗?那token应该都获取不到才对呀。

    后来测试发现,iOS 10 之后,如果勾选了background moderemote notifications , 不管是否允许通知,苹果都会返回 token 给你。

    5.token 获取.png

    富媒体推送展示不了图片

    在iOS 10 推出了富媒体推送之后,我也参照极光demo里面试了一下推送图片功能,代码完成之后推送消息,title 确实按照我的逻辑改好了,但是图片没有显示,emmmm。。。是不是我找的图片有问题,然后又更换一个图片链接来发送,哎,还是展示不出来图片。

    然后我就拖入一个本地图片到工程文件中,直接在extension里面修改通知附件为本地图片,没毛病,可以展示!!!

    那问题是出在 extension 网络请求部分了吗?我又找了好多链接,有的链接可以展示,有的不能,分析了一下发现 https 的链接可以展示,http 的展示不了,原来确实是网络请求的原因。设置了extension target 的 info.plist 终于都可以收到了。(不过因为图片大小有限制,最好不好找太大的图片啦)


    6.ATS 设置.png

    这里关于图片不显示的问题,我自己总结了几条一点排查经验:

    1. 有没有设置mutable-content
    2. 图片链接如果不是https 的,记得service extension 也需要加上ATS处理
    3. 检查你推送的时候的附加字段,跟你代码解析附加字段是不是一样的(so fool)

    生产环境收不到推送

    开发环境测试推送,都没有问题。 但是打包之后就发现收不到了。。。
    最后发现是自己在推送的时候环境搞错了,服了自己。

    一般遇到推送相关的问题,我都回到极光社区先搜索一波儿, 毕竟使用极光推送的小伙伴那么多,我碰到的问题说不定别人也遇到了呢。很多常见的问题基本上都可以找到答案。 在这里也要感谢极光社区的小伙伴在我咨询问题的时候积极的反馈,让我在开发过程中省去了不少烦恼。

    小结

    以上零零散散的记录了我使用极光推送的一点心得,有问题欢迎交流~

    在此也祝愿极光越来越好!

    本文为极光征文参赛文章

    相关文章

      网友评论

        本文标题:极光征文 | 极光推送 iOS SDK 使用心得

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