My question might be bad, but I can't find any answer anywhere, I'm lost...
So I want to display a rich notification with a nice image in iOS 10+.
For this I'm using FCM and an UNNotificationServiceExtension which, if I understood correctly, should get the Data payload, find the image URL and load it before modifying the UNNotificationContent.
The issue I have is that I can't get a hold of this "data".
What I'm sending to FCM is the following :
{
"to": "device_token",
"content_available": true,
"mutable_content": true,
"badge" : 9,
"notification": {
"title": "You still need the iPhone ?",
"body": "Give it back if you finished you tests !"
},
"data": {
"message": "test !",
"mediaUrl": "http://usr.audioasylum.com/images/2/20352/Cat_and_rose.jpg"
},
"priority": "high"
}
What I get in the phone is :
{
aps = {
alert = {
body = "Give it back if you finished you tests !";
title = "You still need the iPhone ?";
};
"content-available" = 1;
"mutable-content" = 1;
};
"gcm.message_id" = "0:1489054783357873%1ee659bb1ee659bb";
mediaUrl = "http://usr.audioasylum.com/images/2/20352/Cat_and_rose.jpg";
message = "Offer!";
}
As I understand it, the mediaURL and message should end up in "aps" and not outside, which is why I can't find them in the extension.
And inside the extension I get : (I split it on coma for more readability)
<UNNotificationRequest: 0x117d3c170;
identifier: FDC13B60-FE5A-40C6-896D-06D422043CCE
content: <UNNotificationContent: 0x117d3a650; title: You still need the iPhone ?
subtitle: (null)
body: Give it back if you finished you tests !
categoryIdentifier:
launchImageName:
peopleIdentifiers: ()
threadIdentifier:
attachments: ()
badge: (null)
sound: (null)
hasDefaultAction: YES
shouldAddToNotificationsList: YES
shouldAlwaysAlertWhileAppIsForeground: NO
shouldLockDevice: NO
shouldPauseMedia: NO
isSnoozeable: NO
fromSnooze: NO
darwinNotificationName: (null)
darwinSnoozedNotificationName: (null)
trigger: <UNPushNotificationTrigger: 0x117d3fe90; contentAvailable: YES
mutableContent: YES>>
Is the problem how I send information with FCM, or the way I retrieve them? Maybe it's the way I treat them ?
As always, thanks for the help!
Edit : Added code for the receiver (which is just a print in the extension)
@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];
NSLog(@"------------------- %@ -------------------", request);
// Modify the notification content here...
self.bestAttemptContent.title = [NSString stringWithFormat:@"%@ [modified]", self.bestAttemptContent.title];
self.bestAttemptContent.body = [NSString stringWithFormat:@"%@", request.content];
self.contentHandler(self.bestAttemptContent);
}
I think you should check
self.bestAttemptContent?.userInfo
formediaUrl
data.I'm seeing two main questions here:
You mentioned that you're expecting that the
mediaUrl
parameter should be insideaps
.Seeing as you included the
mediaUrl
in yourdata
payload, the behavior is just as expected (mediaUrl
is outsideaps
). To get the details, you'll have to implement what was stated in the documentation:P.S.: I'm not entirely sure if you already tried this out, but there wasn't any similar code in your post so I figured this should be tried.
The thing is, there are only specific parameters that are to be expected inside
aps
:At the same time, there are only some corresponding parameters that you can use in FCM that will appear in the
aps
payload. With that, you should simply expect that any custom key-value pair you include will be outside theaps
parameter. From the Apple docs above (emphasis mine):With regards to the blog you linked in the comments, I haven't looked to deeply into it since it's not really using FCM, where it would be best to presume that the behavior is different.