[SWIFT] Faire des notifications PUSH avec des images avec Firebase Cloud Messaging

Vous pouvez facilement envoyer des notifications PUSH à l'aide de Firebase Cloud Messaging. À ce moment-là, vous pouvez également joindre une image comme celle-ci. IMG_3414.jpg

Il existe également un Document officiel sur la façon de le mettre en œuvre. Comme il a été écrit en Objective-C, j'ai écrit l'exemple de code pour la version Swift.

Aperçu

L'URL de l'image sera transmise par l'expéditeur de la notification PUSH. L'image elle-même n'est pas incluse dans la notification PUSH.

Après avoir reçu la notification PUSH sur l'iPhone Il semble télécharger l'image à partir de l'URL qu'il contient.

L'extension de l'application Notification Service est utilisée pour cette partie après avoir atteint le côté iPhone. L'extension d'application du service de notification est une fonction qui peut être traitée après avoir reçu une notification PUSH. Cependant, vous n'avez pas à trop réfléchir car le côté Firebase Cloud Messaging gère le traitement détaillé.

Notification Service app extension

Tout d'abord, apprenons à connaître les bases de l'extension d'application Notification Service. Voyons un aperçu dans cet article.

[iOS 10] Modifier la charge utile de notification à distance à l'aide de l'extension d'application Service de notification #wwdc

L'extension de l'application Notification Service n'est pas seulement une fonction pour afficher des images L'image du traitement après réception de la notification PUSH en général est importante.

la mise en oeuvre

Mettons-le en œuvre. Créez NotificationService.swift en vous référant à l'article précédent.

Implémentation basée sur Official Document.

Firebase ne fait que la ligne suivante À part les lignes suivantes, le code de génération initiale de NotificationService.swift convient.

[[FIRMessaging extensionHelper] populateNotificationContent:self.bestAttemptContent withContentHandler:contentHandler];

Si vous changez ceci en Swift ...

Messaging.serviceExtension().populateNotificationContent(bestAttemptContent, withContentHandler: contentHandler)

Ce sera.

Le code final ressemble à ceci:

//
//  NotificationService.swift
//  NotificationService
//
//  Created by yoneapp on 2020/11/07.
//

import UserNotifications
import Firebase

class NotificationService: UNNotificationServiceExtension {

    var contentHandler: ((UNNotificationContent) -> Void)?
    var bestAttemptContent: UNMutableNotificationContent?

    override func didReceive(_ request: UNNotificationRequest, withContentHandler contentHandler: @escaping (UNNotificationContent) -> Void) {
        self.contentHandler = contentHandler
        bestAttemptContent = (request.content.mutableCopy() as? UNMutableNotificationContent)
        
        if let bestAttemptContent = bestAttemptContent {
            // Modify the notification content here...
            bestAttemptContent.title = "\(bestAttemptContent.title) [modified]"
            
            Messaging.serviceExtension().populateNotificationContent(bestAttemptContent, withContentHandler: contentHandler)
        }
    }
    
    override func 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.
        if let contentHandler = contentHandler, let bestAttemptContent =  bestAttemptContent {
            contentHandler(bestAttemptContent)
        }
    }

}

Parce que l'extension d'application Notification Service a plus de cibles N'oubliez pas d'ajouter la bibliothèque Firebase à votre fichier pod. Décrivez le pod pour chaque schéma comme suit.

# Uncomment the next line to define a global platform for your project
# platform :ios, '9.0'

target 'ImagePushSample' do
  # Comment the next line if you don't want to use dynamic frameworks
  use_frameworks!

  # Pods for ImagePushSample
  pod 'Firebase/Analytics'
  pod 'Firebase/Messaging'
  
  target 'ImagePushSampleTests' do
    inherit! :search_paths
    # Pods for testing
  end

  target 'ImagePushSampleUITests' do
    # Pods for testing
  end
end

target 'NotificationService' do
  use_frameworks!

  pod 'Firebase/Analytics'
  pod 'Firebase/Messaging'
end

Contrôle de fonctionnement

Lors de la vérification du fonctionnement, à partir de l'écran de gestion Firebase comme celui-ci Confirmez en envoyant une notification PUSH avec l'URL de l'image.

CleanShot 2020-11-07 at 14.45.20@2x.png

Recommended Posts

Faire des notifications PUSH avec des images avec Firebase Cloud Messaging
Livraison push de l'application Spring vers Firebase Cloud Messaging
Mettre en œuvre Firebase Cloud Messaging dans les applications Android (2) -Recevoir des messages dans les applications
Envoyer des notifications push à l'aide de Notification Hubs en Java
S'entendre avec les conteneurs Java dans Cloud Run