Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Firebase iOS notifications not working with new HTTP v1 API #723

Open
sstuart-vigil opened this issue May 14, 2024 · 5 comments
Open

Firebase iOS notifications not working with new HTTP v1 API #723

sstuart-vigil opened this issue May 14, 2024 · 5 comments

Comments

@sstuart-vigil
Copy link

I moved my app to use Firebase instead of APNS for iOS devices, and it was working with the legacy FCM API. After updating to the new HTTP v1 API notifications no longer go to iOS devices. Android devices work as expected.

When sending from the Django admin I get an 'All messages were sent.' success message, and when sending from the command line using send_message I get a success response as well.

I took the device registration ID for my iOS test device and sent a message using the firebase console and the notification worked. So the configuration is correct on that side, is there anything additionally that needs to be done in Django?

@pupubird
Copy link

Same here, works on android but not ios

@Klemenceo
Copy link

Klemenceo commented May 16, 2024

The way it gets wrapped in message is wrong now, one way to circumvent that is wrap this in a message directly as the send message special cases that type.
Something like this :
m = messaging.Message(notification=messaging.Notification(title="Title", body="body"))
should work both on iOS and Android.

note: If you need to send high volumes of message the HTTP v1 API is slow as there is no batching endpoint, and the firebase SDK doesn't use HTTP/2 yet.

@irvinsingGitHub
Copy link

@Klemenceo thanks for the tip. Tried your method and it worked with:

from firebase_admin import messaging

device.send_message(
messaging.Message(
data={'data_1': 'my_data_1'},
notification=messaging.Notification(title='my title', body='my message',),
)
)

However, I'm also trying to add 'badge' and 'sound' for ios. Where would you include them using this method?

@g-normand
Copy link

Hello,

I used to send like this:

attached_device.send_message(self.message_to_display, extra=self.payload)

and it's not working anymore. With @irvinsingGitHub code, it's working this way :

attached_device.send_message(messaging.Message(
       data=self.payload, 
       notification=messaging.Notification(body=self.message_to_display)))

My problem is that I used to do some unit test:

payload = json.dumps({
     'extra_session': {'id': session.id, 'match_type': RUNNING},
     'click_action': 'OPEN_SESSION_DETAILS_ACTIVITY',
     'click_action_id': str(session.id),
      'message': message,
})
notification_mock.assert_called_with(message, extra={'payload':payload})

but now I can't run the unit test with messaging.Message, does anyone know how I can do that?

Thanks

@DanielssonP
Copy link

To send a data message to a topic in FCM, I had to do:

    m = messaging.Message(
        data={
            "my_data": "data"
        },
        android=messaging.AndroidConfig(
            priority="high"
        ),
        topic="/topics/my_topic"
    )
messaging.send(m)

I may have misunderstood, but as a sidenote, there also seems to be a spelling mistake in the code (or in the docs). Docs say to="/topics/my_topic" while dict_to_fcm_message() is looking for to.startswith("/topic/"), with a missing s at the end.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

6 participants