Отправка уведомлений пользователю в Android studio

# #android #firebase #push-notification #firebase-cloud-messaging

Вопрос:

Я хочу создать систему уведомлений в своем приложении для Android, где я могу отправлять уведомления кому-либо о событии. Например, мое приложение касается социальной системы, в которой оно использует базу данных Firestore (Firebase) для сохранения своих пользователей (что означает, что у меня там есть коллекция «пользователи»), и у меня есть функция «Добавить в друзья».

Все работает просто отлично, но я хотел бы добавить функцию, в которой при user1 добавлении user2 в качестве друга я хотел бы отправить user2 уведомление об этом.
Я поискал в Google и увидел этот пост: https://www.geeksforgeeks.org/how-to-push-notification-in-android-using-firebase-cloud-messaging/

Теперь, насколько я понимаю, это мне не очень поможет, потому что он отправляет уведомление от FCM только мне (а не конкретному пользователю).
Проблема в том, что я действительно не знаю, что искать (или что вводить в Google), чтобы найти то, что я ищу.

Некоторые идеи, которые я подумал:

  • чтобы создать коллекцию в firestore под названием «Уведомления», в которой имена пользователей хранятся в качестве документов
  • когда user1 я отправляю запрос на добавление в друзья user2 , я бы добавил данные (например, заголовок/сообщение) в » Уведомления/пользователь2/».

Но я как бы застрял здесь, я хотел бы знать идеи или, если у вас, ребята, есть темы о том, как это реализовать, я действительно не знаю, что мне искать.

Большое вам спасибо и извините за длинный пост.

Ответ №1:

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

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

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

Ключевые слова: FCM, уведомление, Firestore, облачные функции и токен firebase

Изменить (Ответ на 1. комментарий): Идентификатор пользователя Firebase и идентификатор пользователя создаются на устройстве. В учебнике вы реализуете FCM(я не читал его полностью) и класс FirebaseMessagingService, от которого вы можете наследовать. Этот класс вызывается, когда сообщение отправляется на устройство и содержит метод, называемый onNewToken. Это сообщение вызывается, когда сервер Firebase создает токен для вашего устройства и отправляет его на устройство. В этом методе вы можете отправить новый токен в свою базу данных и сохранить его в качестве идентификатора пользователя этого устройства. Маркеры используются firebase для идентификации устройств, на которые отправляются сообщения(вы можете подробно прочитать о FCM).

Облачные функции-это то, что вы можете развернуть в своем проекте firebase, которые запускаются при возникновении события. Например, вызов http или конкретное изменение в вашей базе данных. Облачные функции написаны на языке JS и должны быть развернуты для вашего проекта firebase. (Облачные функции не бесплатны, и вам нужно платить за каждый звонок, но у вас есть несколько тысяч бесплатных применений каждый месяц.)

Вы отправляете FCM определенному лицу, создавая сообщение firebase, которое направляется определенному токену, токенам или группам пользователей. Чтобы идентифицировать человека, которому вы хотите отправить сообщение, вам необходимо иметь токен для этого пользователя, поэтому вы сохраняете токены из 1. части в своей базе данных и всегда обновляете токен, когда токен меняется на устройстве.

Имейте в виду, что пользователь может использовать несколько устройств. У вас должен быть идентификатор для вас, например имя пользователя, и вместе с этим именем пользователя вы сохраняете несколько идентификаторов FIREBASEID и токенов Firebase. Один FCM может быть направлен до 100 токенов.

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

1. Пожалуйста, потерпите меня, некоторые вопросы, которые я действительно не понимаю: (1) как firebase создает идентификатор пользователя и идентификатор пользователя, я имею в виду, что коллекция «пользователи» — это то, что я объявил, а не созданная вещь в firebase, разве это не просто набор строк для firebase ? Я мог бы назвать коллекцию «abc», и firebase не знала бы, для чего она используется (если бы я действительно не понимал этого) (2) Эта облачная функция встроена или я должен ее реализовать ? (3) Как я могу отправить FCM одному человеку ? Похоже, это не вариант, как я видел в посте, Спасибо за ответ, очень ценю это

2. @TannousTannous обновил мой ответ. (Я видел в вашем профиле, что вы уже спрашивали что-то об облачных функциях год назад, так что, думаю, вы знаете, о чем они)

3. Спасибо вам за этот подробный ответ, это, безусловно, многое объясняет. Еще кое-что: (1) Строка 4 в отредактированном ответе, после «onNewToken», вы имели в виду «Этот метод» правильно (как в методе onNewToken)? (2) есть ли способ сделать это с помощью чего-то другого, кроме облачных функций? (3) Я могу сохранить токены в коллекции «пользователи» в firestore, верно ? (4) что произойдет, если я выйду из системы, а другой пользователь войдет в систему с моего устройства ?

4. (1) нет, этот класс содержит 2 метода. onNewToken (), который вызывается при получении нового токена, и onMessageReceived (), который вызывается, когда ваше устройство получает сообщение от firebase. (2) Вы можете использовать отдельный сервер, который отправляет FCM, никогда не отправляйте токены от пользователя другому пользователю напрямую, это большая проблема безопасности. (3) Да, вы должны убедиться, что сохранили токен нужному человеку. (4) обновите свою базу данных при входе и выходе из системы (удалите или добавьте токен).

5. Большое вам спасибо за потраченное время, вы все мне объяснили, я ценю это