使用Azure Notification Hubs安装模型时如何获取所有安装?

时间:2016-06-29 19:42:49

标签: c# .net azure push-notification azure-notificationhub

使用NotificationHubClient我可以使用GetAllRegistrationsAsync()获取所有registered devices。但是,如果我不使用注册模型而是使用安装模型,我该如何获得所有安装?有一些方法可以检索specific installation,但没有方法可以获取所有内容。

2 个答案:

答案 0 :(得分:2)

您是正确的,截至2016年7月,无法获得集线器的所有安装。将来,产品团队计划将此功能添加到安装模型中,但它将以不同的方式工作。您不必将其作为运行时操作,而是提供存储连接字符串,并且您将获得包含与集线器关联的所有内容的blob。

答案 1 :(得分:0)

很抱歉访问旧线程...但是从理论上讲,您可以使用GetAllRegistrationsAsyc来获取所有安装。我想这也会返回没有安装ID的所有内容,但是如果您选择的话,可以忽略它们。

可能看起来像这样

        var allRegistrations = await _hub.GetAllRegistrationsAsync(0);
        var continuationToken = allRegistrations.ContinuationToken;
        var registrationDescriptionsList = new List<RegistrationDescription>(allRegistrations);
        while (!string.IsNullOrWhiteSpace(continuationToken))
        {
            var otherRegistrations = await _hub.GetAllRegistrationsAsync(continuationToken, 0);
            registrationDescriptionsList.AddRange(otherRegistrations);
            continuationToken = otherRegistrations.ContinuationToken;
        }

        // Put into DeviceInstallation object
        var deviceInstallationList = new List<DeviceInstallation>();

        foreach (var registration in registrationDescriptionsList)
        {
            var deviceInstallation = new DeviceInstallation();

            var tags = registration.Tags;
            foreach(var tag in tags)
            {
                if (tag.Contains("InstallationId:"))
                {
                    deviceInstallation.InstallationId = new Guid(tag.Substring(tag.IndexOf(":")+1));
                }
            }
            deviceInstallation.PushHandle = registration.PnsHandle;
            deviceInstallation.Tags = new List<string>(registration.Tags);

            deviceInstallationList.Add(deviceInstallation);
        }

我不建议这是编写的最干净的代码块,但这对我们有用。无论如何,我们仅将其用于调试类型目的