如果生存时间大于 1 天,Azure 通知中心注册到期日期不会更新

Posted

技术标签:

【中文标题】如果生存时间大于 1 天,Azure 通知中心注册到期日期不会更新【英文标题】:Azure notification hub registration expiration date does not update if time to live is greater than 1 day 【发布时间】:2022-01-10 01:41:51 【问题描述】:

背景:

我正在开发一个带有 .net-core 后端的 react 本机应用程序,并且我正在使用 Azure 通知中心发送推送通知。我不希望在通知中心堆积无用的 ID,所以我想设置一个在通知中心的时间,并且每次用户登录时,我都会使用 createOrUpdateInstallationAsync 更新中心。当我将生存时间设置为一天时,我可以看到每次登录应用程序时注册的到期时间都会更新,但是如果我将生存时间设置为超过此时间,则到期日期将停止更新。

问题:

为什么过期日期不会更新以延长生存时间,以及实现我想要实现的目标的推荐方法是什么?当我试图找到这个问题的答案时,我所能看到的只是关于如何更新生存时间的指南。

【问题讨论】:

【参考方案1】:

这是更新到期日期的一种解决方法 正如@ehuna 所建议的, "确保您在控制台应用程序中安装了以下nuget packages

安装包 Microsoft.Azure.Management.NotificationHubs -Version 2.3.2-preview 安装包 Microsoft.Azure.Management.ResourceManager.Fluent -Version 1.38.0

写了下面的方法

  private async Task SetNotificationHubRegistrationTimeToLive()
    
        // Login to Azure using az login
        // az account set -s <name or ID of subscription> to set the proper subscription
        // Get credentials: "az ad sp create-for-rbac --sdk-auth"
        // See https://docs.microsoft.com/en-us/cli/azure/get-started-with-azure-cli?view=azure-cli-latest and https://docs.microsoft.com/en-us/azure/cloud-shell/quickstart

        var clientId = "your client id";
        var clientSecret = "your client secret";
        var tenantId = "your tenant id";

        var credentials =
                SdkContext
                .AzureCredentialsFactory
                .FromServicePrincipal(
                    clientId,
                    clientSecret,
                    tenantId,
                    AzureEnvironment.AzureGlobalCloud);

        var client = new NotificationHubsManagementClient(credentials)
        
            SubscriptionId = "yoursubscriptionid"
        ;

        var resourceGroupName = "yourgroup";
        var namespaceName = "yournamespace"; // this should NOT be the namespace full name beam-dev-notification-hub-namespace-free.servicebus.windows.net
        var notificationHubName = "yournotificationhub";

        var timeSpan = new TimeSpan(days: 90, hours: 0, minutes: 0, seconds: 0);
        var registrationTtlTimeSpanString = timeSpan.ToString();

        var notificationHub = await client.NotificationHubs.GetAsync(resourceGroupName, namespaceName, notificationHubName);

        await client
              .NotificationHubs
              .CreateOrUpdateAsync(
                resourceGroupName,
                namespaceName,
                notificationHubName,
                new NotificationHubCreateOrUpdateParameters(notificationHub.Location)
                
                    RegistrationTtl = registrationTtlTimeSpanString
                );
    

然后,您将在通知中心属性的https://portal.azure.com/ 中看到注册时间为 90 天。”

更多信息请参考以下链接:

所以线程:Azure Notification Hub sends pushes to registrations with expired time to live 所以线程:How to update Expiration Time in Azure Notification Hub registration? 博客:How to set expiration date for azure notification hub registration android

【讨论】:

感谢您的回答。我可以改变生活的时间没有问题。我的问题是为什么调用 CreateOrUpdateInstallationAsync 时到期日期没有更新。我已将生存时间定为 90 天。但是现在当我更新安装时,有时到期日期会更新,有时不会。我想知道为什么当 CreateOrUpdateInstallationAsync 执行没有任何错误时它无法更新到期日期。 谢谢@J.Kennedy,您能否参考这个 MS DOC :docs.microsoft.com/en-us/azure/notification-hubs/… 我已阅读文档,但这并不能回答我的问题。如果确实如此,而我只是错过了,您能否提供更多关于我的问题在文档中的答案的信息?

以上是关于如果生存时间大于 1 天,Azure 通知中心注册到期日期不会更新的主要内容,如果未能解决你的问题,请参考以下文章

创建注册通知中心 Azure PHP

缺少通知中心设备注册

如何向 Azure 通知中心注册的每个设备发送不同的推送通知?

将通知模板从应用后端注册到 Azure 通知中心

Azure 通知中心和 Apple APNS 推送通知取消注册设备

如何在 iOS 的 Azure 移动应用通知中心注册目标推送通知