iOS 通知服务扩展是否会从设备中删除附加文件? [英] Will iOS Notification Service Extension delete attached file from device?

查看:22
本文介绍了iOS 通知服务扩展是否会从设备中删除附加文件?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我遇到了一个奇怪的问题.iOS 通知服务扩展将从设备中删除附件.

I got a strange problem. iOS Notification Service Extension will delete the attachment from device.

我使用 SDWebImage 来显示和缓存图像,并且我实现了一个通知服务扩展来在通知警报视图中显示一个图像.

I use SDWebImage to display and cache image, and I implemented a Notification Service Extension to display a image in the notification alert view.

就我而言,图像已在本地缓存.然后,我点击主页按钮,我的应用程序在后台运行,应用程序安排了本地通知,并将缓存的图像附加到通知内容中.

In my case, the image was already cached locally. Then, I click home button, my app was running in background, app scheduled a local notification with the cached image attach into the notification content.

查看下面的代码:

1.安排本地通知

+ (void)postLocalNotificationGreaterThanOrEqualToiOS10:(LNotification)module body:(NSDictionary *)body {
UNUserNotificationCenter* center = [UNUserNotificationCenter currentNotificationCenter];
UNMutableNotificationContent* content = [[UNMutableNotificationContent alloc] init];
content.sound = [UNNotificationSound defaultSound];
content.body = @"body";
content.userInfo = @{};

//get the image in device to attach into notification
NSError *error;
NSString* imgURL = [body valueForKey:kLocalNotification_Image];
NSString *filePath = [[SDImageCache sharedImageCache] defaultCachePathForKey:imgURL];
NSURL *url = [NSURL URLWithString:[@"file://" stringByAppendingString:filePath]];
UNNotificationAttachment *attachment = [UNNotificationAttachment attachmentWithIdentifier:@"Image" URL:url options:nil error:&error];
if (attachment) {
    content.attachments = @[attachment];
}

UNTimeIntervalNotificationTrigger* trigger = [UNTimeIntervalNotificationTrigger triggerWithTimeInterval:1 repeats:NO];

UNNotificationRequest* request = [UNNotificationRequest requestWithIdentifier:@"FiveSecond"
                                                                      content:content trigger:trigger];

[center addNotificationRequest:request withCompletionHandler:^(NSError * _Nullable error) {
    if (error) {
        NSLog(@"error: %@", error.localizedDescription);
    }
}];
} 

2.Notification Service Extension(其实对于本地通知,只有didReceiveNotificationRequest:withContentHandler:被调用了,什么也没做.)

2.Notification Service Extension (In Fact, for local notification, only didReceiveNotificationRequest:withContentHandler: was called and did nothing.)

- (void)didReceiveNotificationRequest:(UNNotificationRequest *)request withContentHandler:(void (^)(UNNotificationContent * _Nonnull))contentHandler {
self.contentHandler = contentHandler;
self.bestAttemptContent = [request.content mutableCopy];

NSDictionary *aps = [self.bestAttemptContent.userInfo objectForKey:@"aps"];
if (aps) {
    ....//For remote notification, modify the notification content here
}
else {
    //For local notification, do nothing
}

self.contentHandler(self.bestAttemptContent);
}

- (void)serviceExtensionTimeWillExpire {
// Called just before the extension will be terminated by the system.
// Use this as an opportunity to deliver your "best attempt" at modified content, otherwise the original push payload will be used.
self.contentHandler(self.bestAttemptContent);
}

- (NSString *)downloadImageWithURL:(NSString *)imageURLString imageName:(NSString *)imageName {
    ....//code will not execute for local notification
}

我发现,我附加到本地通知中的图像将从设备中删除.我的意思是,在我点击通知警报从后台到前台启动应用程序后,我尝试显示图像,不幸的是,SDWebImageCache 没有从磁盘和内存中找到缓存.

I found that, the image I attached into the local notification will be deleted from device. I mean, after I click the notification alert to launch app from background to foreground, I try to display the image, unfortunately, SDWebImageCache did not find the cache from neither disk nor memory.

我看了iOS API的preference,没发现附件会被删除.有谁知道我在哪里可以找到有关此问题的任何线索?也许我只是忽略了一些重要的参考通知服务扩展.

I read the preference of iOS API, and didn't find that the attachment will be deleted. Does anybody know where could I find any clue of this issue? Maybe I just ignored something important refer to Notification Service Extension.

现在,我临时解决了这个问题,在安排本地通知时,复制缓存的图像并另存为另一个名称,然后将其附加到本地通知中.即使通知服务扩展会删除附件,它只会删除副本文件,应用程序会从缓存中找到图像.

Now, I made a work around to fix this issue temporarily, while scheduling local notification, copy the cached image and save as another name, then attach it into local notification. Even Notification Service Extension will delete the attachment, it will just deleted the copy file, and the app will find the image from cache.

但是,我真的很想知道为什么会出现这个问题.提前致谢.

But, I really wanna know why this problem happened. Thanks in advance.

推荐答案

刚刚在文档中找到

UNNotificationAttachment:

系统在安排前验证附件的内容相应的通知请求.如果附件是已损坏、无效或不受支持的文件类型,通知请求未安排交付.验证后,附加文件移动到附件数据存储中,以便可以访问它们通过适当的流程.位于应用程序内部的附件捆绑包被复制而不是移动.

The system validates the content of attached files before scheduling the corresponding notification request. If an attached file is corrupted, invalid, or of an unsupported file type, the notification request is not scheduled for delivery. Once validated, attached files are moved into the attachment data store so that they can be accessed by the appropriate processes. Attachments located inside an app’s bundle are copied instead of moved.

这篇关于iOS 通知服务扩展是否会从设备中删除附加文件?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆