2014-11-11 3 views
0

У меня есть небольшая проблема с GCM-сервисом Android. Дело в том, что каждый раз, когда я запрашиваю регистрацию, сервер GCM возвращает другой register_id. Хуже всего то, что после проведения тестов, как старые, так и новые работают правильно! (Я посылаю сообщение PUSH старым и новым, и мое приложение получает нажатие от каждого из них !!).GCM отправляет различные RegistrationId каждый раз

Это AsyncTask я использую регистр на сервере GCM Android:

общественного класса AltaGCM расширяет AsyncTask {

@Override 
protected Void doInBackground(Void... params) { 
    GoogleCloudMessaging gcm = GoogleCloudMessaging.getInstance(context); 
    int contador = 0; 
    try{ 
     regId = gcm.register(CrisolGooglePlayServicesUtils.SENDER_ID); 
    } catch (IOException e) { 
     statusCode = -1; 
    } 
    return null; 
} 

@Override 
protected void onCancelled() { 

} 

@Override 
protected void onPreExecute() { 
} 

@Override 
protected void onPostExecute(Void result) { 
    listener.respuestaGCM(statusCode, regId); 
} 

@Override 
protected void onProgressUpdate(Void... values) { 

} 

}

Я не знаю, что я делаю неправильно, но, это происходит со мной с 2 ​​месяцев (более или менее). Раньше у меня никогда не было этой проблемы, сервер GCM использовал для возврата мне SAME registration_id (не каждый раз, но иногда) .......

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

Большое спасибо!

ответ

1

Возможный дубликат GCM registering with two different working registration ids

Посмотрите на ответ, предоставленной @nunofmendes

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

Для получения дополнительной информации проверить этот документ:

http://developer.android.com/google/gcm/adv.html

Это говорит:

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

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

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

+0

Согласно этому документу, это происходит из-за «ошибки» в «приложении». Ну, я не знаю, в чем проблема, если это происходит из-за клиентской части (я думаю, что правильно делаю регистрацию ... это моя точка зрения), или это происходит в приложении в консоли API Google? – zapotec

+0

Дело в том, что я знаю, что об этом говорит документация по Android, но я не понимаю, что «на стороне сервера, пока приложение ведет себя хорошо, все должно работать нормально. Однако, если ошибка в приложение запускает несколько регистраций для одного и того же устройства ». Потому что это похоже на проблему в приложении для Android ..... это правильно? В этом случае, в чем проблема? Потому что я использую новейшие сервисы Google Play и самую последнюю документацию, чтобы сделать это. Поэтому я не понимаю – zapotec

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