iOS推送增加右侧显示图Service Extension

 更新时间:2022年10月11日 16:48:46   作者:ZouNiMei  
这篇文章主要为大家介绍了iOS推送增加右侧显示图Service Extension,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
(福利推荐:【腾讯云】服务器最新限时优惠活动,云服务器1核2G仅99元/年、2核4G仅768元/3年,立即抢购>>>:9i0i.cn/qcloud

(福利推荐:你还在原价购买阿里云服务器?现在阿里云0.8折限时抢购活动来啦!4核8G企业云服务器仅2998元/3年,立即抢购>>>:9i0i.cn/aliyun

正文

本Demo推送使用的是极光推送(换成其他推送改动也不大)极光文档 极光Demo

先看下效果图,在系统的推送弹窗右侧增加了一个图片

工程配置(一)

  • 首先需要一个已经集成了极光推送,并且可以正常接收推送的工程(参考极光文档again);
  • 配置主Target,如下截图所示,勾选主Target的Background Modes;

  • 创建Service Extension,看下面的三图;

  • 给创建好的PushExtension(子Target)配置Push Notifications,这一步操作就和主Target的配置推送一样;

工程配置(二)集成JPushExtension

这一步是按照需求可选的,引入JPushExtension的目的是为了极光推送做统计

处理推送显示的内容

这是配置好的工程目录,多了一个PushExtention文件夹

NotificationService.m文件的内容改为如下

#import "NotificationService.h"
#import "JPushNotificationExtensionService.h"
@interface NotificationService ()
@property (nonatomic, strong) void (^contentHandler)(UNNotificationContent *contentToDeliver);
@property (nonatomic, strong) UNMutableNotificationContent *bestAttemptContent;
@end
@implementation NotificationService
- (void)didReceiveNotificationRequest:(UNNotificationRequest *)request withContentHandler:(void (^)(UNNotificationContent * _Nonnull))contentHandler {
    self.contentHandler = contentHandler;
    self.bestAttemptContent = [request.content mutableCopy];
    // 读取图片地址,并加载
    NSString *imgUrl = [NSString stringWithFormat:@"%@", self.bestAttemptContent.userInfo[@"imageUrl"]]; // ??图片字段的key值需要跟后台开发统一
    if (imgUrl) {
        NSURL *fileURL = [NSURL URLWithString:imgUrl];
        [self downloadAndSave:fileURL handler:^(NSString *localPath) {
            if (localPath) {
                UNNotificationAttachment * attachment = [UNNotificationAttachment attachmentWithIdentifier:@"myAttachment" URL:[NSURL fileURLWithPath:localPath] options:nil error:nil];
                self.bestAttemptContent.attachments = @[attachment];
            }
            [self apnsDeliverWith:request];
        }];
    } else {
        [self apnsDeliverWith:request];
    }
}
- (void)serviceExtensionTimeWillExpire {
    self.contentHandler(self.bestAttemptContent);
}
#pragma mark - 私有方法
- (void)downloadAndSave:(NSURL *)fileURL handler:(void (^)(NSString *))handler {
    // 这里需要用系统网络请求来下载图片
    NSURLSession *session = [NSURLSession sharedSession];
    NSURLSessionDownloadTask *task = [session downloadTaskWithURL:fileURL completionHandler:^(NSURL * _Nullable location, NSURLResponse * _Nullable response, NSError * _Nullable error) {
        NSString *localPath = nil;
        if (!error) {
            // 临时文件夹路径,APP没有运行时会自动清除图片,不会占用内存
            NSString *localURL = [NSString stringWithFormat:@"%@/%@", NSTemporaryDirectory(), fileURL.lastPathComponent];
            if ([[NSFileManager defaultManager] moveItemAtPath:location.path toPath:localURL error:nil]) {
                localPath = localURL;
            }
        }
        handler(localPath);
    }];
    [task resume];
}
- (void)apnsDeliverWith:(UNNotificationRequest *)request {
    [JPushNotificationExtensionService jpushSetAppkey:@"本应用在极光平台的AppKey"];
    [JPushNotificationExtensionService jpushReceiveNotificationRequest:request with:^ {
        NSLog(@"apns upload success");
        self.contentHandler(self.bestAttemptContent);
    }];
}
@end

注意事项

如果传了图片地址却还不显示,不要惊慌,先请确保图片别太大,而且可以使用NSURLSession下载,否则就会出现图片不显示的问题。

以上就是iOS推送增加右侧显示图Service Extension的详细内容,更多关于iOS 推送增加右侧显示图的资料请关注程序员之家其它相关文章!

相关文章

  • Android中getActivity()为null的解决办法

    Android中getActivity()为null的解决办法

    在Android开发的时候可能遇过出现getActivity()出现null的时候导致程序报出空指针异常,那么遇到这种情况改如何解决,下面跟着小编一起去看看。
    2016-08-08
  • IOS中(assign,retain,copy,weak,strong)的区别以及nonatomic的含义

    IOS中(assign,retain,copy,weak,strong)的区别以及nonatomic的含义

    这篇文章主要介绍了我们在声明@property 属性时,总是要在括号中写上assign、retain、copy、weak、strong中的一个,他们的区别,需要的朋友可以参考下
    2017-03-03
  • IOS展开三级列表效果示例

    IOS展开三级列表效果示例

    今天介绍的是一个很不错的三级列表展开效果的例子,文章运用实例代码介绍的很详细,提供给学习IOS的小伙伴们使用。
    2016-08-08
  • iOS 12适配以及问题小记

    iOS 12适配以及问题小记

    苹果官方在上个月推送了iOS12系统,作为一名开发者当然要紧跟更新技术,所以下面这篇文章主要给大家介绍了关于iOS 12适配以及一些问题,文中通过示例代码介绍的非常详细,需要的朋友可以参考下
    2018-07-07
  • iOS Touch ID 身份认证

    iOS Touch ID 身份认证

    本文主要介绍了iOS Touch ID 身份认证的相关知识。具有很好的参考价值,下面跟着小编一起来看下吧
    2017-02-02
  • 关于iOS 11的一些新特性适配实践总结

    关于iOS 11的一些新特性适配实践总结

    iOS 11 为整个生态系统的 UI 元素带来了一种更加大胆、动态的新风格。下面这篇文章主要给大家总结介绍了关于iOS 11的一些新特性适配实践,文中通过示例代码介绍的非常详细,需要的朋友可以参考借鉴,下面来一起看看吧。
    2017-11-11
  • 详解Objective-C设计模式编程中对备忘录模式的运用

    详解Objective-C设计模式编程中对备忘录模式的运用

    这篇文章主要介绍了Objective-C设计模式编程中对备忘录模式的运用,文中结合了Cocoa框架下应用的实例来加以讲解,需要的朋友可以参考下
    2016-03-03
  • iOS Swift控制器转场动画示例代码

    iOS Swift控制器转场动画示例代码

    这篇文章主要给大家介绍了关于iOS Swift控制器转场动画的相关资料,文中通过示例代码介绍的非常详细,对各位iOS开发者们具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧。
    2018-01-01
  • iOS应用中存储用户设置的plist文件的创建与读写教程

    iOS应用中存储用户设置的plist文件的创建与读写教程

    这篇文章主要介绍了iOS应用中存储用户设置的plist文件的创建与读写教程,plist文件是在Xcode下的项目中会被自动生成,里面采用XML格式记录数据,需要的朋友可以参考下
    2016-04-04
  • IOS实现输入验证码、密码按位分割(二)

    IOS实现输入验证码、密码按位分割(二)

    这篇文章主要介绍了IOS实现输入验证码、密码按位分割的方法,在App内,密码及验证码的输入,采用按位输入的方法,且位与位之间有分隔线,感兴趣的小伙伴们可以参考一下
    2016-01-01

最新评论

?


http://www.vxiaotou.com