Могу ли я получить регистрацию по токену устройства? - PullRequest
0 голосов
/ 10 июля 2019

Можно ли найти устройство по токену без загрузки всех регистраций? Должен ли я добавить токен устройства в качестве тега и посмотреть его на основании этого?

Мне нужно удалить предыдущие регистрации для устройства, если на том же устройстве добавлена ​​новая регистрация с новым пользователем.

1 Ответ

0 голосов
/ 13 июля 2019

Я добавил токен устройства в качестве тегов.Токены Android требуют двух тегов, потому что их длина превышает максимальную длину тега.

public static string FormatDeviceTokenTag(int index, string token) => $"DEVICE_TOKEN{index}:{token}";    

public static IList<string> GetDeviceTokenTags(string token)
{
    const int MaxTagLength = 120;

    var tag0 = FormatDeviceTokenTag(0, token);

    var tag0Clipped = tag0.Substring(0, Math.Min(tag0.Length, MaxTagLength));

    var tags = new List<string> { tag0Clipped };

    if (tag0.Length > MaxTagLength)
    {
        var tag1 = FormatDeviceTokenTag(1, tag0.Substring(MaxTagLength));

        if (tag1.Length > MaxTagLength)
        {
           throw new ArgumentException("Token too long");
        }

        tags.Add(tag1);
    }

    return tags;
}

Затем, чтобы найти совпадающие токены ...

async Task<IList<RegistrationDescription>> GetExistingRegistrations(string token, EnumMobileDeviceType deviceType)
{
    var tags = GetDeviceTokenTags(token);

    var registrations = await CreateClient().GetRegistrationsByTagAsync(tags.First(), 10000);

    var registrations2 = registrations.Where(r => tags.Count > 1 ?
        r.Tags.Contains(tags[1]) :
        !r.Tags.Any(t =>
            t.StartsWith(FormatDeviceTokenTag(1, string.Empty), StringComparison.Ordinal)));

    registrations2 = registrations2.Where(r =>
        (deviceType == EnumMobileDeviceType.Apple && r is AppleTemplateRegistrationDescription) ||
            (deviceType == EnumMobileDeviceType.Droid && r is GcmTemplateRegistrationDescription));

    return registrations2.ToList();
}

Какая громоздкая работа.Я что-то упустил в API?

...