MissingPluginException(未在通道 plugins.flutter.io/firebase_messaging 上找到方法 getToken 的实现)
MissingPluginException(No implementation found for method getToken on channel plugins.flutter.io/firebase_messaging)
在我的 flutter android 应用程序的发布版本中,我收到此错误。
我试过:
从 Google Firebase 中的 Play 控制台更新 SHA-1 密钥
正在更新 google-services.json
重建和推出。
我仍然收到此错误。
我启用了 INTERNET_PERMISSIONS 和 cleartext=true。
应用程序在 iOS 和 android 调试模式下也能正常工作。
2021-02-15 00:47:37.450 2888-2932/? E/flutter:[错误:flutter/lib/ui/ui_dart_state.cc(177)] 未处理的异常:MissingPluginException(未在通道 plugins.flutter.io/firebase_messaging 上找到方法配置的实现)
#0 MethodChannel._invokeMethod(包:flutter/src/services/platform_channel.dart:157)
2021-02-15 00:47:37.450 2888-2932/? E/flutter:[错误:flutter/lib/ui/ui_dart_state.cc(177)] 未处理的异常:MissingPluginException(未在通道 plugins.flutter.io/firebase_messaging 上找到方法 getToken 的实现)
#0 MethodChannel._invokeMethod(包:flutter/src/services/platform_channel.dart:157)
#1 FirebaseMessaging.getToken(包:firebase_messaging/firebase_messaging.dart:146)
在应用 build.gradle
文件中添加此依赖项。
implementation 'com.google.firebase:firebase-messaging:21.0.1'
请确保您已执行以下步骤:
1: 在pubspecs.yaml
中添加dep
firebase_core: // latest version
firebase_messaging: // latest version
2: 在应用 build.gradle
文件中添加依赖和服务。
dependencies {
implementation platform('com.google.firebase:firebase-bom:26.5.0')
implementation 'com.google.firebase:firebase-messaging'
}
apply plugin: 'com.google.gms.google-services'
3: google-service.json仅在app
目录下
4:在main.dart
中初始化
Future<void> main() async {
WidgetsFlutterBinding.ensureInitialized();
await Firebase.initializeApp();
runApp(MyApp());
}
5:将此代码添加到您的主要 class 或第一次执行 class
FirebaseMessaging.instance.getToken().then((token){
print("token $token");
});
假设您的 pubspec.yaml 中有以下内容(和 运行 一个隐式的 flutter pub get):
dependencies:
firebase_messaging: ^10.0.9
进口,
现在在你的 Dart 代码中,你可以使用:
import 'package:firebase_messaging/firebase_messaging.dart';
然后在您的 class 中,这里有一个您可能想要使用的方法,可能用于订阅主题:
Future<void> subscribeToChallenge(String topic) async {
// subscribe to topic on when user clicks join
await Firebase.initializeApp();
await FirebaseMessaging.instance.subscribeToTopic(topic);
}
注意到 initializeApp() 再次调用,即使主文件中已经有这样的调用?是的,这就是我靠直觉让它工作的方式。
在我的 flutter android 应用程序的发布版本中,我收到此错误。
我试过:
从 Google Firebase 中的 Play 控制台更新 SHA-1 密钥 正在更新 google-services.json 重建和推出。
我仍然收到此错误。 我启用了 INTERNET_PERMISSIONS 和 cleartext=true。
应用程序在 iOS 和 android 调试模式下也能正常工作。
2021-02-15 00:47:37.450 2888-2932/? E/flutter:[错误:flutter/lib/ui/ui_dart_state.cc(177)] 未处理的异常:MissingPluginException(未在通道 plugins.flutter.io/firebase_messaging 上找到方法配置的实现) #0 MethodChannel._invokeMethod(包:flutter/src/services/platform_channel.dart:157) 2021-02-15 00:47:37.450 2888-2932/? E/flutter:[错误:flutter/lib/ui/ui_dart_state.cc(177)] 未处理的异常:MissingPluginException(未在通道 plugins.flutter.io/firebase_messaging 上找到方法 getToken 的实现) #0 MethodChannel._invokeMethod(包:flutter/src/services/platform_channel.dart:157) #1 FirebaseMessaging.getToken(包:firebase_messaging/firebase_messaging.dart:146)
在应用 build.gradle
文件中添加此依赖项。
implementation 'com.google.firebase:firebase-messaging:21.0.1'
请确保您已执行以下步骤:
1: 在pubspecs.yaml
中添加depfirebase_core: // latest version
firebase_messaging: // latest version
2: 在应用 build.gradle
文件中添加依赖和服务。
dependencies {
implementation platform('com.google.firebase:firebase-bom:26.5.0')
implementation 'com.google.firebase:firebase-messaging'
}
apply plugin: 'com.google.gms.google-services'
3: google-service.json仅在app
目录下
4:在main.dart
Future<void> main() async {
WidgetsFlutterBinding.ensureInitialized();
await Firebase.initializeApp();
runApp(MyApp());
}
5:将此代码添加到您的主要 class 或第一次执行 class
FirebaseMessaging.instance.getToken().then((token){
print("token $token");
});
假设您的 pubspec.yaml 中有以下内容(和 运行 一个隐式的 flutter pub get):
dependencies:
firebase_messaging: ^10.0.9
进口, 现在在你的 Dart 代码中,你可以使用:
import 'package:firebase_messaging/firebase_messaging.dart';
然后在您的 class 中,这里有一个您可能想要使用的方法,可能用于订阅主题:
Future<void> subscribeToChallenge(String topic) async {
// subscribe to topic on when user clicks join
await Firebase.initializeApp();
await FirebaseMessaging.instance.subscribeToTopic(topic);
}
注意到 initializeApp() 再次调用,即使主文件中已经有这样的调用?是的,这就是我靠直觉让它工作的方式。