2016-01-05 3 views
2

Я использую GCM для запуска уведомления в своем приложении для Android. уведомление запускается с моего сервера. например, предположим, что пользователь зарегистрировал учетную запись в приложении, а затем сервер будет отправлять уведомления для этого, я передаю идентификатор регистрации GCM в своем запросе на регистрацию. до сих пор он отлично работает. теперь у меня есть еще один API, который является другим сервером. и я отправляю тот же идентификатор регистрации GCM в этом запросе, но я не получаю никаких уведомлений с этого сервера, поэтому из некоторого чтения я обнаружил, что каждый registration_id связан с конкретным приложением и его соответствующим ключом API сервера, то есть с одним устройством имеет разные registration_id s для разных приложений. Таким образом, мы получили ошибку MismatchSenderId при попытке отправить push-уведомления с помощью registration_id. как я могу это решить? У меня есть googled и не нашел подходящего решения.Получить различную регистрацию GCM для разных серверов

Я генерируя регистрацию GCM таким образом:

String token = instanceID.getToken(defaultSenderId), 
         GoogleCloudMessaging.INSTANCE_ID_SCOPE, null); 
+1

у вас должен быть другой токен для другого сервера. поскольку registration_id специально создан для идентификатора приложения. – goblin

+0

Не могли бы вы это объяснить? Предоставьте любые ссылки, если они есть. – droidev

+0

На самом деле идентификатор регистрации gcm зависит от сервера? – droidev

ответ

3

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

Пример:

Токен для сервера 1:

String token = instanceID.getToken(<sender_id_1>), 
        GoogleCloudMessaging.INSTANCE_ID_SCOPE, null); 

токена для сервера 2:

String token2 = instanceID.getToken(<sender_id_2>), 
        GoogleCloudMessaging.INSTANCE_ID_SCOPE, null); 
+0

Я попробую это. И вернитесь к вам – droidev

1

Там может быть проблемой в случае, когда маркер обновляется: в InstanceIDListenerService Я вижу, что не удалось идентифицировать токен - для sender_1 или для sender_2. Так что, когда вызывается onTokenRefresh, нам нужно получить новые маркеры для обоих отправителей.

+0

Это может быть правдой, но можно ли создать два токена? – droidev

+1

Да, правильно иметь много токенов: если есть 2 сервера, у вас будет 2 жетона. gRenzFries показывает этот случай в своем ответе. – cVoronin

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