اذهب إلى المحتوى

السؤال

نشر

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

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

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

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

الكود كامل:



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: [

        ],
      ),
    );
  }
}

 

Recommended Posts

  • 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 

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

  • 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');
    }
  }


}

 

انضم إلى النقاش

يمكنك أن تنشر الآن وتسجل لاحقًا. إذا كان لديك حساب، فسجل الدخول الآن لتنشر باسم حسابك.

زائر
أجب على هذا السؤال...

×   لقد أضفت محتوى بخط أو تنسيق مختلف.   Restore formatting

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   جرى استعادة المحتوى السابق..   امسح المحرر

×   You cannot paste images directly. Upload or insert images from URL.

  • إعلانات

  • تابعنا على



×
×
  • أضف...