• 0

FMC احدث اصدار من Flutter

السلام عليكم ورحمة الله وبركاته 

تحيه طيبه للجميع 

قمت بستعمال احدث اصدار من اشعارات فايربيز في فلاتر الكود شغال اذا كنت خارج التطبيق لا توجد مشكله ولكن لو كنت داخل التطبيق لا يتم عرض الاشعارات للمستخدم

لا اعلم ما هو الجزء المتبقي في الامر 

الكود كامل:



Future<void> _firebaseMessagingBackgroundHandler(RemoteMessage message) async {
  print("Handling a background message: ${message.messageId}");
}

void main() async {
  runApp(MyApp());
}

class MyApp extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return
      MaterialApp(
        title: 'Notify',
        theme: ThemeData(
          primarySwatch: Colors.deepPurple,
        ),
        debugShowCheckedModeBanner: false,
        home: HomePage(),

    );
  }
}

class HomePage extends StatefulWidget {
  @override
  _HomePageState createState() => _HomePageState();
}

class _HomePageState extends State<HomePage> {
   FirebaseMessaging _messaging;
   int _totalNotifications;
  PushNotification _notificationInfo;

  void registerNotification() async {
    await Firebase.initializeApp();_messaging = FirebaseMessaging.instance;

    FirebaseMessaging.onBackgroundMessage(_firebaseMessagingBackgroundHandler);

    NotificationSettings settings = await _messaging.requestPermission(
      alert: true,
      badge: true,
      provisional: false,
      sound: true,
    );

    if (settings.authorizationStatus == AuthorizationStatus.authorized) {
      print('User granted permission');

      FirebaseMessaging.onMessage.listen((RemoteMessage message) {
        print(
            'Message title: ${message.notification?.title}, body: ${message.notification?.body}, data: ${message.data}');

        // Parse the message received
        PushNotification notification = PushNotification(
          title: message.notification?.title,
          body: message.notification?.body,
          dataTitle: message.data['title'],
          dataBody: message.data['body'],
        );

        setState(() {
          _notificationInfo = notification;
          _totalNotifications++;
        });

        if (_notificationInfo != null) {

          showNotification;

        }
      });
    } else {
      print('User declined or has not accepted permission');
    }
  }
   static void showNotification(String title, String body) async {
     await _demoNotification(title, body);
   }
   static Future<void> _demoNotification(String title, String body) async {
     var androidPlatformChannelSpecifics = AndroidNotificationDetails(
         'channel_ID', 'channel name', 'channel description',
         importance: Importance.max,
         playSound: true,
         // sound: 'sound',
         // sound: true,
         showProgress: true,
         priority: Priority.high,
         ticker: 'test ticker');

     var iOSChannelSpecifics = IOSNotificationDetails();
     var platformChannelSpecifics = NotificationDetails(
         android: androidPlatformChannelSpecifics, iOS: iOSChannelSpecifics);
     await flutterLocalNotificationsPlugin
         .show(0, title, body, platformChannelSpecifics, payload: 'test');
   }
   static FlutterLocalNotificationsPlugin flutterLocalNotificationsPlugin =
   new FlutterLocalNotificationsPlugin();

   static void initialization(){
     var initializationSettingsAndroid =
     new AndroidInitializationSettings('@mipmap/ic_launcher');
     var initializationSettingsIOS = new IOSInitializationSettings();
     var initializationSettings = new InitializationSettings(
         android: initializationSettingsAndroid, iOS: initializationSettingsIOS);

     flutterLocalNotificationsPlugin = new FlutterLocalNotificationsPlugin();
     flutterLocalNotificationsPlugin.initialize(initializationSettings,
         onSelectNotification: onSelectNotification);
   }

   static Future onSelectNotification(String payload) async {
     showDialog(
       //   context: context,
       builder: (_) {
         return new AlertDialog(
           title: Text("PayLoad"),
           content: Text("Payload : $payload"),
         );
       },
     );
   }
   // For handling notification when the app is in terminated state
  checkForInitialMessage() async {
    await Firebase.initializeApp();
    RemoteMessage initialMessage =
        await FirebaseMessaging.instance.getInitialMessage();

    if (initialMessage != null) {
      PushNotification notification = PushNotification(
        title: initialMessage.notification?.title,
        body: initialMessage.notification?.body,
        dataTitle: initialMessage.data['title'],
        dataBody: initialMessage.data['body'],
      );

      setState(() {
        _notificationInfo = notification;
        _totalNotifications++;
      });
    }
  }



  @override
  void initState() {
    _totalNotifications = 0;
    registerNotification();
    checkForInitialMessage();

    FirebaseMessaging.onMessageOpenedApp.listen((RemoteMessage message) {
      PushNotification notification = PushNotification(
        title: message.notification?.title,
        body: message.notification?.body,

        dataTitle: message.data['title'],
        dataBody: message.data['body'],
      );

      setState(() {
        _notificationInfo = notification;
        _totalNotifications++;
      });
    });

    super.initState();
  }

  @override
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(
        title: Text('Notify'),
        brightness: Brightness.dark,
      ),
      body: Column(
        mainAxisAlignment: MainAxisAlignment.center,
        children: [

        ],
      ),
    );
  }
}

 

انشر على الشّبكات الاجتماعية


رابط هذه المساهمة
شارك على الشبكات الإجتماعية
  • 1

بالنسبة لتشغيل الإشعارات في وضع تشغيل التطبيق أي بحالة Foreground Notifications يوجد طريقة مختلفة لتشغيلها.

لاحظ في الشيفرة لديك، قمت بعمل دالة للتعامل مع Background Notifications وهي:

    FirebaseMessaging.onBackgroundMessage(_firebaseMessagingBackgroundHandler);

أمالتشغيل الإشعارت بالواجهة تاكد من اتباع التوثيق: notifications/#foreground-notifications

حيث يعمل على الدالة:

setForegroundNotificationPresentationOptions

مثال المكتبة: firebase_messaging/example من التوثيق.

مثال منشور على gitHub يمكنك تجربته و التأكد من ذلك: firebase_messaging/example.

في حال وجدت حلاً للمشكلة أرجو مشاركته ليستفاد الآخرون وشكرا لك

تعديل، أرجو مشاركة نوع نظام التشغيل الذي تعمل عليه لاختلاف المشاكل بين أندرويد و IOS مثالا اختلاف طريقة الوصول للإشعارت في أندرويد:

["notification"]["title"]

في IOS:

["aps"]["alert"]["title"].

_____

حل آخر كان بسبب عدم تحديد أيقونة التطبيق في:

android drawable file contains the launcher_icon 

وجود أيقونة  استعراض الإشعار لتعمل في الواجهة الأمامية

1 شخص أعجب بهذا

انشر على الشّبكات الاجتماعية


رابط هذه المساهمة
شارك على الشبكات الإجتماعية
  • 0
بتاريخ 2 ساعات قال Wael Aljamal:

بالنسبة لتشغيل الإشعارات في وضع تشغيل التطبيق أي بحالة Foreground Notifications يوجد طريقة مختلفة لتشغيلها.

لاحظ في الشيفرة لديك، قمت بعمل دالة للتعامل مع Background Notifications وهي:


    FirebaseMessaging.onBackgroundMessage(_firebaseMessagingBackgroundHandler);

أمالتشغيل الإشعارت بالواجهة تاكد من اتباع التوثيق: notifications/#foreground-notifications

حيث يعمل على الدالة:


setForegroundNotificationPresentationOptions

مثال المكتبة: firebase_messaging/example من التوثيق.

مثال منشور على gitHub يمكنك تجربته و التأكد من ذلك: firebase_messaging/example.

في حال وجدت حلاً للمشكلة أرجو مشاركته ليستفاد الآخرون وشكرا لك

تعديل، أرجو مشاركة نوع نظام التشغيل الذي تعمل عليه لاختلاف المشاكل بين أندرويد و IOS مثالا اختلاف طريقة الوصول للإشعارت في أندرويد:


["notification"]["title"]

في IOS:


["aps"]["alert"]["title"].

_____

حل آخر كان بسبب عدم تحديد أيقونة التطبيق في:


android drawable file contains the launcher_icon 

وجود أيقونة  استعراض الإشعار لتعمل في الواجهة الأمامية

 

اهلا بيك اخي الكريم

شاكر لك مساعدتك 

الكود اصبح كالتالي في النهاية وهو يعمل بشكل ممتاز / قمت بتجربه حتى الان على نظام الاندرويد بنسبه الى نظام IOS ساقوم بتجربته لاحقا باذن الله ولو كان فيه تعديل ساقوم بتحديثه هنا وستكمال الموضوع:

 

Future<void> _firebaseMessagingBackgroundHandler(RemoteMessage message) async {
  print("Handling a background message: ${message.messageId}");
}
class ShowNotifications {

  static FirebaseMessaging messaging = FirebaseMessaging.instance;
  static void showNotification(String title, String body) async {
    await _demoNotification(title, body);
  }
  static Future<void> _demoNotification(String title, String body) async {
    var androidPlatformChannelSpecifics = AndroidNotificationDetails(
        'channel_ID', 'channel name', 'channel description',
        importance: Importance.max,
        playSound: true,
        // sound: 'sound',
        // sound: true,
        showProgress: true,
        priority: Priority.high,
        ticker: 'test ticker');

    var iOSChannelSpecifics = IOSNotificationDetails();
    var platformChannelSpecifics = NotificationDetails(
        android: androidPlatformChannelSpecifics, iOS: iOSChannelSpecifics);
    await flutterLocalNotificationsPlugin
        .show(0, title, body, platformChannelSpecifics, payload: 'test');
  }
  static FlutterLocalNotificationsPlugin flutterLocalNotificationsPlugin =
  new FlutterLocalNotificationsPlugin();

  static void initialization(){
    var initializationSettingsAndroid =
    new AndroidInitializationSettings('@mipmap/ic_launcher');
    var initializationSettingsIOS = new IOSInitializationSettings();
    var initializationSettings = new InitializationSettings(
        android: initializationSettingsAndroid, iOS: initializationSettingsIOS);

    flutterLocalNotificationsPlugin = new FlutterLocalNotificationsPlugin();
    flutterLocalNotificationsPlugin.initialize(initializationSettings,
        onSelectNotification: onSelectNotification);
  }

  static Future onSelectNotification(String payload) async {
    showDialog(
      //   context: context,
      builder: (_) {
        return new AlertDialog(
          title: Text("PayLoad"),
          content: Text("Payload : $payload"),
        );
      },
    );
  }
  

  static notification() async {

    await Firebase.initializeApp();messaging = FirebaseMessaging.instance;

    FirebaseMessaging.onBackgroundMessage(_firebaseMessagingBackgroundHandler);

    NotificationSettings settings = await messaging.requestPermission(
      alert: true,
      badge: true,
      provisional: false,
      sound: true,
    );

    if (settings.authorizationStatus == AuthorizationStatus.authorized) {
      print('User granted permission');
    
      FirebaseMessaging.onMessage.listen((RemoteMessage message) {
        
        // Parse the message received
        PushNotification notification = PushNotification(
          title: message.notification?.title,
          body: message.notification?.body,
          dataTitle: message.data['title'],
          dataBody: message.data['body'],

        );

        
        showNotification( notification.title, notification.body);


      });
    } else {
      print('User declined or has not accepted permission');
    }
  }


}

 

2 اشخاص أعجبوا بهذا

انشر على الشّبكات الاجتماعية


رابط هذه المساهمة
شارك على الشبكات الإجتماعية

يجب أن تكون عضوًا لدينا لتتمكّن من التعليق

انشاء حساب جديد

يستغرق التسجيل بضع ثوان فقط


سجّل حسابًا جديدًا

تسجيل الدخول

تملك حسابا مسجّلا بالفعل؟


سجّل دخولك الآن