#flutter #firebase-cloud-messaging #flutter-dependencies
#flutter #firebase-cloud-messaging #flutter-зависимости
Вопрос:
Я создал приложение на Flutter и пытался отправлять Push-уведомления через FCM. Ранее это работало, но после изменения версии Firebase messaging приложение вылетает, как только я отправляю push-уведомление.
Я не вносил никаких изменений в код как таковой. Я изучил проблемы с GitHub, но не смог их решить.
Этот код я использовал в файле main.dart.
final FirebaseMessaging _firebaseMessaging = FirebaseMessaging();
void initState() {
super.initState();
_firebaseMessaging.configure(
onMessage: (Map<String, dynamic> message) {
print('on message $message');
},
onResume: (Map<String, dynamic> message) {
print('on resume $message');
},
onLaunch: (Map<String, dynamic> message) {
print('on launch $message');
},
);
_firebaseMessaging.requestNotificationPermissions(
const IosNotificationSettings(sound: true, badge: true, alert: true));
_firebaseMessaging.getToken().then((token){
print(token);
});
Моя зависимость firebase_messaging
firebase_messaging: ^1.0.2
Я также изменил версию google-services в app / build.gradle
dependencies {
classpath 'com.android.tools.build:gradle:3.1.2'
classpath 'com.google.gms:google-services:3.2.0'
}
Это часть, добавленная в AndroidManifest.xml файл для уведомлений
<intent-filter>
<action android:name="FLUTTER_NOTIFICATION_CLICK" />
<category android:name="android.intent.category.DEFAULT" />
</intent-filter>
Журнал устройства
03-24 19:14:25.044 2630 2663 I ActivityManager: Start proc 17709:com.example.notif_app/u0a206 for broadcast com.example.notif_app/com.google.firebase.iid.FirebaseInstanceIdReceiver
03-24 19:14:25.047 17709 17709 I art : Late-enabling -Xcheck:jni
03-24 19:14:25.181 17709 17709 D FirebaseApp: com.google.firebase.auth.FirebaseAuth is not linked. Skipping initialization.
03-24 19:14:25.182 17709 17709 D FirebaseApp: com.google.firebase.crash.FirebaseCrash is not linked. Skipping initialization.
03-24 19:14:25.182 17709 17709 I FirebaseInitProvider: FirebaseApp initialization successful
03-24 19:14:25.199 17709 17730 I ResourceExtractor: Found extracted resources res_timestamp-1-1553431828587
03-24 19:14:25.206 17709 17727 I FA : App measurement is starting up, version: 15300
03-24 19:14:25.206 17709 17727 I FA : To enable debug logging run: adb shell setprop log.tag.FA VERBOSE
03-24 19:14:25.207 17709 17727 I FA : To enable faster debug mode event logging run:
03-24 19:14:25.207 17709 17727 I FA : adb shell setprop debug.firebase.analytics.app com.example.notif_app
03-24 19:14:25.220 17709 17709 D AndroidRuntime: Shutting down VM
03-24 19:14:25.221 17709 17709 E AndroidRuntime: FATAL EXCEPTION: main
03-24 19:14:25.221 17709 17709 E AndroidRuntime: Process: com.example.notif_app, PID: 17709
03-24 19:14:25.221 17709 17709 E AndroidRuntime: java.lang.NoSuchMethodError: No static method zzad()Lcom/google/firebase/iid/zzan; in class Lcom/google/firebase/iid/zzan; or its super classes (declaration of 'com.google.firebase.iid.zzan' appears in /data/app/com.example.notif_app-1/base.apk:classes2.dex)
03-24 19:14:25.221 17709 17709 E AndroidRuntime: at com.google.firebase.messaging.FirebaseMessagingService.zzb(Unknown Source)
03-24 19:14:25.221 17709 17709 E AndroidRuntime: at com.google.firebase.iid.zzb.onStartCommand(Unknown Source)
03-24 19:14:25.221 17709 17709 E AndroidRuntime: at android.app.ActivityThread.handleServiceArgs(ActivityThread.java:3318)
03-24 19:14:25.221 17709 17709 E AndroidRuntime: at android.app.ActivityThread.-wrap21(ActivityThread.java)
Кто-нибудь может мне помочь с этим? Заранее спасибо.
Комментарии:
1. добавьте вывод ошибки.
2. @Ryosuke при сбое приложения не было журнала ошибок ни в logcat, ни на вкладке run. Любой другой способ проверить журнал ошибок
3. какую IDE вы используете?
4. откройте папку Android внутри Android Studio. Там в logcat отредактируйте конфигурацию фильтра и задайте имя пакета.
5. Я использовал adb logcat для проверки журнала устройства и извлек необходимые для моего приложения. Я отредактировал вопрос таким же образом.
Ответ №1:
Просто запустите flutter clean
и запустите ваше приложение еще раз.
Комментарии:
1. Это сработало, но также мне пришлось очистить хранилище приложения, лучше удалить и переустановить приложение,
Ответ №2:
Откройте проект Android.
Перейдите к build.gradle firebase_messaging
В изменении зависимостей api 'com.google.firebase:firebase-messaging:18.0.0'
на api 'com.google.firebase:firebase-messaging:17.3.3'
Убедитесь, что вы используете последнюю версию всех облачных зависимостей в pubspec.yaml
Это решение сработало для меня
Ответ №3:
В моем случае я следовал инструкциям плагина https://pub.dev/packages/firebase_messaging но все равно, мое приложение для Android разбилось.
Причина была в файле android/app/src/main/kotlin/com/example/app/MainActivity.kt
Когда я изменил его на
package YOUR.APP.PACKAGE
import io.flutter.embedding.android.FlutterActivity
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.FlutterFirebaseMessagingService
class Application : FlutterApplication(), PluginRegistrantCallback {
override fun onCreate() {
super.onCreate()
FlutterFirebaseMessagingService.setPluginRegistrant(this);
}
override fun registerWith(registry: PluginRegistry?) {
io.flutter.plugins.firebasemessaging.FirebaseMessagingPlugin.registerWith(registry?.registrarFor("io.flutter.plugins.firebasemessaging.FirebaseMessagingPlugin"));
}
}
Сбой устранен.
Также на всякий случай, код для прослушивания поступающих сообщений, важно иметь обработчик для onBackgroundMessage
static Future<dynamic> myBackgroundMessageHandler(Map<String, dynamic> message) async { print(message); return Future<void>.value(); }
firebaseMessaging.configure(
// when app is open
onMessage: (Map<String, dynamic> message) async {
try {
Get.defaultDialog(
title: message['notification']['title'] ?? 'New reaction to comment',
middleText: message['notification']['body'] ?? 'Click to react',
textCancel: 'Cancel',
textConfirm: 'See',
onCancel: () {},
onConfirm: () => PushServices.managePushesLinkToProject(message));
} catch (e) {
print('$e');
}
},
onLaunch: (Map<String, dynamic> message) async {
PushServices.managePushesLinkToProject(message);
},
onResume: (Map<String, dynamic> message) async {
PushServices.managePushesLinkToProject(message);
},
onBackgroundMessage: myBackgroundMessageHandler,
);
Ключевое решение было найдено здесь https://github.com/FirebaseExtended/flutterfire/issues/2311