From ebd483ee5880131d6602e63ca46cfa49caef2983 Mon Sep 17 00:00:00 2001
From: Vitaly Takmazov
Date: Thu, 18 Oct 2018 23:09:39 +0300
Subject: Avatars in notifications
---
JuickPush/Info.plist | 31 +++++++++++++++++++++++++++
JuickPush/NotificationService.h | 13 ++++++++++++
JuickPush/NotificationService.m | 46 +++++++++++++++++++++++++++++++++++++++++
3 files changed, 90 insertions(+)
create mode 100644 JuickPush/Info.plist
create mode 100644 JuickPush/NotificationService.h
create mode 100644 JuickPush/NotificationService.m
(limited to 'JuickPush')
diff --git a/JuickPush/Info.plist b/JuickPush/Info.plist
new file mode 100644
index 0000000..935f4fa
--- /dev/null
+++ b/JuickPush/Info.plist
@@ -0,0 +1,31 @@
+
+
+
+
+ CFBundleDevelopmentRegion
+ $(DEVELOPMENT_LANGUAGE)
+ CFBundleDisplayName
+ JuickPush
+ CFBundleExecutable
+ $(EXECUTABLE_NAME)
+ CFBundleIdentifier
+ $(PRODUCT_BUNDLE_IDENTIFIER)
+ CFBundleInfoDictionaryVersion
+ 6.0
+ CFBundleName
+ $(PRODUCT_NAME)
+ CFBundlePackageType
+ XPC!
+ CFBundleShortVersionString
+ 1.0
+ CFBundleVersion
+ 1
+ NSExtension
+
+ NSExtensionPointIdentifier
+ com.apple.usernotifications.service
+ NSExtensionPrincipalClass
+ NotificationService
+
+
+
diff --git a/JuickPush/NotificationService.h b/JuickPush/NotificationService.h
new file mode 100644
index 0000000..91ca27a
--- /dev/null
+++ b/JuickPush/NotificationService.h
@@ -0,0 +1,13 @@
+//
+// NotificationService.h
+// JuickPush
+//
+// Created by Vitaly Takmazov on 18/10/2018.
+// Copyright © 2018 com.juick. All rights reserved.
+//
+
+#import
+
+@interface NotificationService : UNNotificationServiceExtension
+
+@end
diff --git a/JuickPush/NotificationService.m b/JuickPush/NotificationService.m
new file mode 100644
index 0000000..82dead8
--- /dev/null
+++ b/JuickPush/NotificationService.m
@@ -0,0 +1,46 @@
+//
+// NotificationService.m
+// JuickPush
+//
+// Created by Vitaly Takmazov on 18/10/2018.
+// Copyright © 2018 com.juick. All rights reserved.
+//
+
+#import "NotificationService.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];
+
+ NSURL *avatarURL = [NSURL URLWithString:request.content.userInfo[@"avatarUrl"]];
+
+ NSURLSession * downloadSession = [NSURLSession sessionWithConfiguration:[NSURLSessionConfiguration defaultSessionConfiguration]];
+
+ [[downloadSession downloadTaskWithURL:avatarURL completionHandler:^(NSURL * _Nullable location, NSURLResponse * _Nullable response, NSError * _Nullable error) {
+ if (!error) {
+ NSError *err = nil;
+ NSString *temporaryDirectory = [NSTemporaryDirectory() stringByAppendingPathComponent:[response suggestedFilename]];
+ [[NSFileManager defaultManager] moveItemAtPath:location.path toPath:temporaryDirectory error:&err];
+ UNNotificationAttachment *avatarAttachment = [UNNotificationAttachment attachmentWithIdentifier:avatarURL.lastPathComponent URL:[NSURL fileURLWithPath:temporaryDirectory] options:nil error:&err];
+ self.bestAttemptContent.attachments = @[avatarAttachment];
+ self.contentHandler(self.bestAttemptContent);
+ }
+ }] 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
--
cgit v1.2.3