• 02-10-2024, 14:45:50
    #1
    Flutter dilinde yazdığım projemde bildirime tıklayınca benim belirlediğim sayfayı açmasını istiyorum ama uygulama baştan başlıyor lütfen yardım eder misiniz?

    functions kodum:
    exports.herkeseBorcBilgisiGonder = onRequest(async (req, res) => {
    try {
    const { tokens, title, body } = req.body;
    if (!tokens || tokens.length === 0) {
    return res.status(400).send('Token listesi boş.');
    }
    // Bildirim mesajını oluşturma
    const message = {
    notification: {
    title: title,
    body: body,
    },
    data: {
    click_action: 'FLUTTER_NOTIFICATION_CLICK', // Bildirim tıklama olayı
    route: '/odeme', // Ödeme sayfası rotası
    },
    };
    // Tüm token'lar için mesajları hazırlama
    const messages = tokens.map(token => ({
    ...message,
    token: token,
    }));
    // Tüm mesajları gönderme
    const response = await fcm.sendAll(messages);
    return res.status(200).send(`Toplam ${response.successCount} bildirim gönderildi, ${response.failureCount} hata oluştu.`);
    } catch (error) {
    console.error("Bildirimler gönderilemedi:", error);
    return res.status(500).send(`Bildirimler gönderilemedi: ${error}`);
    }
    });



    main.dart sayfam
    final navigatorKey = GlobalKey<NavigatorState>();
    Future _firebaseBacckgroundMessage(RemoteMessage message) async {
    if (message.notification != null) {
    print("Bildirim arka planda gönderildi");
    }
    }
    void main() async {
    WidgetsFlutterBinding.ensureInitialized();
    await Firebase.initializeApp(
    options: DefaultFirebaseOptions.currentPlatform,
    );
    await PushNotifications.init();
    FirebaseMessaging.onBackgroundMessage(_firebaseBac ckgroundMessage);
    await PushNotifications.localNotiInit();
    runApp( const MyApp());
    }

    class MyApp extends StatefulWidget {
    const MyApp({super.key});
    @override
    _MyAppState createState() => _MyAppState();
    }
    class _MyAppState extends State<MyApp> {
    @override
    void initState() {
    super.initState();
    FirebaseMessaging.onMessageOpenedApp.listen((Remot eMessage message) {
    bool isLoggedIn = checkUserLoggedIn();
    print("Bildirim tıklandı: ${message.data}");
    if (message.data.containsKey('route')) {
    String route = message.data['route'];
    if (!isLoggedIn) {
    Navigator.push(
    navigatorKey.currentContext!,
    MaterialPageRoute(builder: (context) => const LoginPage()),
    );
    } else {
    if (route == 'odeme') {
    Navigator.push(
    navigatorKey.currentContext!,
    MaterialPageRoute(builder: (context) => const Kampanyalar()),
    );
    } else {

    }
    }
    }
    });
    }
    bool checkUserLoggedIn() {

    return FirebaseAuth.instance.currentUser != null;
    }
    @override
    Widget build(BuildContext context) {
    return MaterialApp(
    home: const LoginPage(),
    navigatorKey: navigatorKey,
    debugShowCheckedModeBanner: false,

    );
    }
    }
  • 02-10-2024, 15:03:15
    #2
    parametre var notificationun içinden oraya bir değer vererek hangi sayfaya gitmek istiyorsan söyleyebilirsin
  • 02-10-2024, 15:12:02
    #3
    webirinci adlı üyeden alıntı: mesajı görüntüle
    parametre var notificationun içinden oraya bir değer vererek hangi sayfaya gitmek istiyorsan söyleyebilirsin

    functions/index.js dosyasındaki bu bölümden mi bahsediyorsunuz.


    const message = {
    notification: {
    title: title,
    body: body,
    },
    data: {
    click_action: 'FLUTTER_NOTIFICATION_CLICK', // Bildirim tıklama olayı
    route: '/odeme', // Ödeme sayfası rotası
    },
    };
  • 02-10-2024, 15:22:19
    #4
    click_action: 'FLUTTER_NOTIFICATION_CLICK', bu kısımda
  • 02-10-2024, 15:36:47
    #5
    webirinci adlı üyeden alıntı: mesajı görüntüle
    click_action: 'FLUTTER_NOTIFICATION_CLICK', bu kısımda
    Örnek olarak yazabilir misiniz?
  • 02-10-2024, 23:40:57
    #6
    data: {
    click_action: 'FLUTTER_NOTIFICATION_CLICK', // Bildirim tıklama olayı
    route: '/odeme', // Ödeme sayfası rotası
    },

    route kısmını odeme olarak gönderince, statik olarak Kampanyalar sayfası açılması sağlanmış.
    İsteğiniz için kodlara güncelleme yapmak gerekir.