如何显示在 iOS 上使用 firebase-cpp-sdk 收到的 FCM 'data' 消息?
How to display FCM 'data' message received using firebase-cpp-sdk on iOS?
我需要在我的应用程序处于后台或被终止时显示通知。我可以使用 firebase-cpp-sdk 在 iOS 上显示 FCM 'notification' 消息没有问题,我尝试了 quickstart-cpp/messaging/testapp
并且它只是工作。但是当应用程序处于后台或前台时收到 'data' 消息时 - 没有显示通知,我只是在日志中看到收到消息。
我按照许多答案的建议在消息中使用 "content_available": true
。这有助于实际接收 'data' 消息,正如我在日志中看到的那样,但该消息未显示。
我尝试了传统的 HTTP 和 HTTP v1 协议,结果是一样的。
遗留 HTTP 消息的示例是:
{
"data": {
"body": "Entrance door Intrusion at 2 Jun 2020 01:32:08",
"title": "Intrusion"
},
"content_available": true,
"to": "fcm_device_token_here"
}
我是否需要像 Android 那样手动创建通知?或者还有其他一些方法吗?
回答我自己的问题 - 是的,我创建了一个本地通知。为此,我使用了 qt-notification 库,因为我使用的是 QT,但显示通知的代码示例如下(取自项目):
// create content
UNMutableNotificationContent *content = [[UNMutableNotificationContent alloc] init];
content.title = title.toNSString(); // your title
content.body = caption.toNSString(); // your notification text
content.sound = !sound.isEmpty() ? [UNNotificationSound soundNamed: sound.toNSString()] : [UNNotificationSound defaultSound]; // your sound
// content.sound = [UNNotificationSound criticalSoundNamed: sound.toNSString() withAudioVolume: 1.0]; // For that you need Apple's permission
content.badge = @([[UIApplication sharedApplication] applicationIconBadgeNumber] + 1);
// create trigger time
UNTimeIntervalNotificationTrigger *trigger = [UNTimeIntervalNotificationTrigger triggerWithTimeInterval:1 repeats:NO];
// unique identifier
NSString* identifierNSString = identifier.toNSString();
// create notification request
UNNotificationRequest *request = [UNNotificationRequest requestWithIdentifier:identifierNSString
content:content trigger:trigger];
// add request
UNUserNotificationCenter *center = [UNUserNotificationCenter currentNotificationCenter];
center.delegate = id(m_Delegate);
[center addNotificationRequest:request withCompletionHandler:^(NSError * _Nullable error) {
if (error) {
NSLog(@"Local Notification failed");
}
}];
我需要在我的应用程序处于后台或被终止时显示通知。我可以使用 firebase-cpp-sdk 在 iOS 上显示 FCM 'notification' 消息没有问题,我尝试了 quickstart-cpp/messaging/testapp
并且它只是工作。但是当应用程序处于后台或前台时收到 'data' 消息时 - 没有显示通知,我只是在日志中看到收到消息。
我按照许多答案的建议在消息中使用 "content_available": true
。这有助于实际接收 'data' 消息,正如我在日志中看到的那样,但该消息未显示。
我尝试了传统的 HTTP 和 HTTP v1 协议,结果是一样的。
遗留 HTTP 消息的示例是:
{
"data": {
"body": "Entrance door Intrusion at 2 Jun 2020 01:32:08",
"title": "Intrusion"
},
"content_available": true,
"to": "fcm_device_token_here"
}
我是否需要像 Android 那样手动创建通知?或者还有其他一些方法吗?
回答我自己的问题 - 是的,我创建了一个本地通知。为此,我使用了 qt-notification 库,因为我使用的是 QT,但显示通知的代码示例如下(取自项目):
// create content
UNMutableNotificationContent *content = [[UNMutableNotificationContent alloc] init];
content.title = title.toNSString(); // your title
content.body = caption.toNSString(); // your notification text
content.sound = !sound.isEmpty() ? [UNNotificationSound soundNamed: sound.toNSString()] : [UNNotificationSound defaultSound]; // your sound
// content.sound = [UNNotificationSound criticalSoundNamed: sound.toNSString() withAudioVolume: 1.0]; // For that you need Apple's permission
content.badge = @([[UIApplication sharedApplication] applicationIconBadgeNumber] + 1);
// create trigger time
UNTimeIntervalNotificationTrigger *trigger = [UNTimeIntervalNotificationTrigger triggerWithTimeInterval:1 repeats:NO];
// unique identifier
NSString* identifierNSString = identifier.toNSString();
// create notification request
UNNotificationRequest *request = [UNNotificationRequest requestWithIdentifier:identifierNSString
content:content trigger:trigger];
// add request
UNUserNotificationCenter *center = [UNUserNotificationCenter currentNotificationCenter];
center.delegate = id(m_Delegate);
[center addNotificationRequest:request withCompletionHandler:^(NSError * _Nullable error) {
if (error) {
NSLog(@"Local Notification failed");
}
}];