我遇到了一个奇怪的问题。 iOS Notification Service Extension将从设备中删除附件。
我使用SDWebImage来显示和缓存图像,我实现了Notification Service Extension以在通知警报视图中显示图像。
在我的情况下,图像已经在本地缓存。然后,我点击主页按钮,我的应用程序在后台运行,应用程序安排了本地通知,其中缓存的图像附加到通知内容中。
见下面的代码:
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:被调用并且什么也没做。)
- (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没有从磁盘和内存中找到缓存。
我读了iOS API的偏好,但没有发现附件会被删除。有谁知道我在哪里可以找到这个问题的任何线索?也许我只是忽略了一些重要的事情,请参阅Notification Service Extension。
现在,我暂时解决此问题,同时安排本地通知,复制缓存的图像并另存为其他名称,然后将其附加到本地通知中。即使通知服务扩展将删除附件,它只会删除复制文件,应用程序将从缓存中找到图像。
但是,我真的想知道为什么会出现这个问题。提前谢谢。
拉吉
答案 0 :(得分:2)
刚刚在文档
中找到系统会在安排之前验证附加文件的内容 相应的通知请求。如果是附件 通知已损坏,无效或不受支持的文件类型 请求未安排发送。验证后,附加文件 被移动到附件数据存储中,以便可以访问它们 通过适当的程序。位于应用内部的附件 捆绑包被复制而不是移动。