2013-05-22 2 views
0

Я разрабатываю небольшое приложение с использованием сервиса GCM.Срок действия учетной записи GCM

Раньше я пытался отправь себе сообщение, но (на стороне сервера) ответ был:

"Успех": 0, "неудача": 1, "canonical_ids": 0, "результаты": [{ "ошибка": "NotRegistered"}]}

Но самого начало моего приложения я проверить это:

final String regId = GCMRegistrar.getRegistrationId(this); if (regId.equals("")) 
     { 
       // Register 
      GCMRegistrar.register(this, SENDER_ID); 


     } 
     else ... 

кажется очевидным, что getRegistrationId() работает только штраф локально, (SharedPreferences?) ..

Приятно, что я никогда не делал Отменить регистрацию своего приложения, просто переустановите его, не меняя номер версии (потому что он находится в тесте, но все же), поэтому в этом случае моя учетная запись истекла, в этих случаях Google не должен пришлите мне еще один идентификатор, который я мог бы поймать здесь:

????

Однако есть ли безопасный способ понять, зарегистрировано ли мое приложение на сервере GCM?

Спасибо!


EDIT:

Я имею в виду это:

Когда я переустановить приложение через Eclipse, есть момент, где не установлен мое приложение, если GCM сервер отправить мне сообщение в тот момент нет получателя, и поэтому Google не подтверждает мой идентификатор. На ваш взгляд, эта идея, глупая идея?

ответ

0

Выполните следующие шаги http://developer.android.com/google/gcm/gs.html.

Это может произойти потому, что какое-то время гсм registartion идентификатор получает истек поэтому каждый раз, когда вы должны проверить, что он зарегистрирован или нет, если не зарегистрировать его

+0

Благодарим за ответ, в этом примере приложение сохранит REGID в sharedPreferences и в начале проверки, если regid был ранее сохранен. Я думаю, что getRegistratiodId() делает то же самое, но если пользователь получил что-то по этой функции, он не может быть уверен, что он действительно зарегистрирован GCM SERVER SIDE. – Edge7

0

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

Из документации:

Зарегистрируйте заявку на ГКМ и вернуть регистрационный номер. Вы должны позвонить об этом один раз, когда ваше приложение установлено, и отправить возвращенный идентификатор регистрации на сервер.

В некоторых тестах, которые я сделал, идентификатор регистрации, возвращаемый gcm.register(id), не всегда одинаков для пары устройств и приложений. Однако Google говорит:

Повторные вызовы этого метода вернут исходный идентификатор регистрации.

Если метод gcm.register(id) возвращает идентификатор, он будет действителен с тех пор.

Лучший.

+0

Конечно, я называю регистр только один раз. Моя основная проблема заключается в том, что getRegistrationId() возвращает id не пустой, но не зарегистрированный на стороне сервера GCM, но я не уверен, почему, однако я хотел бы знать метод проверки, зарегистрирован ли идентификатор GCM. – Edge7

+0

Если сервер GCM возвращает вам идентификатор, вы можете только ожидать, что Google сохранит его на своих серверах. Я не думаю, что идентификатор регистрации будет истек на сервере GCM. Однако, если вы не уверены, что ваш пользователь зарегистрирован, просто зарегистрируйтесь на сервере GCM и отправьте идентификатор регистрации на сторонний сервер. – guanabara

Смежные вопросы