使用Firebase推送通知时Flutter App崩溃

问题描述

我希望在Flutter应用程序中借助Firebase功能显示推送通知。但是每次发送通知时,我的应用都会崩溃。

这是我的推送通知代码,我正在尝试在小吃栏中显示

import 'dart:io';
import 'package:cloud_firestore/cloud_firestore.dart';
import 'package:firebase_messaging/firebase_messaging.dart';
import 'package:firebase_storage/firebase_storage.dart';
import 'package:Flutter/cupertino.dart';
import 'package:Flutter/material.dart';
import 'package:Fluttershare/models/user.dart';
import 'package:Fluttershare/pages/activity_Feed.dart';
import 'package:Fluttershare/pages/create_account.dart';
import 'package:Fluttershare/pages/profile.dart';
import 'package:Fluttershare/pages/search.dart';
import 'package:Fluttershare/pages/timeline.dart';
import 'package:Fluttershare/pages/upload.dart';
import 'package:google_sign_in/google_sign_in.dart';

final GoogleSignIn googleSignIn = GoogleSignIn();
final StorageReference storageref = FirebaseStorage.instance.ref();
final usersRef = Firestore.instance.collection('users');
final postsRef = Firestore.instance.collection('posts');
final commentsRef = Firestore.instance.collection('comments');
final activityRef = Firestore.instance.collection('Feed');
final followersRef = Firestore.instance.collection('followers');
final followingRef = Firestore.instance.collection('following');
final timelineRef = Firestore.instance.collection('timeline');
final DateTime timestamp = DateTime.Now();
User currentUser;


class Home extends StatefulWidget {
  @override
  _HomeState createState() => _HomeState();
}


class _HomeState extends State<Home> {
  final _scaffoldKey = GlobalKey<ScaffoldState>();
  FirebaseMessaging _firebaseMessaging = FirebaseMessaging();
  bool isAuth = false;
  PageController pageController;
  int pageIndex = 0;

  @override
  void initState(){

    super.initState();

    pageController = PageController();


    googleSignIn.onCurrentUserChanged.listen((GoogleSignInAccount account) {

      handleSignIn(account);

    },onError: (err){

      print('Error Signing In!: $err');

    });

    googleSignIn.signInSilently(suppressErrors: false).then((account){

      handleSignIn(account);

      }).catchError((err){
      print('Error Signing In!: $err');
    });
  }

  handleSignIn(GoogleSignInAccount account) async{
    if(account!= null){
      await createuserInFirestore();
      setState(() {
        isAuth = true;
      });
      configurePushNotifications();
    }

    else{
      setState(() {
        isAuth = false;
      });
    }
  }

  configurePushNotifications() {
    final GoogleSignInAccount user = googleSignIn.currentUser;
    if (Platform.isIOS) {getIOSPermission();}

    _firebaseMessaging.getToken().then((token) {
      print('MToken: $token');
      usersRef
          .document(user.id)
          .updateData({'androidNotificationToken': token});
    });

    _firebaseMessaging.configure(
      onMessage: (Map<String,dynamic> message) async {
        print('onmessage: $message');
        final String recipientId = message['data']['recipient'];
        final String body = message['notification']['body'];

        if (recipientId == currentUser.id) {
          print('Notified');
          SnackBar snackBar = SnackBar(
            content: Text(
              body,overflow: TextOverflow.ellipsis,),);
          _scaffoldKey.currentState.showSnackBar(snackBar);
        }
        print('Not notified');
      },);
  }

  getIOSPermission() {
    _firebaseMessaging.requestNotificationPermissions(
        IosNotificationSettings(alert: true,sound: true,badge: true));
    _firebaseMessaging.onIosSettingsRegistered.listen((settings) {
      print('settings configured $settings');
    });
  }
  createuserInFirestore() async{
    final GoogleSignInAccount user = googleSignIn.currentUser;
    DocumentSnapshot doc = await usersRef.document(user.id).get();

    if(!doc.exists){
     final username = await Navigator.push(context,MaterialPageRoute(builder: (context) => CreateAccount()));
     usersRef.document(user.id).setData({
       'id': user.id,'username' : username,'photoUrl' : user.photoUrl,'email' : user.email,'displayName' : user.displayName,'bio' : '','timestamp' : timestamp,});
     
          await followersRef
          .document(user.id)
          .collection('userFollowers')
          .document(user.id)
          .setData({});
          doc = await usersRef.document(user.id).get();
    }
          currentUser =  User.fromDocument(doc);
            print(currentUser);
          print(currentUser.displayName);
  } 

  @override
  void dispose(){
    pageController.dispose();
    super.dispose();
  }

  login(){
    googleSignIn.signIn();
  }

  logout(){
    googleSignIn.signOut();
  }

  onPageChanged(int pageIndex){
    setState(() {
      this.pageIndex = pageIndex;
    });
  }

  onTap(int pageIndex){
    pageController.animatetoPage(pageIndex,duration: Duration(milliseconds: 300),curve: Curves.easeInOut);
  }

  Scaffold buildAuthScreen(){
    return Scaffold(
      key: _scaffoldKey,body: PageView(
        children: <Widget>[
          Timeline(currentUser: currentUser,ActivityFeed(),Upload(currentUser: currentUser),Search(),Profile(profileId: currentUser?.id),],controller: pageController,onPageChanged: onPageChanged,physics: NeverScrollableScrollPhysics(),bottomNavigationBar: CupertinoTabBar(
        currentIndex: pageIndex,onTap: onTap,activeColor: Theme.of(context).primaryColor,items: [
          BottomNavigationBarItem(icon: Icon(Icons.whatshot)),BottomNavigationBarItem(icon: Icon(Icons.favorite)),BottomNavigationBarItem(icon: Icon(Icons.photo_camera,size: 35.0,)),BottomNavigationBarItem(icon: Icon(Icons.search)),BottomNavigationBarItem(icon: Icon(Icons.account_circle)),);
    /*return RaisedButton(
      child: Text('logout'),onpressed: logout,*//*
    );*/
  }

  Scaffold buildUnAuthScreen(){
    return Scaffold(
      bottomNavigationBar: BottomAppBar(
        color: Colors.deepPurple,child: Text("2020 © Rinkumoni Khanikar",style: TextStyle(color: Colors.white,fontSize: 20.0,textAlign: TextAlign.center,elevation: 0,body: Container(
        decoration: Boxdecoration(
          gradient: LinearGradient(
            begin: Alignment.topRight,end: Alignment.bottomLeft,colors: [
              Theme.of(context).accentColor,Theme.of(context).primaryColor,]
          ),alignment: Alignment.center,child: Column(
          mainAxisAlignment: MainAxisAlignment.center,crossAxisAlignment: CrossAxisAlignment.center,children: <Widget>[
            Text('FriendsHive',style: TextStyle(
              fontFamily: 'Signatra',fontSize: 90.0,color: Colors.white,GestureDetector(
              onTap: login,child: Container(
                width: 260.0,height: 60.0,decoration: Boxdecoration(
                  image: decorationImage(image: Assetimage('assets/images/google_signin_button.png'),fit: BoxFit.cover,);
  }



  @override
  Widget build(BuildContext context) {
    return isAuth ? buildAuthScreen() : buildUnAuthScreen();
  }
}

错误日志

I/Flutter (26074): MToken: c5kWogEMjaM:APA91bEb31vFm6DVfvB_ZthTR3MLHe0TJIGdrhGhEU644Ld4MCGLb7zQt4hbzp4uo3_IZxN4Zru_lsW-4mjYucEyrqL4o7ScKHJ53Da1LAoCuu1m2J4JAKDvMyP3T11kCExU6PsYfwWK
I/Flutter (26074): MToken: c5kWogEMjaM:APA91bEb31vFm6DVfvB_ZthTR3MLHe0TJIGdrhGhEU644Ld4MCGLb7zQt4hbzp4uo3_IZxN4Zru_lsW-4mjYucEyrqL4o7ScKHJ53Da1LAoCuu1m2J4JAKDvMyP3T11kCExU6PsYfwWK
D/AndroidRuntime(26074): Shutting down VM
E/AndroidRuntime(26074): FATAL EXCEPTION: main
E/AndroidRuntime(26074): Process: com.rinku.friendshive,PID: 26074
E/AndroidRuntime(26074): java.lang.RuntimeException: Unable to instantiate receiver com.google.firebase.iid.FirebaseInstanceIdReceiver: java.lang.classNotFoundException: Didn't find class "com.google.firebase.iid.FirebaseInstanceIdReceiver" on path: DexPathList[[zip file "/data/app/com.rinku.friendshive-Gbd9-6Fb8N-XDT23jqNErg==/base.apk"],nativeLibraryDirectories=[/data/app/com.rinku.friendshive-Gbd9-6Fb8N-XDT23jqNErg==/lib/arm64,/data/app/com.rinku.friendshive-Gbd9-6Fb8N-XDT23jqNErg==/base.apk!/lib/arm64-v8a,/system/lib64,/system/product/lib64]]
E/AndroidRuntime(26074):    at android.app.ActivityThread.handleReceiver(ActivityThread.java:3832)
E/AndroidRuntime(26074):    at android.app.ActivityThread.access$1500(ActivityThread.java:224)
E/AndroidRuntime(26074):    at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1898)
E/AndroidRuntime(26074):    at android.os.Handler.dispatchMessage(Handler.java:107)
E/AndroidRuntime(26074):    at android.os.Looper.loop(Looper.java:224)
E/AndroidRuntime(26074):    at android.app.ActivityThread.main(ActivityThread.java:7560)
E/AndroidRuntime(26074):    at java.lang.reflect.Method.invoke(Native Method)
E/AndroidRuntime(26074):    at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:539)
E/AndroidRuntime(26074):    at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:950)
E/AndroidRuntime(26074): Caused by: java.lang.classNotFoundException: Didn't find class "com.google.firebase.iid.FirebaseInstanceIdReceiver" on path: DexPathList[[zip file "/data/app/com.rinku.friendshive-Gbd9-6Fb8N-XDT23jqNErg==/base.apk"],/system/product/lib64]]
E/AndroidRuntime(26074):    at dalvik.system.BaseDexClassLoader.findClass(BaseDexClassLoader.java:230)
E/AndroidRuntime(26074):    at java.lang.classLoader.loadClass(ClassLoader.java:379)
E/AndroidRuntime(26074):    at java.lang.classLoader.loadClass(ClassLoader.java:312)
E/AndroidRuntime(26074):    at android.app.AppComponentFactory.instantiateReceiver(AppComponentFactory.java:110)
E/AndroidRuntime(26074):    at androidx.core.app.CoreComponentFactory.instantiateReceiver(CoreComponentFactory.java:60)
E/AndroidRuntime(26074):    at android.app.ActivityThread.handleReceiver(ActivityThread.java:3825)
E/AndroidRuntime(26074):    ... 8 more
E/AndroidRuntime(26074):    Suppressed: java.lang.NoClassDefFoundError: Failed resolution of: Landroidx/legacy/content/WakefulbroadcastReceiver;
E/AndroidRuntime(26074):        at java.lang.VMClassLoader.findLoadedClass(Native Method)
E/AndroidRuntime(26074):        at java.lang.classLoader.findLoadedClass(ClassLoader.java:738)
E/AndroidRuntime(26074):        at java.lang.classLoader.loadClass(ClassLoader.java:363)
E/AndroidRuntime(26074):        ... 12 more
E/AndroidRuntime(26074):    Caused by: java.lang.classNotFoundException: Didn't find class "androidx.legacy.content.WakefulbroadcastReceiver" on path: DexPathList[[zip file "/data/app/com.rinku.friendshive-Gbd9-6Fb8N-XDT23jqNErg==/base.apk"],/system/product/lib64]]
E/AndroidRuntime(26074):        at dalvik.system.BaseDexClassLoader.findClass(BaseDexClassLoader.java:230)
E/AndroidRuntime(26074):        at java.lang.classLoader.loadClass(ClassLoader.java:379)
E/AndroidRuntime(26074):        at java.lang.classLoader.loadClass(ClassLoader.java:312)
E/AndroidRuntime(26074):        ... 15 more
E/MQSEventManagerDelegate(26074): Failed to get MQSService.
I/Process (26074): Sending signal. PID: 26074 SIG: 9
Lost connection to device.

现在创建并打印了Firebase消息传递令牌,但未打印onmessage,Notified和Not Notified,最终导致应用程序崩溃。

我不知道该怎么办。请任何人能帮助我吗?

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...