android接收富文本推送,iOS10富文本推送--NotificationServiceExtension
NotificationService文件
额外添加了一个文件管理器的字段,用来存储数据
@interface NotificationService ()
@property (nonatomic, strong) void (^contentHandler)(UNNotificationContent *contentToDeliver);
@property (nonatomic, strong) UNMutableNotificationContent *bestAttemptContent;
@property (nonatomic, strong) NSFileManager *fileMgr;
@end
@implementation NotificationService
LazyLoad
-(NSFileManager *)fileMgr{
return [NSFileManager defaultManager];
}
收到远程通知之后,在当前方法内进行处理,并生成attchment,最终回调给系统
- (void)didReceiveNotificationRequest:(UNNotificationRequest *)request withContentHandler:(void (^)(UNNotificationContent * _Nonnull))contentHandler {
self.contentHandler = contentHandler;
self.bestAttemptContent = [request.content mutableCopy];
NSDictionary * userInfo = request.content.userInfo;
NSString * attchUrl = userInfo[@"aps"][@"image"];
NSString *exetension = [NSString stringWithFormat:@".%@",[[attchUrl componentsSeparatedByString:@"."] lastObject]];
if (attchUrl) {
NSURLSession *session = [NSURLSession sessionWithConfiguration:[NSURLSessionConfiguration defaultSessionConfiguration]];
NSURL *url = [NSURL URLWithString:attchUrl];
NSURLSessionDownloadTask *download = [session downloadTaskWithURL:url completionHandler:^(NSURL * _Nullable tempLocation, NSURLResponse * _Nullable response, NSError * _Nullable error) {
if (!error) {
NSURL *localURL = [NSURL fileURLWithPath:[tempLocation.path stringByAppendingString:exetension]];
[self.fileMgr moveItemAtURL:tempLocation toURL:localURL error:&error];
NSError *attachmentError = nil;
UNNotificationAttachment * attachment = [UNNotificationAttachment attachmentWithIdentifier:@"photo" URL:localURL options:nil error:&attachmentError];
if (attachmentError) {
NSLog(@"%@",attachmentError);
}else if (attachment){
self.bestAttemptContent.attachments = @[attachment];
}
}else{
NSLog(@"%@",error.localizedDescription);
}
self.bestAttemptContent.categoryIdentifier = userInfo[@"aps"][@"category"];//这里设置这个类别的标识符
self.contentHandler(self.bestAttemptContent);//回调给系统
}];
[download resume];
}
}
超时,异常时调用
- (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);
}
@end