Нет, вы не можете генерировать это случайно. Во время входа в систему firebase предоставляет вам device_token. Вы можете сохранить его в базе данных. А во время выхода из системы вы можете сделать поле NULL. Потому что каждый раз firebase генерирует уникальный токен для каждого устройства. И FCM работает в соответствии с этим токеном, т.е. отправляет уведомление этому уникальному устройству. Вам нужно только передать этот device_token в пакет.
Я могу показать пример для Laravel.
$recipients = DB::table($table_name)
->select('device_token', 'device_type')
->where('id', $request->id)
->get();
$r[] = $recipients[0]->device_token;
Если несколько, то просто объединить все в один массив.
А для Fcm просто передать массив получателей а затем показать, что ответ пользователю:
$sent = fcm()
->to($r)
->priority('high')
->data([
'title' => $notification_title,
'body' => $notification_body,
])
->send();
$notification_response = $sent['success'];