Warum erscheint das Bild nicht in iOS-Push-Benachrichtigungen mit Firebase Cloud Messaging?IOS

Programmierung für iOS
Guest
 Warum erscheint das Bild nicht in iOS-Push-Benachrichtigungen mit Firebase Cloud Messaging?

Post by Guest »

Ich implementieren Push-Benachrichtigungen mit einem Bild in meiner iOS-App mithilfe von Firebase Cloud Messaging (FCM). Ich habe eine benutzerdefinierte NotificationServiceExtension erstellt, um das Herunterladen und Anhängen von Bildern zu verwalten. Das Bild wird jedoch nicht in der Benachrichtigung angezeigt.
Hier ist der Code, den ich verwende:
NotificationService.swift::

Code: Select all

import UIKit
import UserNotifications
import FirebaseMessaging

class NotificationService: UNNotificationServiceExtension {
private var contentHandler: ((UNNotificationContent) -> Void)?
private var bestAttemptContent: UNMutableNotificationContent?
override func didReceive(_ request: UNNotificationRequest, withContentHandler contentHandler: @escaping (UNNotificationContent) -> Void) {
self.contentHandler = contentHandler
bestAttemptContent = (request.content.mutableCopy() as? UNMutableNotificationContent)defer {
contentHandler(bestAttemptContent ?? request.content)
}
guard let attachment = request.attachment else {
return
}
bestAttemptContent?.attachments = [attachment]
}
override func serviceExtensionTimeWillExpire() {
if let contentHandler = contentHandler, let bestAttemptContent = bestAttemptContent {
contentHandler(bestAttemptContent)
}
}
}

extension UNNotificationRequest {
var attachment: UNNotificationAttachment? {
guard let attachmentURL = content.userInfo["image"] as? String,
let imageData = try? Data(contentsOf: URL(string: attachmentURL)!) else {
return nil
}
return try? UNNotificationAttachment(data: imageData, options: nil)
}
}

extension UNNotificationAttachment {
convenience init(data: Data, options: [NSObject: AnyObject]?) throws {
let fileManager = FileManager.default
let temporaryFolderName = ProcessInfo.processInfo.globallyUniqueString
let temporaryFolderURL = URL(fileURLWithPath: NSTemporaryDirectory())
.appendingPathComponent(temporaryFolderName, isDirectory: true)
try fileManager.createDirectory(at: temporaryFolderURL, withIntermediateDirectories: true, attributes: nil)

let imageFileIdentifier = UUID().uuidString + ".jpg"
let fileURL = temporaryFolderURL.appendingPathComponent(imageFileIdentifier)
try data.write(to: fileURL)
try self.init(identifier: imageFileIdentifier, url: fileURL, options: options)
}
}
FCM-Nutzlast
Hier ist die Nutzlast, die ich vom Server sende:

Code: Select all

message = messaging.Message(
data=convert_to_firebase_compatible(data),
token=registration_id,
android=messaging.AndroidConfig(
priority='high',
ttl=ttl
),
notification=messaging.Notification(
title=data.get('title', 'ABC'),
body=data.get('message', ''),
image=data.get('image_url', '')
),
apns=messaging.APNSConfig(
headers={
'apns-priority': '10',
},
payload=messaging.APNSPayload(
aps=messaging.Aps(
sound='default',
mutable_content='1'
),
),
fcm_options=messaging.APNSFCMOptions(
image=data.get('image_url', '')
)
),
)
Problem:
  • Die Benachrichtigungen werden auf iOS empfangen, aber das Bild wird nicht angezeigt.
  • Ich habe bestätigt, dass die Bild-URL in der Nutzlast „userInfo“ gültig und zugänglich ist.
Durchgeführte Schritte:
  • NotificationServiceExtension zur Verarbeitung von Bildern hinzugefügt Anhang.
  • Überprüft, dass die image_url in der Nutzlast korrekt und zugänglich ist.
  • Bestätigt, dass mutable_content in der Nutzlast auf „1“ gesetzt ist.
Fragen:
  • Verpassen mir irgendwelche Schritte beim Einrichten der NotificationServiceExtension für die Verarbeitung von Bildern? ?
  • Ist die FCM-Nutzlast richtig strukturiert für das Senden von Bildern in iOS-Benachrichtigungen?
  • Muss ich noch etwas für APNs oder FCM konfigurieren, um Bilder in Benachrichtigungen zu unterstützen?

Quick Reply

Change Text Case: 
   
  • Similar Topics
    Replies
    Views
    Last post