C2DM: только зарегистрированный аккаунт Google получает сообщения с сервера - PullRequest
0 голосов
/ 01 сентября 2011

Кажется, я застрял, потратив часы на то, чтобы понять, что не так.Такое ощущение, что я что-то неправильно понимаю.Итак, вот в чем дело:

Пытаясь заставить C2DM работать, я впервые зарегистрировался в службе Google C2DM с выделенным адресом электронной почты.Это тот, который я хочу использовать для отправки сообщений с сервера клиентам.Затем я добавил код в клиентское приложение и зарегистрировал устройство для C2DM.Полученный идентификатор регистрации отправляется на сервер и сохраняется в БД.

Проблема возникает, когда я пытаюсь отправить сообщения (независимо от того, использую ли я curl или php) на устройства.Отправка на аккаунт, который я использовал для регистрации в сервисе C2DM, в первую очередь работает без нареканий.Однако отправка на любое другое устройство завершается с ошибкой Error=NotRegistered.И я просто не понимаю, почему.Я использую auth key из учетной записи и registration id, которые я создаю из клиентов.Я (заново) создавал registration id примерно сотни раз, но согласно кодовой странице Google Error=NotRegistered означает, что registration_id недопустим.

Попытка разъяснения:

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

Может быть, мне следует проверить свое понимание C2DM: ограничен ли сервер отправкой сообщений на одно устройство?Я думал, что сервер может отправлять сообщения на каждое устройство, которое представило свой регистрационный идентификатор ...

Что я пропускаю / недоразумение?

Спасибо миллион, Steff

Ответы [ 5 ]

2 голосов
/ 01 сентября 2011

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

Я бы предложил дважды проверить регистрационный идентификатор, если вы проверяете другоеМожно, убедитесь, что при отправке сообщения на серверы Google вы получаете ответ 200 и подтверждаете, что устройства определенно успешно регистрируются для получения сообщений C2DM.

Я бы посоветовал прочитать это тоже.Это лучший учебник по C2DM, который я видел.http://www.vogella.de/articles/AndroidCloudToDeviceMessaging/article.html

1 голос
/ 25 марта 2012

У меня была та же проблема, будущее: «данные в фоновом режиме» (конфигурация телефона) было отключено.Включение решило дело.

1 голос
/ 01 ноября 2011

В коде сервера есть информация о токене, которая позволяет выбрать устройство, которое вы хотите отправить, изменили ли вы этот токен (на токен другого устройства), когда хотите отправить сообщение на другое устройство?

0 голосов
/ 30 сентября 2011

скажем, что вы зарегистрировались в C2DM по электронной почте'foo@foo.com'.

Впоследствии вы запрашиваете регистрационный идентификатор в самом приложении.Причина, по которой вы можете отправлять push-уведомления только на регистрационный идентификатор, связанный с 'foo@foo.com', заключается в том, что вы должны запрашивать регистрационные идентификаторы только с указанным вами адресом электронной почтыкогда вы подписались на C2DM.

Решает ли это ваш запрос?

0 голосов
/ 02 сентября 2011

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

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

...