我已经集成了APNS,并希望在远程通知中显示图像,如下所示;
我已经在下面的代码中使用了参考链接;
AppDelegate.h
#import@interface AppDelegate : UIResponder
AppDelegate.m
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions { [self registerForRemoteNotification]; UIStoryboard *storyboard = [UIStoryboard storyboardWithName:@"Main" bundle:nil]; UIViewController *vc1 = [storyboard instantiateViewControllerWithIdentifier:@"mainscreen"]; self.window.rootViewController = vc1; return YES; } - (void)registerForRemoteNotification { if(SYSTEM_VERSION_GRATERTHAN_OR_EQUALTO(@"10.0")) { UNUserNotificationCenter *center = [UNUserNotificationCenter currentNotificationCenter]; center.delegate = self; [center requestAuthorizationWithOptions:(UNAuthorizationOptionSound | UNAuthorizationOptionAlert | UNAuthorizationOptionBadge) completionHandler:^(BOOL granted, NSError * _Nullable error){ [[UIApplication sharedApplication] registerForRemoteNotifications]; }]; } else { [[UIApplication sharedApplication] registerUserNotificationSettings:[UIUserNotificationSettings settingsForTypes:(UIUserNotificationTypeSound | UIUserNotificationTypeAlert | UIUserNotificationTypeBadge) categories:nil]]; [[UIApplication sharedApplication] registerForRemoteNotifications]; } } - (void)application:(UIApplication *)application didRegisterForRemoteNotificationsWithDeviceToken:(NSData *)deviceToken{ DeviceToken = [[NSString alloc]initWithFormat:@"%@",[[[deviceToken description] stringByTrimmingCharactersInSet:[NSCharacterSet characterSetWithCharactersInString:@"<>"]] stringByReplacingOccurrencesOfString:@" " withString:@""]]; NSLog(@"Device Token = %@",DeviceToken); }
然后,我使用UNNotificationServiceExtension创建了新目标, 并创建了新的捆绑包ID“ com.RichPush.app.Service-Extension”,并且还为UNNotificationServiceExtension创建了带有上述捆绑包的新证书和配置文件。
NotificationService.h
#import@interface NotificationService : UNNotificationServiceExtension @end
NotificationService.m
#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]; // Modify the notification content here... //self.bestAttemptContent.body = [NSString stringWithFormat:@"%@ [modified]", self.bestAttemptContent.body]; // check for media attachment, example here uses custom payload keys mediaUrl and mediaType NSDictionary *userInfo = request.content.userInfo; if (userInfo == nil) { [self contentComplete]; return; } NSString *mediaUrl = userInfo[@"mediaUrl"]; NSString *mediaType = userInfo[@"mediaType"]; if (mediaUrl == nil || mediaType == nil) { [self contentComplete]; return; } // load the attachment [self loadAttachmentForUrlString:mediaUrl withType:mediaType completionHandler:^(UNNotificationAttachment *attachment) { if (attachment) { self.bestAttemptContent.attachments = [NSArray arrayWithObject:attachment]; } [self contentComplete]; }]; } - (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 contentComplete]; } - (void)contentComplete { self.contentHandler(self.bestAttemptContent); } - (NSString *)fileExtensionForMediaType:(NSString *)type { NSString *ext = type; if ([type isEqualToString:@"image"]) { ext = @"jpg"; } return [@"." stringByAppendingString:ext]; } - (void)loadAttachmentForUrlString:(NSString *)urlString withType:(NSString *)type completionHandler:(void(^)(UNNotificationAttachment *))completionHandler { __block UNNotificationAttachment *attachment = nil; NSURL *attachmentURL = [NSURL URLWithString:urlString]; NSString *fileExt = [self fileExtensionForMediaType:type]; NSURLSession *session = [NSURLSession sessionWithConfiguration:[NSURLSessionConfiguration defaultSessionConfiguration]]; [[session downloadTaskWithURL:attachmentURL completionHandler:^(NSURL *temporaryFileLocation, NSURLResponse *response, NSError *error) { if (error != nil) { NSLog(@"%@", error.localizedDescription); } else { NSFileManager *fileManager = [NSFileManager defaultManager]; NSURL *localURL = [NSURL fileURLWithPath:[temporaryFileLocation.path stringByAppendingString:fileExt]]; [fileManager moveItemAtURL:temporaryFileLocation toURL:localURL error:&error]; NSError *attachmentError = nil; attachment = [UNNotificationAttachment attachmentWithIdentifier:@"" URL:localURL options:nil error:&attachmentError]; if (attachmentError) { NSLog(@"%@", attachmentError.localizedDescription); } } completionHandler(attachment); }] resume]; } @end
我在plist下面使用了服务扩展:
我的播放量是;
{ "aps": { "alert": { "title": "title", "body": "Your message Here", "mutable-content": "1", "category": "myNotificationCategory" } }, "mediaUrl": "https://upload.wikimedia.org/wikipedia/commons/thumb/2/2a/FloorGoban.JPG/1024px-FloorGoban.jpg", "mediaType": "image" }
请让我知道我错了。
提前致谢。