Регистрация в Google Cloud Messaging не возвращает «registration_id»

#android #push-notification #xamarin #xamarin.android #google-cloud-messaging

#Android #push-уведомление #xamarin #xamarin.android #google-cloud-messaging

Вопрос:

Я использую следующий учебник, чтобы настроить Google Cloud Messaging в моем приложении Android для push-уведомлений:

http://developer.xamarin.com/guides/cross-platform/application_fundamentals/notifications/android/remote_notifications_in_android/

Когда я пытаюсь зарегистрировать свое приложение в OnCreate методе в MainActivity классе, он не возвращает registration_id или error . Он возвращается null для обоих.

Вот фрагмент кода из моего приложения:

 Intent intent = new Intent("com.google.android.c2dm.intent.REGISTER");
intent.SetPackage("com.google.android.gsf");
intent.PutExtra("app", PendingIntent.GetBroadcast(Application.Context, 0, new Intent(), 0));
intent.PutExtra("sender", AndroidUserPreferences.GoogleCloudMessagingSenderId);
Application.Context.StartService(intent);
  

Что мне нужно проверить, чтобы мое приложение зарегистрировалось для получения уведомлений Google Cloud Messaging?

РЕДАКТИРОВАТЬ # 1:

В разделе Регистрация в Google Cloud Messaging в связанном документе приведен следующий фрагмент кода для получения regsitration_id :

 string registrationId = intent.GetStringExtra("registration_id"); 
  

Я еще ничего не сделал с HandleRegistration этим методом, потому что у меня еще не заработал процесс регистрации.

Комментарии:

1. Вы опубликовали код, который используете для регистрации, но не опубликовали код, который используете для получения ответа на ваше намерение ЗАРЕГИСТРИРОВАТЬСЯ. Код, который вы используете для регистрации, является асинхронным. Существует более новый способ синхронной регистрации в GCM, используя библиотеку сервисов Google Play, но я не знаю, поддерживается ли она xamarin.

2. @Eran — В руководстве ничего не показано относительно асинхронного метода получения registration_id . Единственный фрагмент кода, который они показали, был следующим: string registrationId = intent.GetStringExtra("registration_id"); В службе есть HandleRegistration метод обработки MyIntentService , используемый для прослушивания push-уведомлений из приложения GCM.

3. можете ли вы показать свой метод HandleRegistration?? и что вы получаете в намерении. getStringExtra, null???

4. @Mak — Я обновил свой вопрос на основе вашего комментария

Ответ №1:

Я еще ничего не сделал с методом HandleRegistration, потому что я еще не запустил процесс регистрации.

HandleRegistration вызывается, когда ваше приложение получает ответ на регистрацию от GCM.

Поэтому вы должны ввести регистрационный идентификатор HandleRegistration , поэтому я не уверен, где вы поставили string registrationId = intent.GetStringExtra("registration_id"); строку, но, вероятно, вы поставили ее не в том месте.

Комментарии:

1. Я переместил эту строку кода из OnCreate метода в MainActivity классе в HandleRegistration метод в пользовательском сервисном классе, который наследуется от IntentService класса, и это сработало. Спасибо, что обратили на это внимание.