FCM admin sdk sendToTopic not received by everyone - firebase

I'm using the Firebase Admin SDK on my backend server to create topics, subscribe/unsubscribe tokens, and send topic messages.
There are some devices, which doesn't receive messages sent to a given topic.
What I know:
The device must be subscribed to the topic, as when I send topic message from the firebase console, it arrives.
The Admin SDK-s sendToTopic function must work, as other devices subscribed to the topic receive the message.
I guess the problem is specific with some devices and it fails during the sending process.
Does anyone have any experience with this issue?
Can I somehow see logs or any information about message status per device?

Related

How to Test FCM Data Push Notifications Delivery?

I have an Azure Web Service which is using an Azure Notification Hub to push data notifications using FCM via Firebase to a Xamarin Android App. Initially the app is getting a token which is posted to the web service. The web service then sends it with the data to the notification hub which is sending it to Firebase. The response back from the hub is indicating a successful transfer it seems from the notification properties and the ReqID property. But the notification is not reaching the app. Is there a way to see individual notifications' status on the Firebase site? Currently I don't see anything under the "Cloud" report for Data.
[
Thanks for asking question! One of the notification failure point could be when sending it from FCM to user device. To confirm this, you may try getting a delivery receipt from FCM.
You may refer to this article Receive delivery receipts. It says for Android and Chrome client apps, you can get delivery receipts which can be sent from FCM to your app server. To enable this feature, the message your app server sends to FCM must include the field delivery_receipt_requested. When this field is set to true, FCM sends a delivery receipt when a device confirms that it received a particular message. Also check for firewall on the user's network.

Can my phone receive Firebase push notification if I have installed an app that support it but I have never open it before

Do I need to open the app at least once in order for my phone to receive a push notification?
The must run at least once so it can collect a device ID token and send that to the backend that will send the message. Without that token collected, the app can never receive a message on that device.
Read more about it: What is FCM token in Firebase?
Actually you do not need the device token to send/receive the messages.
However, it is required that the user give permission to receive notifications, and that would only happen during runtime. I tested this and can confirm it works. The device token is only used to subscribe users to specific topics, but you can send a message to all users that have your app installed without needing to specify device tokens.

Firebase Cloud Functions - Send Notification user when they are online again?

I'm using fcm to send user notification and its triggedred by writing data to firebase database. But when user is offline notification send but never received and user cannot see it after they back online. How to send notification in all conditions.
Example: If user online send message normally but if user offline wait until user online and send them. How can I do this?
According to documents firebase cloud messaging already support what i want.
If the device is not connected to FCM, the message is stored until a
connection is established (again respecting the collapse key rules).
When a connection is established, FCM delivers all pending messages to
the device. If the device never gets connected again (for instance, if
it was factory reset), the message eventually times out and is
discarded from FCM storage. The default timeout is four weeks, unless
the time_to_live flag is set.
So FCM service wait until client device connected again.And sen notification when cliend connected. But if user hasnt connected for four weeks message deletes itself and never sent.
https://firebase.google.com/docs/cloud-messaging/concept-options#ttl

Firebase cloud messaging message log

In my Android app I receive messages sent using Firebase, the problem is not all messages arrive and sometimes messages arrival is very slow.
In my server side I track the messages I send to FCM and I always receive success: 1 response from FCM, still there are messages I do not receive in my Android app.
I thought an FCM messages log would be a great help in cases like described above but I don't sure if this option exist.
Is there a way to browse Firebase Messages log ?
First of all, did you know that Firebase Cloud Messages can be delayed if the connected device is in doze mode and your app's standby bucket is not high enough to wake up the device? Therefore, even if FCM sends the message to your target device in time, there is still a chance that it will be delayed by the Android platform. Also, if the message is sent with high priority, you might have a chance to wake up the device from doze mode to be able to receive the message in time.
The following two docs will give you a more detailed explanation:
https://developer.android.com/training/monitoring-device-state/doze-standby
https://developer.android.com/topic/performance/power/power-details
Besides, FCM provides three sets of tools to help you get insight into message delivery:
Firebase console message delivery reports (go to Firebase Console -> Messaging -> Reports)
Aggregated Android SDK delivery metrics from the Firebase Cloud Messaging Data API
Comprehensive data export to Google BigQuery
All these three tools can help you understand your message delivery, the following docs have a pretty good explanation about how to use them:
https://medium.com/firebase-developers/what-is-fcm-aggregated-delivery-data-d6d68396b83b
https://firebase.google.com/docs/cloud-messaging/understand-delivery?platform=android#count-data-messages-sent

Accessing FCM message logs

I'm having trouble figuring out whether or not FCM keeps logs of sent FCM push notifications, and if so, how to access them. I'm having intermittent issues with sending push notifications from an FCM server to an iphone app, and would love to be able to see at what stage the push is failing.
I found the below documentation that suggests that these logs should be kept somewhere:
https://support.google.com/googleplay/android-developer/answer/2663268?hl=en
("You can look up messages sent through Firebase Cloud Messaging with a registration token or message ID.")
However, I can't seem to figure out how to access them. Since my app is currently iOS only, I don't have an app in the Google Play Developer console, and my firebase console doesn't seem to contain any such logs. However, based on the possible message statuses in the documentation above (e.g. Accepted, sent to APNS), it seems like google / firebase should store message logs sent to iOS as well as to Android.
Thanks in advance for your help!

Resources