你当前正在访问 Microsoft Azure Global Edition 技术文档网站。 如果需要访问由世纪互联运营的 Microsoft Azure 中国技术文档网站,请访问 https://docs.azure.cn。
使用 Azure SDK 进行 Google Firebase Cloud Messaging 迁移
Google 将于 2024 年 7 月弃用 Firebase Cloud Messaging (FCM) 旧版 API。 可以在 2024 年 3 月 1 日开始从旧版 HTTP 协议迁移到 FCM v1。 必须在 2024 年 6 月之前完成迁移。 本部分介绍了使用 Azure SDK 从 FCM 旧版迁移到 FCM v1 的步骤。
重要
自 2024 年 6 月起,FCM 旧 API 将不再受支持并且将会停用。 若要避免推送通知服务中的任何中断,必须尽快迁移到 FCM v1 协议。
先决条件
- 确保 Firebase Cloud Messaging API (V1) 已在“Cloud Messaging”下的 Firebase 项目设置中启用。
- 确保 FCM 凭据已更新。 遵循 REST API 指南中的步骤 1。
Android SDK
将 SDK 版本更新到应用程序的 build.gradle 文件中的
2.0.0
。 例如:// 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' }
更新有效负载模板。 如果不使用模板,则可以跳过此步骤。
有关 FCM v1 有效负载结构,请参阅 FCM REST 参考。 有关从 FCM 旧版有效负载迁移到 FCM v1 有效负载的信息,请参阅更新发送请求的有效负载。
例如,如果使用注册:
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);
如果使用安装:
InstallationTemplate testTemplate = new InstallationTemplate(); testTemplate.setBody("{\"message\":{\"android\":{\"data\":{\"message\":\"{'Notification Hub test notification: ' + $(myTextProp)}\"}}}}"); NotificationHub.setTemplate("testTemplate", testTemplate);
服务器 SDK(数据平面)
将 SDK 包更新到最新版本 (4.2.0):
SDK GitHub 名称 SDK 包名称 版本 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 例如,在 .csproj 文件中:
<PackageReference Include="Microsoft.Azure.NotificationHubs" Version="4.2.0" />
将
FcmV1Credential
添加到通知中心。 此步骤是一次性设置。 除非具有许多中心,并且想要自动执行此步骤,否则可以使用 REST API 或 Azure 门户添加 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);
管理注册和安装。 对于注册,请使用
FcmV1RegistrationDescription
注册 FCM v1 设备。 例如:// Create new Registration var deviceToken = "device-token"; var tags = new HashSet<string> { "tag1", "tag2" }; FcmV1RegistrationDescription registration = await hub. CreateFcmV1NativeRegistrationAsync(deviceToken, tags);
对于 Java,请使用
FcmV1Registration
注册 FCMv1 设备:// Create new registration NotificationHub client = new NotificationHub(connectionString, hubName); FcmV1Registration registration = client.createRegistration(new FcmV1Registration("fcm-device-token"));
对于 JavaScript,请使用
createFcmV1RegistrationDescription
注册 FCMv1 设备:// Create FCM V1 registration const context = createClientContext(connectionString, hubName); const registration = createFcmV1RegistrationDescription({ fcmV1RegistrationId: "device-token", }); const registrationResponse = await createRegistration(context, registration);
对于安装,请通过
Installation
将NotificationPlatform.FcmV1
用作平台,或使用FcmV1Installation
创建 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);
对于 Java,请将
NotificationPlatform.FcmV1
用作平台:// Create new installation NotificationHub client = new NotificationHub(connectionString, hubName); client.createOrUpdateInstallation(new Installation("installation-id", NotificationPlatform.FcmV1, "device-token"));
对于 JavaScript,请使用
createFcmV1Installation
创建 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);
请注意以下事项:
- 如果设备注册发生在客户端应用上,请先更新客户端应用以在 FCMv1 平台下注册。
- 如果设备注册发生在服务器上,则可以提取所有注册/安装,并将其更新到服务器上的 FCMv1。
将通知发送到 FCMv1。 在发送面向 FCMv1 的通知时,请使用
FcmV1Notification
。 例如:// 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);