这仅适用于 Flutter 和 Android,因为目前我只专注于 Android。
我使用 firebase_core 和 firebase_messaging 包来通过 Firebase 设置和触发推送通知。 当我处于调试模式时,我可以在后台和前台很好地触发通知。 当我处于发布模式时,通知仅在前台触发。在后台时,根本不显示推送通知。但是,_firebaseMessagingBackgroundHandler 在调试和发布模式下都会被触发!
我还没有找到任何人遇到我的问题,所以这一定是我缺少的一些配置。只是不知道那是什么。
这是我的 main.dart 文件:
@pragma('vm:entry-point')
Future<void> _firebaseMessagingBackgroundHandler(RemoteMessage message) async {
await Firebase.initializeApp();
print('Handling a background message: ${message.messageId}');
}
void main() async {
WidgetsFlutterBinding.ensureInitialized();
await Firebase.initializeApp(
options: DefaultFirebaseOptions.currentPlatform,
);
final settingsController = SettingsController(SettingsService());
await settingsController.loadSettings();
FirebaseMessaging.onBackgroundMessage(_firebaseMessagingBackgroundHandler);
// Run the app and pass in the SettingsController. The app listens to the
// SettingsController for changes, then passes it further down to the
// SettingsView.
runApp(MyAppWrapper(settingsController: settingsController));
}
// MyAppWrapper to handle MessagingWidget
class MyAppWrapper extends StatelessWidget {
final SettingsController settingsController;
const MyAppWrapper({Key? key, required this.settingsController}) : super(key: key);
@override
Widget build(BuildContext context) {
return MyApp(settingsController: settingsController);
}
}
有人可以帮助我吗?
我尝试在
@pragma('vm:entry-point')
之前添加 _firebaseMessagingBackgroundHandler
。虽然它解决了与后台通知相关的错误,但它并没有解决我在发布模式下在后台接收推送通知的需要。
flutter clean
flutter pub get
也尝试过。
问题出在 ProGuard - 即使我没有在应用程序文件夹内的 build.gradle 文件中将 minifyEnabled 或收缩资源启用为 true,Android 默认情况下将这两个配置启用为 true。
将shrinkResources设置为false解决了这个问题。
如果您想将其保持为 true,您可以创建一个名为 proguard-rules.pro 的文件并将其放入其中: -keep 类 android.graphics.drawable.Icon { *; }
您可以在线搜索更多与 ProGuard 问题相关的内容:)