使用 Azure SDK 進行 Google Firebase 雲端通訊移轉
Google 將在 2024 年 7 月之前取代 Firebase 雲端通訊 (FCM) 舊版 API。 您可以在 2024 年 3 月 1 日開始從舊版 HTTP 通訊協定移轉至 FCM v1。 您必須在 2024 年 6 月前完成移轉。 本節說明使用 Azure SDK 從 FCM 舊版移轉至 FCM v1 的步驟。
重要
自 2024 年 6 月起,FCM 舊版 API 將不再受到支援,且將會淘汰。 若要避免推播通知服務中的任何中斷,您必須 儘快移轉至 FCM v1 通訊協定 。
必要條件
- 確定 Firebase 雲端傳訊 API (V1) 已啟用於 Cloud Messaging 下的 Firebase 項目設定中。
- 確定已更新 FCM 認證。 遵循 REST API 指南中的步驟 1。
Android SDK
在應用程式的 build.gradle 檔案中,將 SDK 版本更新為
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);
針對安裝,請使用
NotificationPlatform.FcmV1
作為具有Installation
的平臺,或使用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);