Migrazione di Google Firebase Cloud Messaging con Azure SDK

Google deprecherà l'API legacy Firebase Cloud Messaging (FCM) entro luglio 2024. È possibile iniziare la migrazione dal protocollo HTTP legacy a FCM v1 il 1° marzo 2024. È necessario completare la migrazione entro giugno 2024. Questa sezione descrive i passaggi per eseguire la migrazione da FCM legacy a FCM v1 usando gli SDK di Azure.

Importante

A partire da giugno 2024, le API legacy FCM non saranno più supportate e verranno ritirati. Per evitare interruzioni nel servizio di notifica push, è necessario eseguire la migrazione al protocollo FCM v1 il prima possibile.

Prerequisiti

  • Assicurarsi che l'API Firebase Cloud Messaging (V1) sia abilitata nell'impostazione del progetto Firebase in Messaggistica cloud.
  • Assicurarsi che le credenziali FCM siano aggiornate. Seguire il passaggio 1 nella guida all'API REST.

Android SDK

  1. Aggiornare la versione dell'SDK a 2.0.0 nel file build.gradle dell'applicazione. Ad esempio:

    // This is not a complete build.gradle file; it only highlights the portions you need to update. 
    
    dependencies { 
        // Ensure the following line is updated in your app/library's "dependencies" section.
    implementation 'com.microsoft.azure:notification-hubs-android-sdk:2.0.0' 
        // optionally, use the fcm optimized SKU instead: 
        // implementation 'com.microsoft.azure:notification-hubs-android-sdk-fcm:2.0.0' 
    }
    
  2. Aggiornare il modello di payload. Se non si usano modelli, è possibile ignorare questo passaggio.

    Vedere le informazioni di riferimento su FCM REST per la struttura del payload FCM v1. Per informazioni sulla migrazione dal payload legacy FCM al payload FCM v1, vedere Aggiornare il payload delle richieste di invio.

    Ad esempio, se si usano registrazioni:

    NotificationHub hub = new NotificationHub(BuildConfig.hubName, BuildConfig.hubListenConnectionString, context);
    String template = "{\"message\":{\"android\":{\"data\":{\"message\":\"{'Notification Hub test notification: ' + $(myTextProp)}\"}}}}";
    hub.registerTemplate(token, "template-name", template);
    

    Se si usano installazioni:

    InstallationTemplate testTemplate = new InstallationTemplate(); 
    testTemplate.setBody("{\"message\":{\"android\":{\"data\":{\"message\":\"{'Notification Hub test notification: ' + $(myTextProp)}\"}}}}");  
    NotificationHub.setTemplate("testTemplate", testTemplate);
    

SDK server (piano dati)

  1. Aggiornare il pacchetto SDK alla versione più recente (4.2.0):

    Nome GitHub SDK Nome pacchetto SDK Versione
    azure-notificationhubs-dotnet Microsoft.Azure.NotificationHubs 4.2.0
    azure-notificationhubs-java-backend com.windowsazure.Notification-Hubs-java-sdk 1.1.0
    azure-sdk-for-js @azure/notification-hubs 1.1.0

    Ad esempio, nel file con estensione csproj :

    <PackageReference Include="Microsoft.Azure.NotificationHubs" Version="4.2.0" />
    
  2. Aggiungere l'oggetto FcmV1Credential all'hub di notifica. Questo passaggio è una configurazione monouso. A meno che non si disponga di molti hub e si voglia automatizzare questo passaggio, è possibile usare l'API REST o il portale di Azure per aggiungere le credenziali FCM v1:

    // Create new notification hub with FCM v1 credentials
    var hub = new NotificationHubDescription("hubname"); 
    hub.FcmV1Credential = new FcmV1Credential("private-key", "project-id", "client-email"); 
    hub = await namespaceManager.CreateNotificationHubAsync(hub); 
    
    // Update existing notification hub with FCM v1 credentials 
    var hub = await namespaceManager.GetNotificationHubAsync("hubname", CancellationToken.None); 
    hub.FcmV1Credential = new FcmV1Credential("private-key", "project-id", "client-email"); 
    hub = await namespaceManager.UpdateNotificationHubAsync(hub, CancellationToken.None);
    
    // Create new notification hub with FCM V1 credentials
    NamespaceManager namespaceManager = new NamespaceManager(namespaceConnectionString);
    NotificationHubDescription hub = new NotificationHubDescription("hubname");
    hub.setFcmV1Credential(new FcmV1Credential("private-key", "project-id", "client-email"));
    hub = namespaceManager.createNotificationHub(hub);
    
    // Updating existing Notification Hub with FCM V1 Credentials
    NotificationHubDescription hub = namespaceManager.getNotificationHub("hubname");
    hub.setFcmV1Credential(new FcmV1Credential("private-key", "project-id", "client-email"));
    hub = namespaceManager.updateNotificationHub(hub);
    
  3. Gestire registrazioni e installazioni. Per le registrazioni, usare FcmV1RegistrationDescription per registrare i dispositivi FCM v1. Ad esempio:

    // Create new Registration
    var deviceToken = "device-token"; 
    var tags = new HashSet<string> { "tag1", "tag2" }; 
    FcmV1RegistrationDescription registration = await hub. CreateFcmV1NativeRegistrationAsync(deviceToken, tags);
    

    Per Java, usare FcmV1Registration per registrare i dispositivi FCMv1:

    // Create new registration
    NotificationHub client = new NotificationHub(connectionString, hubName);
    FcmV1Registration registration =  client.createRegistration(new FcmV1Registration("fcm-device-token"));
    

    Per JavaScript, usare createFcmV1RegistrationDescription per registrare i dispositivi FCMv1:

    // Create FCM V1 registration
    const context = createClientContext(connectionString, hubName);
    const registration = createFcmV1RegistrationDescription({
      fcmV1RegistrationId: "device-token",
    });
    const registrationResponse = await createRegistration(context, registration);
    

    Per le installazioni, usare NotificationPlatform.FcmV1 come piattaforma con Installationo per FcmV1Installation creare installazioni FCM v1:

    // Create new installation
    var installation = new Installation 
    { 
        InstallationId = "installation-id", 
        PushChannel = "device-token", 
        Platform = NotificationPlatform.FcmV1 
    }; 
    await hubClient.CreateOrUpdateInstallationAsync(installation); 
    
    // Alternatively, you can use the FcmV1Installation class directly 
    var installation = new FcmV1Installation("installation-id", "device-token"); 
    await hubClient.CreateOrUpdateInstallationAsync(installation);
    

    Per Java, usare NotificationPlatform.FcmV1 come piattaforma:

    // Create new installation
    NotificationHub client = new NotificationHub(connectionString, hubName);
    client.createOrUpdateInstallation(new Installation("installation-id", NotificationPlatform.FcmV1, "device-token"));
    

    Per JavaScript, usare createFcmV1Installation per creare un'installazione FCMv1:

    // Create FCM V1 installation
    const context = createClientContext(connectionString, hubName);
    const installation = createFcmV1Installation({
      installationId: "installation-id",
      pushChannel: "device-token",
    });
    const result = await createOrUpdateInstallation(context, installation);
    

    Tenere presenti le considerazioni seguenti:

    • Se la registrazione del dispositivo avviene nell'app client, aggiornare prima l'app client per eseguire la registrazione nella piattaforma FCMv1.
    • Se la registrazione del dispositivo avviene nel server, è possibile recuperare tutte le registrazioni/installazioni e aggiornarle a FCMv1 nel server.
  4. Inviare la notifica a FCMv1. Usare FcmV1Notification quando si inviano notifiche destinate a FCMv1. Ad esempio:

    // Send FCM v1 notification
    var jsonBody = "{\"message\":{\"android\":{\"data\":{\"message\":\"Notification Hub test notification\"}}}}"; 
    var n = new FcmV1Notification(jsonBody); 
    NotificationOutcome outcome = await hub.SendNotificationAsync(n, "tag");
    
    // Send FCM V1 Notification 
    NotificationHub client = new NotificationHub(connectionString, hubName);
    NotificationOutcome outcome = client.sendNotification(new FcmV1Notification("{\"message\":{\"android\":{\"data\":{\"message\":\"Notification Hub test notification\"}}}}"));
    
    // Send FCM V1 Notification
    const context = createClientContext(connectionString, hubName);
    const messageBody = `{
      "message": {
          "android": {
              "data": {
                  "message": "Notification Hub test notification"
              }
          }
      }
    }`;
    
    const notification = createFcmV1Notification({
      body: messageBody,
    });
    const result = await sendNotification(context, notification);
    

Passaggi successivi

Migrazione di Firebase Cloud Messaging tramite l'API REST