Hacktoberfest 2026:メンテナが10月に向けて印を付けた、オープンで初心者向けの issue。 Hacktoberfest の issue を見る

FCM: send()/sendEachForMulticast() with `fid` return NotRegistered for a FID that Console delivers to at the same moment

オープン
#3,288 コメント 0 件 リアクション 0 件 担当者 1 名 GitHub で見る

メンテナーはふだん 1 日以内に返信

@Doris-Ge がすでに取り組んでいます。

2026年10月21日 から。

評価

難易度
4/5
見積もり時間
3〜5日
初心者へのやさしさ
22/100
issue の種類
バグ
明瞭さ
おおむね明確
活発さ
活発
技術スタック
nodejs, typescript
領域
backend

調査の方向性

The failing calls are Messaging.send() with fid and Messaging.sendEachForMulticast() with fids, both returning messaging/installation-id-not-registered with a 404. Start by reproducing with a FID from a fresh client register() call, then compare results under the emulator's user credentials and under a deployed function's service account, since the reporter has not yet tested the latter. Done means either a credential-identity explanation confirmed by the reporter or a reproducible SDK-side cause with a fix.

索引モデルが issue の本文から書いたものです。

説明

api: messaging
[READ] Step 1: Are you in the right place?

Yes — this is about the code in firebase-admin-node itself (Messaging.send() / Messaging.sendEachForMulticast() FID targeting).

[REQUIRED] Step 2: Describe your environment
  • Operating System version: Ubuntu 24.04.4 LTS (WSL2, kernel 6.6.114.1-microsoft-standard-WSL2)
  • Firebase SDK version: firebase-admin 14.5.0 (also reproduces on ^14.4.0); client-side firebase 12.19.0 / @firebase/messaging 0.13.3
  • Firebase Product: Cloud Messaging (FCM) — Firebase Installation ID (FID) targeting
  • Node.js version: 22.23.x
  • NPM version: 10.8.2 (package management via pnpm workspaces; npm version given for reference)
[REQUIRED] Step 3: Describe the problem
Steps to reproduce:
  1. Client registers for push notifications using the new FID-based API: register(messaging, { vapidKey, serviceWorkerRegistration }) from firebase/messaging.
    onRegistered fires with FID ceewOt8IieuDcWg1YUkduN.
  2. In the Firebase Console → Cloud Messaging → Compose notification → Send test message, the same FID is pasted into "Firebase Installation ID or FCM registration
    token". Delivery succeeds.
  3. From a Node backend using firebase-admin, both of the following are called for the same FID and both fail:
    await getMessaging().send({
      fid: 'ceewOt8IieuDcWg1YUkduN',
      notification: { title, body },
    });
    // and
    await getMessaging().sendEachForMulticast({
      fids: ['ceewOt8IieuDcWg1YUkduN'],
      notification: { title, body },
    });
    
    Both reject / return success: false with a NotRegistered error (see Relevant Code for the full error object).
  4. Immediately after step 3's failure (within the same minute), repeating step 2 (Console test send) with the identical FID succeeds again.

This rules out:

  • Propagation delay (Console succeeds within the same minute as the failed Admin SDK calls, both before and after).
  • A multicast-specific bug (reproduces identically on both send() and sendEachForMulticast()).
  • Project/config mismatch (firebase use confirms the same project, refpro-app-staging, as the client's VITE_FIREBASE_PROJECT_ID).

Note: this reproduction was observed while running the backend via the Firebase Functions emulator (firebase emulators:start --only functions), authenticated
via a firebase login user session (no GOOGLE_APPLICATION_CREDENTIALS / gcloud ADC configured locally) rather than a deployed function's service account.
Re-testing against a real deployed Cloud Function (with its actual runtime service account) is still pending on our side — flagging this in case the discrepancy turns
out to be credential-identity-related rather than an SDK bug; will update this issue once confirmed either way.

Possibly related: #2970 reports Console succeeding while Admin SDK's sendEachForMulticast() fails with a 404, but with a different error shape (raw HTML, not a
structured NotRegistered error) and using legacy tokens rather than FIDs — closed by the reporter without explanation, so inconclusive whether it's the same root
cause.

Relevant Code:
import { getMessaging } from 'firebase-admin/messaging';

const response = await getMessaging().sendEachForMulticast({
  fids: ['ceewOt8IieuDcWg1YUkduN'],
  notification: { title: 'Test', body: 'Test' },
});
// response.responses[0] => { success: false, error: FirebaseMessagingError }
FirebaseMessagingError: NotRegistered
  code: 'messaging/installation-id-not-registered',
  cause: RequestResponseError: Server responded with status 404.
  httpResponse: { status: 404, ... }
  codePrefix: 'messaging'
主要言語
TypeScript
スター
1.7k
フォーク
423
平均マージ
1日 54分
マージ済み PR(30日)
16

環境構築

はじめの一歩

  1. issue を最後まで読み、次にプロジェクトのコントリビューションガイドを読みます。
  2. 着手することを issue にコメントします — 二人が同じ作業をするのを防げます。
  3. リポジトリをフォークし、ブランチを切って変更します。
  4. issue 番号を参照したプルリクエストを送ります。

firebase/firebase-admin-node のほかの issue

firebase/firebase-admin-node の issue をすべて見る

似ている issue

TypeScript の issue をもっと見る

新しい issue をメールで受け取る

初心者向けの GitHub issue を短くまとめたダイジェスト。