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

firebase.messaging.getToken() edgecase when push notification is set back to default (ask)

Open thomasmburke opened this issue 4 years ago • 91 comments

[REQUIRED] Describe your environment

  • Operating System version: macOS Mojave Version 10.14.6
  • Browser version: Google Chrome Version 78.0.3904.97
  • Firebase SDK version: 7.0.0
  • Firebase Product: Firebase Cloud Messaging

[REQUIRED] Describe the problem

The issue I have identified was introduced in version 7.0.0 of the firebase-js-sdk. I do not run into this issue in versions previous to 7.0.0. The issue occurs when a use grants notification permissions, gets a FCM token, then updates the notification permissions in the browser back to Ask (default), reloads the page, grants notification permissions again in Chrome, and get an error when trying to getToken at this point. Note: subsequent calls to getToken don't face this issue.

Steps to reproduce:

The problem occurs after taking the following steps:

  • Call Notification.requestPermission() and user grants permissions

  • Call firebase.messaging.getToken()

  • Set notification permission in browser back to Ask (default) image

  • Call Notification.requestPermission() and user grants permissions

  • call firebase.messaging.getToken()

  • get DELETE https://fcmregistrations.googleapis.com/v1/projects/{project_id}/regis.../{FCM_token} 500 error and this specific error from FCM: "FirebaseError: Messaging: A problem occured while unsubscribing the user from FCM: FirebaseError: Messaging: A problem occured while unsubscribing the user from FCM: Internal error encountered. (messaging/token-unsubscribe-failed). (messaging/token-unsubscribe-failed)."

  • call messaging.getToken() again

  • get new token, no error this time.

Others have encountered this issue as well on Google Groups: https://groups.google.com/a/google.com/forum/#!msg/firebase-developer-cuf/dGU1SnJ1cz0/GMa_WvWGBwAJ

Relevant Code:

The firebase javascript messaging quickstart encounters this issue: https://github.com/firebase/quickstart-js/tree/master/messaging

Specifically, I think the update needs to be made here: firebase-js-sdk/packages/messaging/src/controllers/base-controller.ts Lines: 136-137

thomasmburke avatar Nov 15 '19 21:11 thomasmburke

I couldn't figure out how to label this issue, so I've labeled it for a human to triage. Hang tight.

google-oss-bot avatar Nov 15 '19 21:11 google-oss-bot

I also ran into this error just as the OP described.

bjgrosse avatar Nov 17 '19 19:11 bjgrosse

I am also getting this issue.

mindiii006 avatar Nov 18 '19 12:11 mindiii006

Thank for the report. I was able to reproduce this using the quick start guide and filed an internal report (b/144697421).

error-messaging

I'm just wondering if you y'all happen to consistently facing this issue. There are times that I can only reproduce it on the initial load or upon requesting permission several times. Are there any particular patterns you notice that significantly contributes to the issue (aside from what mentioned)?

rommelpe avatar Nov 18 '19 18:11 rommelpe

Hi rommelpe,

This issue only arises after the a reset of notifications permissions and reload of page and then works properly with an additional reloaded pages. Aside from what I mentioned there are no other patterns that contribute to the issue identified.

Thanks, and let me know if there are any other questions.

thomasmburke avatar Nov 18 '19 18:11 thomasmburke

I'm getting the same issue when I remove the push notifications permission and reload.

Nox04 avatar Nov 18 '19 19:11 Nox04

I am also getting this issue.

gestewa avatar Nov 18 '19 23:11 gestewa

I'm getting the same error :(

thayannevls avatar Nov 19 '19 16:11 thayannevls

Thanks for the report. I can consistently reproduce the behavior and I'm investigating the issue.

I'd like to ask everyone to please refrain from posting "This is happening to me too" comments and instead use the add reaction feature on the OP to add a thumbs up to issues that you consider important.

mmermerkaya avatar Nov 21 '19 15:11 mmermerkaya

Any update on this issue?

TrackMyToken avatar Nov 30 '19 22:11 TrackMyToken

Hello, sorry for the lack of updates. Looks like the problem is in our backend, but there wasn't much progress as we've had a code freeze last week (because of black friday). I should be able to give you a better update or even a fix later this week.

mmermerkaya avatar Dec 03 '19 12:12 mmermerkaya

Can we have the latest updates regarding this issue?

NaghamHalabi avatar Dec 06 '19 12:12 NaghamHalabi

Hey everyone, our backend team is still investigating this. Since it's taking longer than my initial estimate, I just submitted a PR to temporarily suppress this error.

mmermerkaya avatar Dec 10 '19 16:12 mmermerkaya

Also reproduced this issue and need a fix Using Firebase version 7.5.2

spawnrider avatar Dec 11 '19 14:12 spawnrider

This is happening to me too

kdluu avatar Dec 11 '19 21:12 kdluu

The temporary change to suppress the error, mentioned by @mmermerkaya above, is in 7.6.0 which has just been released.

hsubox76 avatar Dec 12 '19 23:12 hsubox76

Using 7.6.0 and am still having the same issue!

CodeByBryan avatar Dec 14 '19 09:12 CodeByBryan

If you're only seeing the error in the console, that's normal. My PR is still logging the error in the console, but it should not stop the getToken call from completing successfully.

mmermerkaya avatar Dec 16 '19 14:12 mmermerkaya

I am receiving a token value when https://firebaseinstallations.googleapis.com/v1/projects/.../authTokens:generate is called, but get a "500" error when calling getToken()

CodeByBryan avatar Dec 18 '19 19:12 CodeByBryan

I get this error when using "127.0.0.1" instead of localhost. BUT if i use "localhost" even the getToken() is not working. Showing CORS policy error.

  • On localhost error is(cannot getToken())
OPTIONS https://firebaseinstallations.googleapis.com/v1/projects/{project_id}/installations/{some_token}/authTokens:generate 403

Access to fetch at 'https://firebaseinstallations.googleapis.com/v1/projects/{project_id}/installations/{some_token}/authTokens:generate' from origin 'http://localhost:3000' has been blocked by CORS policy: Response to preflight request doesn't pass access control check: No 'Access-Control-Allow-Origin' header is present on the requested resource. If an opaque response serves your needs, set the request's mode to 'no-cors' to fetch the resource with CORS disabled.
  • On 127.0.0.1 error(getting token but shows this error) is:
DELETE https://fcmregistrations.googleapis.com/v1/projects/{project_id}/regis.../{FCM_token} 500

FirebaseError: Messaging: A problem occured while unsubscribing the user from FCM: Internal error encountered. (messaging/token-unsubscribe-failed). (messaging/token-unsubscribe-failed).

GoktuqCan avatar Dec 19 '19 12:12 GoktuqCan

The CORS error looks like an unrelated issue. Can you create a new bug report for that?

mmermerkaya avatar Dec 19 '19 17:12 mmermerkaya

@mmermerkaya did you created new issue for CORS problem? I'm having the same issue.

Ridermansb avatar Dec 22 '19 21:12 Ridermansb

@Ridermansb @mmermerkaya @GoktuqCan @CodeByBryan could you check if #2467 matches the issue that you are observing?

ctavan avatar Dec 22 '19 23:12 ctavan

I am having the issue in a Chrome Extension. when getToken() is called I recieve:

DELETE https://fcmregistrations.googleapis.com/v1/projects/{project_id}/regis.../{FCM_token} 500 FirebaseError: Messaging: A problem occured while unsubscribing the user from FCM: Internal error encountered. (messaging/token-unsubscribe-failed). (messaging/token-unsubscribe-failed).<

I am not getting any CORS errors

CodeByBryan avatar Dec 23 '19 16:12 CodeByBryan

Same error for user resubscribe:

FirebaseError: Messaging: A problem occured while unsubscribing the user from FCM: Internal error encountered. (messaging/token-unsubscribe-failed). (messaging/token-unsubscribe-failed). at Ik. (https://www.gstatic.com/firebasejs/7.6.0/firebase.js:1:811146) at https://www.gstatic.com/firebasejs/7.6.0/firebase.js:1:52093 at Object.next (https://www.gstatic.com/firebasejs/7.6.0/firebase.js:1:52198) at n (https://www.gstatic.com/firebasejs/7.6.0/firebase.js:1:50968)

niklat22 avatar Dec 24 '19 05:12 niklat22

Waiting for the fix, for the time being I'm using a way around by checking the error code and calling the function again because this error is thrown only the first time.

const turnOnNotification = async () => {
    const uid = firebase.auth().currentUser.uid;
    const messaging = fb.messaging();
    try {
      await messaging.requestPermission();
      const token = await messaging.getToken();
      // send to server
    } catch (err) {
      if (err.code === "messaging/token-unsubscribe-failed")
        turnOnNotification();
    } 
  };

Depender-Sethi avatar Jan 04 '20 21:01 Depender-Sethi

Hello, sorry for the lack of updates. Looks like the problem is in our backend, but there wasn't much progress as we've had a code freeze last week (because of black friday). I should be able to give you a better update or even a fix later this week.

are there any new updates on this. Our company is getting held up by this issue. we are using "firebase": "7.6.1" and the error is not suppressed in this version. we are calling get token like this: messaging.getToken("SENDER ID", "FCM");

Marc-Tanne avatar Jan 20 '20 18:01 Marc-Tanne

I tried on version 7.9.1

If I grant permission to show notification, the token generates just fine, but if I remove permission from chrome settings and then try to reload the page and after grant permission again in a console I'm having error like

FirebaseError: Messaging: A problem occurred while unsubscribing the user from FCM: FirebaseError: Messaging: A problem occurred while unsubscribing the user from FCM: Requested entity was not found. (messaging/token-unsubscribe-failed). (messaging/token-unsubscribe-failed).

but at the same time, a new valid token generates.

kdastan avatar Feb 25 '20 07:02 kdastan

Sorry to hear about your issue, @kdastan. Other dev seems to encounter it, but I can't get the same behavior. Can I ask you to share the following? Thanks.

rommelpe avatar Feb 25 '20 09:02 rommelpe

I am getting the same error, but only on Chrome (Firefox works fine)... i'm using npm-firebase-version 7.13.2. The weird thing is, this issue started today - when I tested my app extensively for the last couple of days without any problems.

akuales avatar Apr 06 '20 20:04 akuales