'MissingPluginException(No implementation found for method getAll on channel plugins.flutter.io/shared_preferences) while getting FCM in background
I'm working on a Flutter app in which I'm using the shared_preferences: ^2.0.13 package.
Flutter version : 2.10.1 (latest)
gradle version: 6.7
Android gradle plugin version: 4.1.3
kotlin version: 1.6.10
flutterEmbedding 2 (in android menifiest)
MissingPluginException(No implementation found for method getAll on channel plugins.flutter.io/shared_preferences).
While getting FCM message received in background.
main.dart
Future<void> _firebaseMessagingBackgroundHandler(RemoteMessage message) async {
await Firebase.initializeApp();
print('Got a message onBackgroundMessageHandler_');
print("Handling a background message: ${message.messageId}");
print('Shared pref process starts');
SharedPreferences sf = await SharedPreferences.getInstance();
sf.setString("key", "Value");
print('${sf.getKeys()}');
print('Shared pref process ends');
}
void main() async{
WidgetsFlutterBinding.ensureInitialized();
await Firebase.initializeApp();
FirebaseMessaging.onBackgroundMessage(_firebaseMessagingBackgroundHandler);
runApp(const MyApp());
}
MainActivity.kt
class MainActivity: FlutterActivity() {
}
Solution 1:[1]
please reference to my post
you need to register share_preference for background access
io.flutter.plugins.sharedpreferences.SharedPreferencesPlugin.registerWith(registry.registrarFor("io.flutter.plugins.sharedpreferences.SharedPreferencesPlugin"));
Solution 2:[2]
Some edit into your code below:
import 'package:shared_preferences_android/shared_preferences_android.dart';
import 'package:shared_preferences_ios/shared_preferences_ios.dart';
Future<void> _firebaseMessagingBackgroundHandler(RemoteMessage message) async {
await Firebase.initializeApp();
print('Got a message onBackgroundMessageHandler_');
print("Handling a background message: ${message.messageId}");
print('Shared pref process starts');
// I am not sure what does SharedPreferencesAndroid.registerWith(); but it can solve problem
if (Platform.isAndroid) SharedPreferencesAndroid.registerWith();
if (Platform.isIOS) SharedPreferencesIOS.registerWith();
SharedPreferences sf = await SharedPreferences.getInstance();
sf.setString("key", "Value");
print('${sf.getKeys()}');
print('Shared pref process ends');
}
void main() async{
WidgetsFlutterBinding.ensureInitialized();
await Firebase.initializeApp();
FirebaseMessaging.onBackgroundMessage(_firebaseMessagingBackgroundHandler);
runApp(const MyApp());
}
There wasn't a little bit of information about it, espacially in firebase cloud messaging docs. I think this information must be available in onBackgroundMessage section of docs!
Sources
This article follows the attribution requirements of Stack Overflow and is licensed under CC BY-SA 3.0.
Source: Stack Overflow
| Solution | Source |
|---|---|
| Solution 1 | Jim |
| Solution 2 | MerdanDev |
