美文网首页iosiOS学习笔记程序员
iOS图片推送的一些开发小Tips

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

作者: dj_rose | 来源:发表于2018-08-21 15:11 被阅读165次
推送.png 推送详情.png

新版本产品大大要求增加图文推送的功能。
由于项目中已经集成了推送功能,故本篇只讲一下接入图片推送的相关Tips。

新建NotificationService、NotificationContent的流程

新建Target.png 新建2.png bundle id.png

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:

extension-debug-1.png extension-debug-2.png

NotificationContent作用

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

NotificationContent注意点

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


设置category.png

2、如果普通推送,则"mutable-content","category"两个参数都不要设置或为空。
3、NotificationService、NotificationContent都需要设置一下AllowArbitraryLoads为YES。


security settings.png

参考(偷了个懒,部分图片引用自下方文章,感谢~):
iOS10 通知extension之 Content Extension你玩过了吗?
iOS 10 消息推送(UserNotifications)秘籍总结(二)
iOS10推送必看UNNotificationAttachment以及UNTimeIntervalNotificationTrigger

相关文章

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

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

  • 推送相关

    推送:https://www.jianshu.com/p/0ab721604877 iOS图片推送的一些开发小Tips

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

    新版本产品大大要求增加图文推送的功能。由于项目中已经集成了推送功能,故本篇只讲一下接入图片推送的相关Tips。 新...

  • iOS资源

    iOS开发200个tips总结(一) iOS开发200个tips总结(二) iOS中NSFileManager文件...

  • iOS 推送全解析,你不可不知的所有 Tips!

    iOS 推送全解析,你不可不知的所有 Tips!(完整版) iOS 推送全解析,你不可不知的所有 Tips!(完整版)

  • iOS 11 适配以及Xcode 9小Tips

    iOS 11 适配以及Xcode 9小Tips iOS 11 适配以及Xcode 9小Tips

  • iOS推送Tips

    清除通知栏所有通知 推送通知进入后台处理通知消息 1.后台推送消息设置,要再推送消息中加入键值对"content-...

  • iOS开发小Tips

    1.AFNetworking返回结果默认回到主线程中,所以在AFNetworking的返回结果block中无需手动...

  • 实习随笔| 周记(二)

    本周知识清单: 开发小tips Java基础之集合类 一些小感悟 1.开发小tips 看项目代码的时候发现了一些不...

  • iOS 开发 Button文字对齐

    iOS开发button常用设置 tips:无用设置

网友评论

    本文标题:iOS图片推送的一些开发小Tips

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