Как поместить несколько номеров проекта / идентификатор отправителя в google-services.формат JSON

Я хочу иметь возможность добавлять более одного идентификатора отправителя в мое приложение для android.

от https://developers.google.com/cloud-messaging/concept-options

GCM позволяет нескольким сторонам отправлять сообщения в одно клиентское приложение. Например, предположим, что клиентское приложение-агрегатор статей с несколькими участниками, и каждый из них должен иметь возможность отправить сообщение при публикации новой статьи. Это сообщение может содержать URL-адрес, чтобы клиентское приложение может загрузить статью. Вместо того, чтобы централизовать все действия отправки в одном месте, GCM дает вам возможность позволить каждому из этих участников отправлять свои собственные сообщения.

Как это достигается с помощью google-services.json настройки файл?

3 ответов


обновление: собираюсь обратиться к официальному и рекомендуемому способу сделать это вместо богатство и неофициальный подход, чтобы предотвратить/избежать неизвестных проблем. Из моего ответа здесь.

на самом деле есть часть в документация об этой теме:

получение сообщений от нескольких отправителей

FCM позволяет нескольким сторонам отправлять сообщения в одно клиентское приложение. Например, предположим, что клиентское приложение-это агрегатор статей с несколькими участниками, и каждый из них должен иметь возможность отправлять сообщение при публикации новой статьи. Это сообщение может содержать URL-адрес, чтобы клиентское приложение могло загрузить статью. Вместо того, чтобы централизовать все действия отправки в одном месте, FCM дает вам возможность позволить каждому из этих участников отправлять свои собственные сообщения.

чтобы сделать это возможным, убедитесь, что каждый отправитель генерирует свой собственный идентификатор отправителя. Видеть документация клиента для вашей платформы для получения информации о том, как получить идентификатор отправителя FCM. При запросе регистрации, клиентское приложение получает маркер несколько раз, каждый раз с другим идентификатором отправителя в поле "аудитория".

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

обратите внимание, что существует ограничение 100 нескольких отправителей.

Я думаю, что запутанная, но важная часть здесь:

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

другими словами, вам придется позвонить getToken() передача идентификатора отправителя и просто "FCM" (например,getToken("2xxxxx3344", "FCM")) в качестве параметров. Вы должны убедиться, что вы назвать это каждого отправитель (проект), который вам нужен.

кроме того, обратите внимание на getToken() docs:

это блокирующая функция, поэтому не вызывайте ее в основном потоке.

некоторые дополнительные good-to-knows:

  • он не автоматически повторяет попытку, если он терпит неудачу, как по умолчанию.
  • он возвращает исключение IOException при сбое.

по состоянию на декабря. 2016, есть очень простой, не-хакерский способ сделать это, который все еще работает сейчас (июль 2018).

FirebaseOptions options = new FirebaseOptions.Builder()
       .setApplicationId("1:something:android:something_else") // Required for Analytics.
       .setApiKey("your apikey") // Required for Auth.
       .setDatabaseUrl("https://your-database.firebaseio.com/") // Required for RTDB.
       .build();
FirebaseApp.initializeApp(this /* Context */, options, "secondary");

источник: официальный блог Firebase


вы можете получить один токен для нескольких отправителей, передав их как строку, разделенную запятыми, а затем эти отправители смогут отправить push-уведомление с помощью общего токена, попробуйте позвонить

FirebaseInstanceId.getInstance ().getToken ("senderId1, senderId2", FirebaseMessaging.INSTANCE_ID_SCOPE);

убедитесь, что вы называете это из фонового потока.