iOS图片推送的一些开发小Tips

栏目: IOS · 发布时间: 7年前

内容简介:推送

iOS图片推送的一些开发小Tips

推送

iOS图片推送的一些开发小Tips

推送详情

新版本产品大大要求增加图文推送的功能。

由于项目中已经集成了推送功能,故本篇只讲一下接入图片推送的相关Tips。

新建NotificationService、NotificationContent的流程

iOS图片推送的一些开发小Tips

新建Target

iOS图片推送的一些开发小Tips

iOS图片推送的一些开发小Tips

bundle id

NotificationService的作用

下载图片/音频/视频文件(注意:下载时间只有30秒、超时通过serviceExtensionTimeWillExpire方法进行迅速处理)。

- (void)didReceiveNotificationRequest:(UNNotificationRequest *)request withContentHandler:(void (^)(UNNotificationContent * _Nonnull))contentHandler {
    self.contentHandler = contentHandler;
    self.bestAttemptContent = [request.content mutableCopy];
    NSString *subTitle = [[request.content.userInfo valueForKey:@"推送中自定义的字典字段"] valueForKey:@"自定义副标题字段"];
    NSString *attchUrl = [[request.content.userInfo valueForKey:@"推送中自定义的字典字段"] valueForKey:@"自定义图片字段"];
    self.bestAttemptContent.subtitle = subTitle.length > 0 ? subTitle : @"";
    //1. 下载
    NSURL *url = [NSURL URLWithString:attchUrl];
    NSURLSessionConfiguration *config = [NSURLSessionConfiguration defaultSessionConfiguration];
    NSURLSession *session = [NSURLSession sessionWithConfiguration:config];
    NSURLSessionDataTask *task = [session dataTaskWithURL:url completionHandler:^(NSData * _Nullable data, NSURLResponse * _Nullable response, NSError * _Nullable error) {
        if (!error) {
            //2. 保存数据, 不可以存储到不存在的路径
            NSString *path = [NSSearchPathForDirectoriesInDomains(NSLibraryDirectory, NSUserDomainMask, YES).firstObject stringByAppendingPathComponent:@"logo.png"];
            UIImage *image = [UIImage imageWithData:data];
            [UIImageJPEGRepresentation(image, 1) writeToFile:path options:NSAtomicWrite error:&err];
            //3. 添加附件
            UNNotificationAttachment *attachment = [UNNotificationAttachment attachmentWithIdentifier:@"remote-atta1" URL:[NSURL fileURLWithPath:path] options:nil error:&err];
            if (attachment) {
                self.bestAttemptContent.attachments = @[attachment];
            }
        }
        self.contentHandler(self.bestAttemptContent);
    }];
    [task resume];
}

下载超时,则通过下面的方法,改成展示原有系统样式。

- (void)serviceExtensionTimeWillExpire 
{
    self.contentHandler(self.bestAttemptContent);
}

如何使推送走NotificationService的处理?

服务端设置"mutable-content":1 ,这样推送过来就会走NotificationService的处理逻辑。

{
  "aps":{
    "alert":{
      "title":"iOS 10 title",
      "subtitle":"iOS 10 subtitle",
      "body":"iOS 10 body"
    },
    "my-attachment":"http://img01.taopic.com/160317/240440-16031FU23937.jpg",
    "mutable-content":1,
    "category":"myNotificationCategory1",
    "sound":"default",
    "badge":3
  }
}

所有的操作都对了,为什么还是不能走NotificationService的断点?

  1. 首先说一下UNNotificationContentExtension的调试:直接切换target,点击run即可。

  2. 而UNNotificationServiceExtension,因为该代码完全处于后台执行(不像UNNotificationContentExtension可以由通知界面打开触发),像上面那种方式调试还是不会走断点,这就需要Debug -> Attach to process by pID or name:

iOS图片推送的一些开发小Tips

iOS图片推送的一些开发小Tips

NotificationContent作用

UNNotificationContentExtension用于自定义3D Touch后弹出的视图,并且可以用UNNotificationAction自定义按钮。

NotificationContent注意点

1、若想使用NotificationContent自定义3D Touch后弹出的视图,必须让服务端设置"category":"your categoryId"参数,这个参数在UNNotificationContentExtension的info.plist中设置,只有服务端配置的category和你本地设置的一样,才会走你自定义的NotificationContent。并且category可以设置多个,即可以有多套自定义3D Touch UI。

iOS图片推送的一些开发小Tips

2、如果普通推送,则"mutable-content","category"两个参数都不要设置或为空。

3、NotificationService、NotificationContent都需要设置一下AllowArbitraryLoads为YES。

iOS图片推送的一些开发小Tips

参考(偷了个懒,部分图片引用自下方文章,感谢~):

作者:dj_rose

链接:https://www.jianshu.com/p/0ab721604877


以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持 码农网

查看所有标签

本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们

Inside Larry's and Sergey's Brain

Inside Larry's and Sergey's Brain

Richard Brandt / Portfolio / 17 Sep 2009 / USD 24.95

You’ve used their products. You’ve heard about their skyrocketing wealth and “don’t be evil” business motto. But how much do you really know about Google’s founders, Larry Page and Sergey Brin? Inside......一起来看看 《Inside Larry's and Sergey's Brain》 这本书的介绍吧!

URL 编码/解码
URL 编码/解码

URL 编码/解码

MD5 加密
MD5 加密

MD5 加密工具

SHA 加密
SHA 加密

SHA 加密工具