firebase-js-sdk icon indicating copy to clipboard operation
firebase-js-sdk copied to clipboard

FR: Add topic subscription from PWA Javascript app

Open kae90 opened this issue 1 month ago • 0 comments

Operating System

Android/Ios/Web

Environment (if applicable)

ESP8266 and app PWA Javascript

Firebase SDK Version

12.2.1

Firebase SDK Product(s)

Messaging

Project Tooling

Javascript Library ESP8266 : https://github.com/mobizt/FirebaseClient

Detailed Problem Description

Hi,

It would be very helpful if a user could be automatically subscribed to an FCM topic when they log in to the PWA using a VAPID key.

Currently, when I generate the token upon login, it's saved in the Firebase Realtime database at /fcmTokens. The problem is that this process is data-intensive (Firebase Data Consumption).

I send notifications via ESP8266 using the library https://github.com/mobizt/FirebaseClient , which must read all the tokens in /fcmTokens and send the notifications individually, resulting in significant traffic increases due to SSL handshakes and memory heap consumption on the device.

This problem wouldn't arise if Firebase allowed topic subscriptions/unsubscriptions to be managed directly from PWAs, because then it would be possible to send a single notification to a topic, dramatically reducing traffic and memory usage.

Steps and code to reproduce issue

from ESP8266 with FirebaseClient

void inviaNotificaFCM(const String& nomeDispositivo, const String& messaggio) { DatabaseOptions opt; opt.shallow = true;

String tokensRaw = Database.get<String>(aClient, UID_UTENTE "/fcmTokens", opt);
if (tokensRaw.isEmpty()) {
Serial.println(F("⚠️ Nessun token trovato"));
return;
}

FirebaseJson tokensJson;
tokensJson.setJsonData(tokensRaw);

size_t len = tokensJson.iteratorBegin();
for (size_t i = 0; i < len; i++) {
    FirebaseJson::IteratorValue val = tokensJson.valueAt(i);
    String token = val.key;
    if (!token.isEmpty()) inviaNotificaSingoloToken(token, nomeDispositivo.c_str(), messaggio);
    delay(50);
}
tokensJson.iteratorEnd();

salvaNotificaFirebase(nomeDispositivo.c_str(), messaggio);    // salva la notifica UNA VOLTA

}

Tokens on firebase : /fcmTokens (consume very high data to send message) c4iIAz6zOf-1JtaxbkOCIx:APA91bGCNy5wiYnF_9UtIhXBdZnNyDRR2gPQ2hV7RYUmFHa5dfCq4ubSRv-JnfGhpppLyyE7XR94s4F2Z6nbl2TCXZoNjegohdYhHn3_1fEgK-uiJNjj31c : true cGivRIdjTkYeexLbEkF_CV:APA91bHo1To9tYr1PRKTfuJLzBVQY3gDH2x1xNmJ9CwD6tBZsY_ve-cDqu37GHLWVbfLQPQUtMQCaljuqBoDq8s5V6wnrIo2_jZ6GK8g8vjXqbx1aw5rFMI : true dqKC7Oo_1fOW4CEhkHQMhx:APA91bElPV-ytjLoPBHoXx71XyrD5qu1DhpvMX7AZTt4HZbsCeezv7dvEfck43Ut0viJ1r936_GIDDtMQ4gYLcsX3jOIGuUOhzlLRbgF5QRbo20YGIqIDDk : true eBt752XEHSMiBsoKfvTbMF:APA91bGgPFnTdA_vIkpBqZjP9YotbkiLTJlc-Yf3vBpJ5DOYpVlF6myzRK8gwx9voAfmLTkFqf1nnXfGMYru40iFBMqIsOKPJiLJZBCH6jOiRJg-YzX2k0I : true fLA_4cWxSbnKhMMoRpRGpO:APA91bEZsWqnkdiT-Dn1mmXsbuR8izy1-0fzLA84DqKFUsK1yO5HF8cdDXjYKYAeXgpipypg2O67KKafsCmDWRf3RhJ6uh9w2zgGqxmClBmKZA2fn6jp2KU : true fLA_4cWxSbnKhMMoRpRGpO:APA91bFV8hde4TI0VWYlsBVIEVGQ39dDZnfUTBl5uLxuVdrPCn62udgkxEtjcEqP3YzhNeva0vaOrw2li-ffV3MzDNM1BLBMV-qa0G5cXkRFvEKVyjdjk9e : true

kae90 avatar Nov 21 '25 08:11 kae90