firebase-messaging - Fatal: failed to find callback

前端 未结 4 863
情话喂你
情话喂你 2021-01-01 14:11

I\'m trying to use FCM messaging and keep getting this error.

E/FlutterFcmService( 3684): Fatal: failed to find callback

Below is the code I\'ve

相关标签:
4条回答
  • 2021-01-01 14:23

    In Application class use the below code

    previously it was GeneratedPluginRegistrant.registerWith(registry);,

    replace it with FirebaseMessagingPlugin.registerWith(registry.registrarFor("io.flutter.plugins.firebasemessaging.FirebaseMessagingPlugin"));

    import io.flutter.app.FlutterApplication;
    import io.flutter.plugin.common.PluginRegistry;
    import io.flutter.plugin.common.PluginRegistry.PluginRegistrantCallback;
    import io.flutter.plugins.GeneratedPluginRegistrant;
    import io.flutter.plugins.firebasemessaging.FirebaseMessagingPlugin;
    import io.flutter.plugins.firebasemessaging.FlutterFirebaseMessagingService;
    
    public class Application extends FlutterApplication implements PluginRegistrantCallback {
    
        @Override
        public void onCreate(){
            super.onCreate();
            FlutterFirebaseMessagingService.setPluginRegistrant(this);
        }
    
        @Override
        public void registerWith(PluginRegistry registry){
            FirebaseMessagingPlugin.registerWith(registry.registrarFor("io.flutter.plugins.firebasemessaging.FirebaseMessagingPlugin"));
        }
    
    
    }
    
    0 讨论(0)
  • 2021-01-01 14:33

    You should declare a backgroundMessageHandler function that is outside a class or as a static function, in order to be reached from outside, and then you pass this function to fbm.configure:

    Future<dynamic> myBackgroundMessageHandler(Map<String, dynamic> message) {
      print('on background $message');
    }
    
    fbm.configure(
          onMessage: (msg) {
            print(msg);
            return;
          },
          onLaunch: (msg) {
            print(msg);
            return;
          },
          onResume: (msg) {
            print(msg);
            return;
          },
          onBackgroundMessage: myBackgroundMessageHandler
    );
    

    Also open your_project_folder/android/app/source/AndroidManifest.xml and paste this XML code after existing intent-filter code of your main Activity:

    <intent-filter>
        <action android:name="FLUTTER_NOTIFICATION_CLICK" />
        <category android:name="android.intent.category.DEFAULT" />
    </intent-filter>
    

    The result will be similar to the following code:

    <activity android:name=".MainActivity" android:launchMode="singleTop" android:theme="@style/LaunchTheme" android:configChanges="orientation|keyboardHidden|keyboard|screenSize|smallestScreenSize|locale|layoutDirection|fontScale|screenLayout|density|uiMode" android:hardwareAccelerated="true" android:windowSoftInputMode="adjustResize">
                <intent-filter>
                    <action android:name="android.intent.action.MAIN" />
                    <category android:name="android.intent.category.LAUNCHER" />
                </intent-filter>
                <intent-filter>
                    <action android:name="FLUTTER_NOTIFICATION_CLICK" />
                    <category android:name="android.intent.category.DEFAULT" />
                </intent-filter>
    </activity>
    
    0 讨论(0)
  • 2021-01-01 14:34

    This error message is coming from startBackgroundIsolate which is used for allowing handling background messages. If you don't want to handle background messages then you can safely ignore this error message. Otherwise, you need to set up a callback for handling background messages as described here

    If your callback is not executed when clicking on the notification then it's because you didn't set click_action property of the message to FLUTTER_NOTIFICATION_CLICK

    0 讨论(0)
  • 2021-01-01 14:34

    Are you sending FCM using the web, not FCM console? make sure the post request is correct on your backend. I'm using Laravel

    $response = Http::withHeaders([
                'Content-Type' => 'application/json',
                'Authorization'=> 'key='. $token,
            ])->post($url, [
                'notification' => [
                    'body' => $request->summary,
                    'title' => $request->title,
                    'image' => request()->getHttpHost().$path,
                    
                ],
                'priority'=> 'high',
                'data' => [
                    'click_action'=> 'FLUTTER_NOTIFICATION_CLICK',
                    
                    'status'=> 'done',
                    
                ],
                'to' => '/topics/all'
            ]);
    
    0 讨论(0)
提交回复
热议问题