Google Firebase Cloud Messaging migration using REST API and the Azure portal
This article describes the core capabilities for the integration of Azure Notification Hubs with Firebase Cloud Messaging (FCM) v1. As a reminder, Google will stop supporting FCM legacy HTTP on June 20, 2024, so you must migrate your applications and notification payloads to the new format before then. All methods of onboarding will be ready for migration by March 1, 2024.
Important
As of June 2024, FCM legacy APIs will no longer be supported and will be retired. To avoid any disruption in your push notification service, you must migrate to the FCM v1 protocol as soon as possible.
Concepts for FCM v1
- A new platform type is supported, called FCM v1.
- New APIs, credentials, registrations, and installations are used for FCM v1.
Note
The existing FCM platform is referred to as FCM legacy in this article.
Migration steps
The Firebase Cloud Messaging (FCM) legacy API will be deprecated by July 2024. You can begin migrating from the legacy HTTP protocol to FCM v1 on March 1, 2024. You must complete the migration by June 2024. This section describes the steps to migrate from FCM legacy to FCM v1 using the Notification Hubs REST API.
REST API
The following section describes how to perform the migration using the REST API.
Step 1: Add FCM v1 credentials to hub
The first step is to add credentials via the Azure portal, a management-plane hub operation, or data-plane hub operation.
Create Google service account JSON file
In the Firebase console, select your project and go to Project settings.
Select the Service accounts tab, create a service account, and generate a private key from your Google service account.
Select Generate new private key to generate a JSON file. Download and open the file. Replace the values for
project_id
,private_key
, andclient_email
, as these are required for Azure Notification Hubs hub credential updates.OR
If you want to create a service account with customized access permission, you can create a service account through the IAM & Admin > Service Accounts page. Go to the page directly by clicking Manage service account permissions. You can create a service account that has one of the following roles:
- Firebase Admin (roles/firebase.admin)
- Firebase Grow Admin (roles/firebase.growthAdmin)
- Firebase Admin SDK Administrator Service Agent (roles/firebase.sdkAdminServiceAgent)
- Firebase SDK Provisioning Service Agent (roles/firebase.sdkProvisioningServiceAgent)
Option 1: Update FcmV1 credentials via the Azure portal
Go to your notification hub on the Azure portal, and select Settings > Google (FCM v1). Get the Private Key, Project ID, and Client Email values from the service account JSON file acquired from the previous section, and save them for later use.
Option 2: Update FcmV1 credentials via management plane hub operation
See the description of a NotificationHub FcmV1Credential.
Use API version: 2023-10-01-preview
FcmV1CredentialProperties:
Name Type clientEmail
string privateKey
string projectId
string
Option 3: Update FcmV1 credentials via data plane hub operation
See Create a notification hub and Update a notification hub.
- Use API version: 2015-01
- Make sure to put FcmV1Credential after GcmCredential, as the order is important.
For example, the following is the request body:
<NotificationHubDescription xmlns:i='http://www.w3.org/2001/XMLSchema-instance'
xmlns='http://schemas.microsoft.com/netservices/2010/10/servicebus/connect'>
<ApnsCredential>
<Properties>
<Property>
<Name>Endpoint</Name>
<Value>{_apnsCredential.Endpoint}</Value>
</Property>
<Property>
<Name>AppId</Name>
<Value>{_apnsCredential.AppId}</Value>
</Property>
<Property>
<Name>AppName</Name>
<Value>{_apnsCredential.AppName}</Value>
</Property>
<Property>
<Name>KeyId</Name>
<Value>{_apnsCredential.KeyId}</Value>
</Property>
<Property>
<Name>Token</Name>
<Value>{_apnsCredential.Token}</Value>
</Property>
</Properties>
</ApnsCredential>
<WnsCredential>
<Properties>
<Property>
<Name>PackageSid</Name>
<Value>{_wnsCredential.PackageSid}</Value>
</Property>
<Property>
<Name>SecretKey</Name>
<Value>{_wnsCredential.SecretKey}</Value>
</Property>
</Properties>
</WnsCredential>
<GcmCredential>
<Properties>
<Property>
<Name>GoogleApiKey</Name>
<Value>{_gcmCredential.GoogleApiKey}</Value>
</Property>
</Properties>
</GcmCredential>
<FcmV1Credential>
<Properties>
<Property>
<Name>ProjectId</Name>
<Value>{_fcmV1Credential.ProjectId}</Value>
</Property>
<Property>
<Name>PrivateKey</Name>
<Value>{_fcmV1Credential.PrivateKey}</Value>
</Property>
<Property>
<Name>ClientEmail</Name>
<Value>{_fcmV1Credential.ClientEmail}</Value>
</Property>
</Properties>
</FcmV1Credential>
</NotificationHubDescription>
Step 2: Manage registration and installation
For direct send scenarios, proceed directly to step 3. If you're using one of the Azure SDKs, see the SDKs article.
Option 1: Create FCM v1 registration or update GCM registration to FCM v1
If you have an existing GCM registration, update the registration to FcmV1Registration. See Create or update a registration. If you don't have an existing GcmRegistration, create a new registration as FcmV1Registration. See Create a registration. The registration request body should appear as in the following example:
// FcmV1Registration
<?xml version="1.0" encoding="utf-8"?>
<entry xmlns="http://www.w3.org/2005/Atom">
<content type="application/xml">
<FcmV1RegistrationDescription xmlns:i="http://www.w3.org/2001/XMLSchema-instance"
xmlns="http://schemas.microsoft.com/netservices/2010/10/servicebus/connect">
<Tags>myTag, myOtherTag</Tags>
<FcmV1RegistrationId>{deviceToken}</FcmV1RegistrationId>
</FcmV1RegistrationDescription>
</content>
</entry>
// FcmV1TemplateRegistration
<?xml version="1.0" encoding="utf-8"?>
<entry xmlns="http://www.w3.org/2005/Atom">
<content type="application/xml">
<FcmV1TemplateRegistrationDescription xmlns:i="http://www.w3.org/2001/XMLSchema-instance"
xmlns="http://schemas.microsoft.com/netservices/2010/10/servicebus/connect">
<Tags>myTag, myOtherTag</Tags>
<FcmV1RegistrationId>{deviceToken}</FcmV1RegistrationId>
<BodyTemplate><![CDATA[ {BodyTemplate}]]></BodyTemplate>
</FcmV1TemplateRegistrationDescription>
</content>
</entry>
Option 2: Create FCM c1 installation or update GCM installation to FCM v1
See Create or overwrite an installation and set platform
to FCMV1
.
Step 3: Send a push notification
Option 1: Debug send
Use this procedure to test notifications prior to option 2, 3, or 4. See Notification Hubs - Debug Send.
Note
Use API version: 2023-10-01-preview.
In the header:
Request header | Value |
---|---|
Content-Type |
application/json;charset=utf-8 |
ServiceBusNotification-Format |
Set to fcmV1 or template |
Servicebusnotification-Tags |
{single tag identifier} |
Test a payload with the following structure via debug send. Note that FcmV1 introduces a significant change in the structuring of the JSON message payload:
- The entire payload moved under a message object.
- Android-specific options moved to the Android object and
time_to_live
is nowttl
with a string value. - The
data
field now allows only a flat string-to-string mapping. - For more information, see the FCM reference.
Alternatively, you can perform a test send (debug send) via the Azure portal:
Option 2: Direct send
Perform a direct send. In the request header, set ServiceBusNotification-Format
to fcmV1
.
Option 3: FcmV1 native notification (audience send)
Perform an FcmV1 native notification send. See Send a Google Cloud Messaging (GCM) native notification. In the request header, set ServiceBusNotification-Format
to fcmV1
. For example, in the request body:
{
"message": {
"notification": {
"title": "Breaking News",
"body": "FcmV1 is ready."
},
"android": {
"data": {
"name": "wrench",
"mass": "1.3kg",
"count": "3"
}
}
}
}
Option 4: template notification
You can test template sends with a new request body following the new JSON payload structure. No other changes need to be made. See Send a template notification.