Идентификатор регистрации Android C2DM

Я создаю приложение, использующее c2dm.

Я думаю, что я должен запрашивать регистрационный идентификатор всякий раз, когда запускается основное «намерение» моего приложения. Я делал это, но кажется, что каждый запрос приводит к новой строке, поэтому в моей базе данных накапливаются многочисленные идентификаторы регистрации для одного и того же устройства. Я предполагаю, что только один из них будет работать. Однако я не хочу просто удалять старые, потому что я хочу, чтобы мой пользователь мог получать уведомления более чем на одном устройстве, если он владеет более чем одним.

Как мне справиться с этим?


person Frank LaRosa    schedule 26.05.2011    source источник


Ответы (5)


Никогда не обновлять идентификатор, пока ваше приложение не будет установлено на вашем устройстве

Я реализовал C2DM. Если у вас есть более одного регистрационного идентификатора для одного устройства, то для отправки уведомления будет работать только последний идентификатор.

Когда вы регистрируете свое устройство на сервере Google, оно генерирует строку (как вы уже знаете), соответствующую этому идентификатору устройства. Но если вы снова регистрируетесь с использованием того же устройства, то предыдущее бесполезно.

Поэтому я предлагаю лучше сохранить информацию о том, что устройство уже зарегистрировано или нет. Если зарегистрировано, то не нужно перерегистрировать снова. Так как вы получите уведомление на основе вашего старого R_ID. просто отправьте этот R_ID на свой сервер для уведомления и сохраните флаг в своей базе данных, чтобы отслеживать регистрацию

person Tofeeq Ahmad    schedule 25.01.2012

Вы только должны запросить идентификатор регистрации, когда у вас его нет, и отправить его на свой сервер (тот, который будет отправлять сообщения C2DM). Странно, что вы продолжаете получать новый идентификатор, в моем собственном тестировании каждый раз, когда я регистрирую и отменяю регистрацию одного и того же приложения на одном и том же устройстве, я получаю один и тот же идентификатор. Я еще не проводил много тестов, но я предполагаю, что идентификатор будет меняться для каждого устройства и комбинации приложений.

person Andrew    schedule 28.05.2011
comment
Спасибо, я переключился на отправку только один раз. Можно ли предположить, что этот идентификатор действителен, пока установлено приложение? - person Frank LaRosa; 30.05.2011
comment
@andrew: когда вы отмените регистрацию своего устройства на сервере Google и зарегистрируетесь снова, вы получите новый идентификатор, не такой, как раньше. Но да, Фрэнк, если у вас есть один идентификатор, затем зарегистрируйтесь один раз и сохраните флаг в базе данных, он будет работать до тех пор, пока приложение установлен. Но вам нужно остановить управление, входящее в код c2dm, используя этот флаг - person Tofeeq Ahmad; 30.01.2012

Я сохраняю Registration_id с device_id в БД. Таким образом, у меня есть только одна запись для каждого устройства. Кроме того, регистрационный идентификатор сохраняется на устройстве в качестве общего предпочтения, поэтому мне не нужно каждый раз запрашивать новый...

Но я хотел бы знать, есть ли способ узнать, истек ли срок действия регистрационного идентификатора, который пользователь имеет на своем устройстве, или нет.

Любые идеи? Есть ли для этого умысел?

person Olivier    schedule 28.05.2011

Если вы зарегистрируетесь в облаке, возвращенный идентификатор регистрации будет действителен до тех пор, пока вы не получите намерение с дополнительной строкой «unregistered» (что произойдет только в том случае, если ваше приложение сознательно отменяет регистрацию в службе) ИЛИ Google отправит другое намерение регистрации с новой регистрацией. ID, и в этом случае настроенная вами система должна работать нормально.

Ваш сервер узнает, истек ли срок действия идентификатора регистрации, если он получит ответ 200 с данными «Error=NotRegistered». В этом случае вы должны удалить эту запись из своей БД.

http://code.google.com/android/c2dm/#server

person Kevin King    schedule 21.07.2011

Идентификатор регистрации устройства следует запрашивать с сервера C2DM только при первом запуске приложения после установки, а затем сохранять в базе данных (желательно вместе с идентификатором устройства, чтобы он был уникальным).

Идентификатор регистрации действителен до тех пор, пока C2DM не отправит устройству новый идентификатор регистрации или пользователь не удалит приложение. Я предполагаю, что вы знаете, как справиться с последним случаем.

Возвращаясь к первому случаю. Возможно, что в течение срока службы приложения на устройстве сервер C2DM может отправить устройству новый регистрационный идентификатор [он сделает это самостоятельно, и вам не придется повторно запрашивать его]. Таким образом, у вас должен быть прослушиватель для того же самого, и вы можете обновить регистрационный идентификатор этого устройства в своей базе данных.

Надеюсь, поможет.

person sarveshs    schedule 31.01.2012