I am trying to receive silent/background push-notifications on an IOS device using Flutter. I have managed to get this to work on Android, Just IOS is the issue.
Setup
- I am using the firebase_messaging 5.1.6
Plugin
- I have ticked remote notifications
and background fetch
in XCode, and have also enabled Push notifications in Capabilities
- Push notifications with data seem to work fine
My payload (I have tried with and without data)
{"registration_ids":["<IOS DEVICE IDS>"],"priority":"high","content_available":true,"mutable_content":true,"data":{"title":"Title.","body":"Message."}}
My firebase configuration below:
The reason onBackgroundMessage
is set to null is that I get the error below:
Unhandled Exception: MissingPluginException(No implementation found for method FcmDartService#start on channel plugins.flutter.io/firebase_messaging)
Future<dynamic> myBackgroundMessageHandler(Map<String, dynamic> message) async {
// test code
NetworkService networkService = NetworkService();
networkService.getData("test"); // hit a test endpoint to make sure the code excuted
print("myBackgroundMessageHandler: $message");
}
_firebaseMessaging.configure(
onMessage: (Map<String, dynamic> message) async {
print("onMessage: $message");
NetworkService networkService = NetworkService();
networkService.getData("test");
},
onBackgroundMessage: Platform.isIOS ? null : myBackgroundMessageHandler,
onLaunch: (Map<String, dynamic> message) async {
print("onLaunch: $message");
},
onResume: (Map<String, dynamic> message) async {
print("onResume: $message");
},
);
Full error
2019-10-15 08:44:52.766262+0100 Runner[16132:1794539] - <AppMeasurement>[I-ACS036001] Analytics screen reporting is disabled. UIViewController transitions will not be logged.
2019-10-15 08:44:52.909787+0100 Runner[16132:1794333] Metal API Validation Enabled
2019-10-15 08:44:53.173885+0100 Runner[16132:1794552] flutter: Observatory listening on http://127.0.0.1:58105/hC1vIwLgB_o=/
2019-10-15 08:44:53.294824+0100 Runner[16132:1794539] 6.9.0 - [Firebase/Analytics][I-ACS023007] Analytics v.60102000 started
2019-10-15 08:44:53.295297+0100 Runner[16132:1794539] 6.9.0 - [Firebase/Analytics][I-ACS023008] To enable debug logging set the following application argument: -FIRAnalyticsDebugEnabled (see https://help.apple.com/xcode/mac/8.0/#/dev3ec8a1cb4)
2019-10-15 08:44:53.940639+0100 Runner[16132:1794545] flutter: 1 /var/mobile/Containers/Data/Application/E0ADA03B-747D-4A66-9A96-97160F70D80A/Documents/db
2019-10-15 08:44:54.030056+0100 Runner[16132:1794545] [VERBOSE-2:ui_dart_state.cc(148)] Unhandled Exception: MissingPluginException(No implementation found for method FcmDartService#start on channel plugins.flutter.io/firebase_messaging)
#0 MethodChannel.invokeMethod (package:flutter/src/services/platform_channel.dart:314:7)
<asynchronous suspension>
#1 FirebaseMessaging.configure (package:firebase_messaging/firebase_messaging.dart:118:16)
#2 configureFirebaseMessaging (package:gard/utilities/service_locator.dart:53:22)
#3 _AsyncAwaitCompleter.start (dart:async-patch/async_patch.dart:43:6)
#4 configureFirebaseMessaging (package:gard/utilities/service_locator.dart:47:40)
#5 main (package:gard/main.dart:31:9)
#6 _asyncThenWrapperHelper.<anonymous closure> (dart:async-patch/async_patch.dart:71:64)
#7 _rootRunUnary (dart:async/zone.dart:1132:38)
#8 _CustomZone.runUnary (dart:async/zone.dart:1029:19)
#9 _FutureListener.handleValue (dart:async/future_impl.dart:137:18)
#10 Future._propagateToListeners.handleValueCallback (dart:async/future_impl.dart:678:45)
#11 Future._propagateToListeners (dart:async/future_impl.dart:707:32)
#12 Future._completeWithValue (dart:async/future_impl.dart:522:5)
#13 _AsyncAwaitCompleter.complete (dart:async-patch/async_patch.dart:30:15)
#14 _completeOnAsyncReturn (dart:async-patch/async_patch.dart:288:13)
#15 setupDatabase (package:gard/utilities/service_locator.dart)
#16 _asyncThenWrapperHelper.<anonymous closure> (dart:async-patch/async_patch.dart:71:64)
#17 _rootRunUnary (dart:async/zone.dart:1132:38)
#18 _CustomZone.runUnary (dart:async/zone.dart:1029:19)
#19 _FutureListener.handleValue (dart:async/future_impl.dart:137:18)
#20 Future._propagateToListeners.handleValueCallback (dart:async/future_impl.dart:678:45)
#21 Future._propagateToListeners (dart:async/future_impl.dart:707:32)
#22 Future._completeWithValue (dart:async/future_impl.dart:522:5)
#23 _AsyncAwaitCompleter.complete (dart:async-patch/async_patch.dart:30:15)
#24 _completeOnAsyncReturn (dart:async-patch/async_patch.dart:288:13)
#25 DatabaseCreator.initDatabase (package:gard/database/database_creator.dart)
#26 _asyncThenWrapperHelper.<anonymous closure> (dart:async-patch/async_patch.dart:71:64)
#27 _rootRunUnary (dart:async/zone.dart:1132:38)
#28 _CustomZone.runUnary (dart:async/zone.dart:1029:19)
#29 _FutureListener.handleValue (dart:async/future_impl.dart:137:18)
#30 Future._propagateToListeners.handleValueCallback (dart:async/future_impl.dart:678:45)
#31 Future._propagateToListeners (dart:async/future_impl.dart:707:32)
#32 Future._completeWithValue (dart:async/future_impl.dart:522:5)
#33 _AsyncAwaitCompleter.complete (dart:async-patch/async_patch.dart:30:15)
#34 _completeOnAsyncReturn (dart:async-patch/async_patch.dart:288:13)
#35 BasicLock.synchronized (package:synchronized/src/basic_lock.dart)
#36 _asyncThenWrapperHelper.<anonymous closure> (dart:async-patch/async_patch.dart:71:64)
#37 _rootRunUnary (dart:async/zone.dart:1132:38)
#38 _CustomZone.runUnary (dart:async/zone.dart:1029:19)
#39 _FutureListener.handleValue (dart:async/future_impl.dart:137:18)
#40 Future._propagateToListeners.handleValueCallback (dart:async/future_impl.dart:678:45)
#41 Future._propagateToListeners (dart:async/future_impl.dart:707:32)
#42 Future._completeWithValue (dart:async/future_impl.dart:522:5)
#43 _AsyncAwaitCompleter.complete (dart:async-patch/async_patch.dart:30:15)
#44 _completeOnAsyncReturn (dart:async-patch/async_patch.dart:288:13)
#45 ReentrantLock.synchronized.<anonymous closure> (package:synchronized/src/reentrant_lock.dart)
#46 _asyncThenWrapperHelper.<anonymous closure> (dart:async-patch/async_patch.dart:71:64)
#47 _rootRunUnary (dart:async/zone.dart:1132:38)
#48 _CustomZone.runUnary (dart:async/zone.dart:1029:19)
#49 _FutureListener.handleValue (dart:async/future_impl.dart:137:18)
#50 Future._propagateToListeners.handleValueCallback (dart:async/future_impl.dart:678:45)
#51 Future._propagateToListeners (dart:async/future_impl.dart:707:32)
#52 Future._completeWithValue (dart:async/future_impl.dart:522:5)
#53 _AsyncAwaitCompleter.complete (dart:async-patch/async_patch.dart:30:15)
#54 _completeOnAsyncReturn (dart:async-patch/async_patch.dart:288:13)
#55 SqfliteDatabaseFactoryMixin.openDatabase.<anonymous closure> (package:sqflite/src/factory_mixin.dart)
#56 _asyncThenWrapperHelper.<anonymous closure> (dart:async-patch/async_patch.dart:71:64)
#57 _rootRunUnary (dart:async/zone.dart:1132:38)
#58 _CustomZone.runUnary (dart:async/zone.dart:1029:19)
#59 _FutureListener.handleValue (dart:async/future_impl.dart:137:18)
#60 Future._propagateToListeners.handleValueCallback (dart:async/future_impl.dart:678:45)
#61 Future._propagateToListeners (dart:async/future_impl.dart:707:32)
#62 Future._completeWithValue (dart:async/future_impl.dart:522:5)
#63 _AsyncAwaitCompleter.complete (dart:async-patch/async_patch.dart:30:15)
#64 _completeOnAsyncReturn (dart:async-patch/async_patch.dart:288:13)
#65 SqfliteDatabaseOpenHelper.openDatabase (package:sqflite/src/database.dart)
#66 _asyncThenWrapperHelper.<anonymous closure> (dart:async-patch/async_patch.dart:71:64)
#67 _rootRunUnary (dart:async/zone.dart:1132:38)
#68 _CustomZone.runUnary (dart:async/zone.dart:1029:19)
#69 _FutureListener.handleValue (dart:async/future_impl.dart:137:18)
#70 Future._propagateToListeners.handleValueCallback (dart:async/future_impl.dart:678:45)
#71 Future._propagateToListeners (dart:async/future_impl.dart:707:32)
#72 Future._completeWithValue (dart:async/future_impl.dart:522:5)
#73 _AsyncAwaitCompleter.complete (dart:async-patch/async_patch.dart:30:15)
#74 _completeOnAsyncReturn (dart:async-patch/async_patch.dart:288:13)
#75 SqfliteDatabaseMixin.doOpen (package:sqflite/src/database_mixin.dart)
#76 _asyncThenWrapperHelper.<anonymous closure> (dart:async-patch/async_patch.dart:71:64)
#77 _rootRunUnary (dart:async/zone.dart:1132:38)
#78 _CustomZone.runUnary (dart:async/zone.dart:1029:19)
#79 _FutureListener.handleValue (dart:async/future_impl.dart:137:18)
#80 Future._propagateToListeners.handleValueCallback (dart:async/future_impl.dart:678:45)
#81 Future._propagateToListeners (dart:async/future_impl.dart:707:32)
#82 Future._completeWithValue (dart:async/future_impl.dart:522:5)
#83 _AsyncAwaitCompleter.complete (dart:async-patch/async_patch.dart:30:15)
#84 _completeOnAsyncReturn (dart:async-patch/async_patch.dart:288:13)
#85 SqfliteDatabaseMixin.txnSynchronized (package:sqflite/src/database_mixin.dart)
#86 _asyncThenWrapperHelper.<anonymous closure> (dart:async-patch/async_patch.dart:71:64)
#87 _rootRunUnary (dart:async/zone.dart:1132:38)
#88 _CustomZone.runUnary (dart:async/zone.dart:1029:19)
#89 _FutureListener.handleValue (dart:async/future_impl.dart:137:18)
#90 Future._propagateToListeners.handleValueCallback (dart:async/future_impl.dart:678:45)
#91 Future._propagateToListeners (dart:async/future_impl.dart:707:32)
#92 Future._completeWithValue (dart:async/future_impl.dart:522:5)
#93 _AsyncAwaitCompleter.complete (dart:async-patch/async_patch.dart:30:15)
#94 _completeOnAsyncReturn (dart:async-patch/async_patch.dart:288:13)
#95 SqfliteDatabaseMixin._runTransaction (package:sqflite/src/database_mixin.dart)
#96 _asyncThenWrapperHelper.<anonymous closure> (dart:async-patch/async_patch.dart:71:64)
#97 _rootRunUnary (dart:async/zone.dart:1132:38)
#98 _CustomZone.runUnary (dart:async/zone.dart:1029:19)
#99 _FutureListener.handleValue (dart:async/future_impl.dart:137:18)
#100 Future._propagateToListeners.handleValueCallback (dart:async/future_impl.dart:678:45)
#101 Future._propagateToListeners (dart:async/future_impl.dart:707:32)
#102 Future._completeWithValue (dart:async/future_impl.dart:522:5)
#103 _AsyncAwaitCompleter.complete (dart:async-patch/async_patch.dart:30:15)
#104 _completeOnAsyncReturn (dart:async-patch/async_patch.dart:288:13)
#105 SqfliteDatabaseMixin.endTransaction (package:sqflite/src/database_mixin.dart)
#106 _asyncThenWrapperHelper.<anonymous closure> (dart:async-patch/async_patch.dart:71:64)
#107 _rootRunUnary (dart:async/zone.dart:1132:38)
#108 _CustomZone.runUnary (dart:async/zone.dart:1029:19)
#109 _FutureListener.handleValue (dart:async/future_impl.dart:137:18)
#110 Future._propagateToListeners.handleValueCallback (dart:async/future_impl.dart:678:45)
#111 Future._propagateToListeners (dart:async/future_impl.dart:707:32)
#112 Future._completeWithValue (dart:async/future_impl.dart:522:5)
#113 _AsyncAwaitCompleter.complete (dart:async-patch/async_patch.dart:30:15)
#114 _completeOnAsyncReturn (dart:async-patch/async_patch.dart:288:13)
#115 SqfliteDatabaseMixin.txnSynchronized (package:sqflite/src/database_mixin.dart)
#116 _asyncThenWrapperHelper.<anonymous closure> (dart:async-patch/async_patch.dart:71:64)
#117 _rootRunUnary (dart:async/zone.dart:1132:38)
#118 _CustomZone.runUnary (dart:async/zone.dart:1029:19)
#119 _FutureListener.handleValue (dart:async/future_impl.dart:137:18)
#120 Future._propagateToListeners.handleValueCallback (dart:async/future_impl.dart:678:45)
#121 Future._propagateToListeners (dart:async/future_impl.dart:707:32)
#122 Future._completeWithValue (dart:async/future_impl.dart:522:5)
#123 _AsyncAwaitCompleter.complete (dart:async-patch/async_patch.dart:30:15)
#124 _completeOnAsyncReturn (dart:async-patch/async_patch.dart:288:13)
#125 wrapDatabaseException (package:sqflite/src/exception_impl.dart)
#126 _asyncThenWrapperHelper.<anonymous closure> (dart:async-patch/async_patch.dart:71:64)
#127 _rootRunUnary (dart:async/zone.dart:1132:38)
#128 _CustomZone.runUnary (dart:async/zone.dart:1029:19)
#129 _FutureListener.handleValue (dart:async/future_impl.dart:137:18)
#130 Future._propagateToListeners.handleValueCallback (dart:async/future_impl.dart:678:45)
#131 Future._propagateToListeners (dart:async/future_impl.dart:707:32)
#132 Future._completeWithValue (dart:async/future_impl.dart:522:5)
#133 _AsyncAwaitCompleter.complete (dart:async-patch/async_patch.dart:30:15)
#134 _completeOnAsyncReturn (dart:async-patch/async_patch.dart:288:13)
#135 MethodChannel.invokeMethod (package:flutter/src/services/platform_channel.dart)
#136 _asyncThenWrapperHelper.<anonymous closure> (dart:async-patch/async_patch.dart:71:64)
#137 _rootRunUnary (dart:async/zone.dart:1132:38)
#138 _CustomZone.runUnary (dart:async/zone.dart:1029:19)
#139 _FutureListener.handleValue (dart:async/future_impl.dart:137:18)
#140 Future._propagateToListeners.handleValueCallback (dart:async/future_impl.dart:678:45)
#141 Future._propagateToListeners (dart:async/future_impl.dart:707:32)
#142 Future._completeWithValue (dart:async/future_impl.dart:522:5)
#143 Future._asyncComplete.<anonymous closure> (dart:async/future_impl.dart:552:7)
#144 _rootRun (dart:async/zone.dart:1124:13)
#145 _CustomZone.run (dart:async/zone.dart:1021:19)
#146 _CustomZone.runGuarded (dart:async/zone.dart:923:7)
#147 _CustomZone.bindCallbackGuarded.<anonymous closure> (dart:async/zone.dart:963:23)
#148 _microtaskLoop (dart:async/schedule_microtask.dart:41:21)
#149 _startMicrotaskLoop (dart:async/schedule_microtask.dart:50:5)
2019-10-15 08:44:54.520569+0100 Runner[16132:1794333] [TSBackgroundFetch configure]: {
enableHeadless = 1;
minimumFetchInterval = 15;
stopOnTerminate = 0;
}
2019-10-15 08:44:54.525630+0100 Runner[16132:1794333] [TSBackgroundFetch addListener]: com.transistorsoft/flutter_background_fetch
2019-10-15 08:44:54.525691+0100 Runner[16132:1794333] [TSBackgroundFetch start]
2019-10-15 08:44:54.761953+0100 Runner[16132:1794545] flutter: ---- BackgroundFetch configure success: 2
2019-10-15 08:44:56.139196+0100 Runner[16132:1794545] flutter: -----setNotificationToken-----
2019-10-15 08:44:56.139413+0100 Runner[16132:1794545] flutter: fSpD_VrnO2k:APA91bEwfT083oNVxPDy-kiF9mTPZiyoQbS2owQTK18erSARU8akzANG6H1zWr5bgMpAePkx3jc3F3spSAOSsf4Wr_zj3bDEi1yw1E5UeHSJCsMh3flDxNxq2mE__FwhiP2M35szQi0l
Background message handling is not supported on iOS as of firebase_messaging 6.0.9
.
As you can see in the changelog, support was added only for Android: https://pub.dev/packages/firebase_messaging#515
Check out this github issue and add a reaction if you want it implemented sooner: https://github.com/FirebaseExtended/flutterfire/issues/47
The firebase_messaging > 8.0.0-dev
plugin now supports background message handling for iOS too.
Changelog: https://pub.dev/packages/firebase_messaging/versions/8.0.0-dev.11/changelog
Migrating to v8: https://firebase.flutter.dev/docs/migration/
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With