We use the Firebase Admin Java SDK to send push notifications to iOS devices.
Messages appear in the BigQuery firebase_messaging export with message_status = MESSAGE_ACCEPTED, but never progress to MESSAGE_DELIVERED.
When sending the same notification through the Firebase Console, the BigQuery table shows both MESSAGE_ACCEPTED and MESSAGE_DELIVERED as expected.
Steps to Reproduce:
Use the Admin SDK (firebase-admin:9.3.0, Java) and the code sample below to send a notification to a valid iOS device token.
Verify the message reaches the device (the user sees the notification).
Query the BigQuery table for that message_id.
Only a single row appears with message_status = MESSAGE_ACCEPTED.
Repeat by sending the same payload from the Firebase Console. BigQuery now shows a second row with message_status = MESSAGE_DELIVERED.
Code Sample for build the message:
Message.Builder builder = Message.builder()
.setApnsConfig(ApnsConfig.builder()
.setAps(Aps.builder()
.setBadge(badge)
.setSound("default")
.build())
.build())
.setNotification(Notification.builder()
.setTitle(title)
.setBody(content)
.build())
.setToken(pushToken);`
code to send to FCM
BatchResponse response =
FirebaseMessaging.getInstance(firebaseApp).sendEach(messages);
Environment:
Firebase Admin Java SDK: 9.3.0
BigQuery export enabled
Expected Result:
BigQuery should show MESSAGE_DELIVERED once APNs confirms delivery, just as it does when messages are sent from the Firebase Console.
Actual Result:
Only MESSAGE_ACCEPTED is recorded for SDK-sent messages.
Questions for Support:
Is there any known issue with delivery receipts for iOS when sending via sendEach()? I inspected the request and see Firebase console uses different API (Firebase Campaign API) than admin SDK.
Are additional APNs headers (e.g., apns-push-type: alert) required for BigQuery to record MESSAGE_DELIVERED?
Any other things I can do to make proper deliver status work for ios devices?
Thank you