flutterfirebasedartfirebase-cloud-messagingapple-push-notifications

Firebase Cloud Messaging - FirebaseMessaging.instance.getToken() throwing unknown error


I am busy trying to set up push notifications in my Flutter app using the cloud messaging service from Firebase

I am following the a Udemy lecture (if you have a Udemy subscription you can find it here) and have stumbled across an error that I can't seem to find replicated anywhere else online. The code that I am using to retrieve the FCM registration token is as follows:

void _setupPushNotifications() async {
    try {
      
      final fcm = FirebaseMessaging.instance;
      final settings = await fcm.requestPermission();
      print(settings.authorizationStatus);
      final token = await fcm.getToken();
      print('token is: $token');
 
    } catch (e, stackTrace) {
      print('Error setting up push notifications: $e');
      print(stackTrace);
    }
  }
 
  @override
  void initState() {
    _setupPushNotifications();
    super.initState();
  }

This is exactly the same as it is done in the lecture, and this same code can be found in many examples/tutorials online and in the documentation. However, when I call fcm.getToken(), I unfortunately get an error with very little detail. The result in the debug console of the print statements, error, and stack trace can be seen below:

Restarted application in 308ms.
flutter: AuthorizationStatus.authorized
flutter: Error setting up push notifications: [firebase_messaging/unknown] An unknown error has occurred.
flutter: #0 StandardMethodCodec.decodeEnvelope (package:flutter/src/services/message_codecs.dart:648:7)
#1 MethodChannel._invokeMethod (package:flutter/src/services/platform_channel.dart:334:18) platform_channel.dart:334
<asynchronous suspension>
#2 MethodChannel.invokeMapMethod (package:flutter/src/services/platform_channel.dart:534:43) platform_channel.dart:534
<asynchronous suspension>
#3 MethodChannelFirebaseMessaging.getToken (package:firebase_messaging_platform_interface/src/method_channel/method_channel_messaging.dart:248:11) method_channel_messaging.dart:248
<asynchronous suspension>
#4 _ChatScreenState._setupPushNotifications (package:chat_app/screens/chat.dart:20:21) chat.dart:20
<asynchronous suspension>

So as you can see the request is authorized just fine and everything works up until that point, but as soon as I try to use the getToken() method, an error is immediately thrown.

I have tried searching online to figure out why this might be. This stack overflow post led me to have a look at my iOS key in my Google Cloud Console, where I noticed that the Firebase Cloud Messaging API had not been selected for this key. However, after having selected this, saved, and waited much more than the suggested 5 minutes, it did not seem to make any difference.

I have also restarted my app, tried a different IOS simulator, and run flutter clean and flutter doctor. I don't really see where else to go from here as there is so little information on what the error could be.


Solution

  • This issue now has an active pull request that should resolve it, and so I will close it here. For any updates it will be best to check this thread.