2013-02-14 2 views
1

Серверы GCM Google выдадут одну регистрацию GCM для каждой пары приложений/устройств. Поэтому, если у определенного пользователя есть ваше приложение на двух устройствах, каждое устройство будет иметь свою собственную регистрацию.Android GCM: проблемы с регистрацией идентификаторов регистрации в базе данных

Проблема я столкнулся в том, что я храню эти registrationIds на столе с двумя колонками:

+---------+-----------+ 
|userId |userGCMId + 
+---------+-----------+ 

где идент идентификатор пользователя на моем приложении, которое является одинаковым, независимо от устройства, он , а userGCMId - это регистрация, выданная Google.

Если я сделаю userId основным ключом этой таблицы, я не смогу сохранить userGCMId пользователя, если он установит мое приложение на втором устройстве, поскольку userId/primary ключ будет одинаковым для обоих (и, таким образом, это второе устройство не получит мои push-уведомления).

Я думал о создании первичного ключевого композита с использованием обоих столбцов, но регистрация GCM может достигать 4k (по словам инженера Google), поэтому теоретически это может быть до 4000 символов, и это тоже большой для первичного ключа.

Solutions Я рассматриваю:

  1. Поскольку на практике большинство GMC registrationIds 512 символов или короче, я полагал, что я мог бы сделать эту колонку с VARCHAR (512) и использовать его как часть первичного ключа ,

  2. Другой вариант - сохранить столбец userGCMid в виде текста и добавить третий столбец, на котором находится идентификатор, и сделать первичный ключ (userId, device).

Неужели кто-нибудь из вас решил это в прошлом? Любые идеи о наилучшем подходе?

Заранее спасибо

ответ

0

Я закончил с использованием варианта 2, и это, кажется, работает хорошо.

Возможно, вы также захотите использовать MAC-адрес устройства вместо своей модели, так как это позволит пользователю установить приложение на двух устройствах той же модели и получать push-уведомления для обоих.