🙂 İNSANLARIN EN HAYIRLISI INSANLARA FAYDALI OLANDIR 🙂

Ramazan HABER / FLUTTER / android ve ios fcm push firebase cloud messaging fast entegre kullanımı 2024

1-) FLUTTER - android ve ios fcm push firebase cloud messaging fast entegre kullanımı 2024

 

önemli not. uygulama kapalıyken tıkladığın zaman. mesaj buraya gelir. sharedpreferences ile kaydet açılınca veriyi oku.
birinci yol

 

FirebaseMessaging.instance.getInitialMessage().then((RemoteMessage? message) {
  
if (message != null) {
    
if (message.data['key1'] == 'pushchat') {
      StatikSinif.
chatTiklandi(true);
    }

    print(
"6->  FirebaseMessaging.getInitialMessage"+message.data.toString() );
    StatikSinif.
fcmDataKaydet(message.data);
  }
});

 

 

ikinci yol

Future<void> backgroundHandler(RemoteMessage message) async {
  
// print(message.data.toString());
  // print(message.notification!.title);
  
StatikSinif.bildirimeTiklandi(true);  // Sharedpreferences veri tabanına kaydet
}

 

 

***************** ANDROİD VE İOS ENTEGRESİ *****************

 

github kaynak : https://github.com/ramazanhaber/flutterandroidiosfcm2024

 

 aşağıdakinide ekle çünkü izin vs diyor

 

<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    
xmlns:tools="http://schemas.android.com/tools">

 

 

<uses-permission android:name="com.google.android.gms.permission.AD_ID" tools:node="remove"/>

 

 

1.ADIM -  android->app->src->main->AndroidManifest.xml'e INTERNET ve CleartextTraffic i ekle . aşağıdaki gibi

 

 

<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    
package="com.ramzey.fcmandroidios"

    <
uses-permission android:name="android.permission.INTERNET"/>

   <
application
       
android:usesCleartextTraffic="true"

 

 

 

2.ADIM - android->app->build.gradle'a (minSdkVersion 21)(targetSdkVersion 33)(compileSdkVersion 33) yap

 

3.ADIM - https://console.firebase.google.com/u/0/ adresinden create a project diyip rastegele isim ver ve bir hesabın oluşuacak

4.ADIM - aşağıdaki gibi android yazan kısımdan ilerle

 

5.ADIM -

6.ADIM - android->app->build.gradleye (apply plugin'com.google.gms.google-services') ve en aşağıya bunu ekle

 

implementation platform('com.google.firebase:firebase-bom:31.2.3')
implementation 
'com.google.firebase:firebase-analytics-ktx'

 

7.ADIM - android->build.gradleye (classpath 'com.google.gms:google-services:4.3.15') bunu ekle

8.ADIM - uygulamayı kapat aç

9.ADIM - firebase->proje settings->cloud messaging-> Enable yap -> orası okey dicek ve server key vericek aşağıdaki gibi

 

 

10.ADIM -Aşağıdakileri terminale yaz ve çalıştır

 

flutter pub add firebase_core  (^2.9.0)

flutter pub add firebase_messaging  (^14.4.0)

flutter pub add flutter_local_notifications  (^13.0.0 )

 

 

11.ADIM - Info.plist e aşağıdakini ekle

 <key>FirebaseAppDelegateProxyEnabled</key>

 <false/>

 

12.ADIM xcode ekle

 

13.ADIM  ilk olarak GoogleService-Info.plist dosyasını XCODE idesinde Runner klasörüne sağ tıklayıp "Add files to Runner" diyelim

                    

 

  

 

 

 

NOT BURASI ÇOK ÖNEMLİ ADD FİLES TO RUNNER DEDİKTEN SONRA GoogleService-Info.plist DOSYASINI SEÇMELİSİN

 

14.ADIM ios Devoloper account daki keyid ve teamid -> FCM deki ile aynı olacak -> aşağıdaki iki resimden görebilirsiniz

 

https://developer.apple.com/account/resources/certificates/list

 

 

 

 

 

15.ADIM - main.dart


import
'dart:io';

import 'package:flutter/material.dart';
import 'package:firebase_core/firebase_core.dart';
import 'package:firebase_messaging/firebase_messaging.dart';
import 'package:flutter/services.dart';
import 'package:flutter_local_notifications/flutter_local_notifications.dart';

/*
KULLANILAN MAİL : 07flutteregitim@gmail.com
paket ismi : com.ramzey.flutterandroidiosfcm2024
 */
final FirebaseMessaging _firebaseMessaging = FirebaseMessaging.instance;

@pragma('vm:entry-point')
Future<void> _firebaseMessagingBackgroundHandler(RemoteMessage message) async {
  print(
'onBackgroundMessage received: $message');
}

Future<void> main() async {
  
WidgetsFlutterBinding.ensureInitialized();
  
await Firebase.initializeApp();

_firebaseMessaging.requestPermission();

  runApp(MyApp());
}

class MyApp extends StatefulWidget {
  
MyApp({Key? key}) : super(key: key);

  
@override
  
State<MyApp> createState() => _MyAppState();
}

class _MyAppState extends State<MyApp> {
  
final FlutterLocalNotificationsPlugin flutterLocalNotificationsPlugin =
      
FlutterLocalNotificationsPlugin();

  
notificationDetails() {
    
return NotificationDetails(
        android:
AndroidNotificationDetails('kanalid', 'kanalisim',
            importance:
Importance.max),
        iOS:
DarwinNotificationDetails());
  }

  
Future showNotification(
      {
int id = 0, String? title, String? body, String? payLoad}) async {
    
return flutterLocalNotificationsPlugin.show(
        id, title, body,
await notificationDetails());
  }

  
String? gelenToken = "";

  
Future<void> fcmBaslat() async {
    
FirebaseMessaging.onBackgroundMessage(_firebaseMessagingBackgroundHandler);

    
// iOS için izin isteme
    
if (Platform.isIOS) {
      
await _firebaseMessaging.requestPermission(
        alert:
true,
        announcement:
false,
        badge:
true,
        carPlay:
false,
        criticalAlert:
false,
        provisional:
false,
        sound:
true,
      );
    }

    
AndroidInitializationSettings initializationSettingsAndroid =
        
AndroidInitializationSettings("@mipmap/ic_launcher");

    
var initializationSettingsIOS = DarwinInitializationSettings(
        requestAlertPermission:
true,
        requestBadgePermission:
true,
        requestSoundPermission:
true,
        onDidReceiveLocalNotification:
            (
int id, String? title, String? body, String? payload) async {});

    
var initializationSettings = InitializationSettings(
        android:
initializationSettingsAndroid, iOS: initializationSettingsIOS);
    
await flutterLocalNotificationsPlugin.initialize(initializationSettings,
        onDidReceiveNotificationResponse:
            (
NotificationResponse notificationResponse) async {});

    
await FirebaseMessaging.instance.setForegroundNotificationPresentationOptions(
      alert:
true,
      badge:
true,
      sound:
true,
    );

    
// Token almak için
    
gelenToken = await _firebaseMessaging.getToken();
    print(
'Token: $gelenToken');
   //
await Clipboard.setData(ClipboardData(text: gelenToken));

    
// mesaj gelince burası çalışır
    
FirebaseMessaging.onMessage.listen((RemoteMessage message) {
      print(
'onMessage received: $message');
      
if (Platform.isAndroid) {
        
final title = message.notification!.title;
        
final body = message.notification!.body;
        showNotification(title:
title, body: body);
      }

    });

    
// uygulama kapalı iken veya arkaplanda iken Bildirime tıklanınca çalışır
    
FirebaseMessaging.onMessageOpenedApp.listen((RemoteMessage message) {
      print(
'onMessageOpenedApp received: $message');
    });

    
FirebaseMessaging.instance
        
.subscribeToTopic("all")
        .then((value) => print(
"topic all olarak eklendi"));

    setState(() {

    });
  }

  
@override
  
void initState() {
    
super.initState();
    fcmBaslat();
  }

  
@override
  
Widget build(BuildContext context) {
    
return MaterialApp(
      title:
'Flutter Demo',
      debugShowCheckedModeBanner:
false,
      theme:
ThemeData(
        primarySwatch:
Colors.blue,
      ),
      home:
gelenToken == ""
          
? Scaffold(
              body:
Center(
              child:
CircularProgressIndicator(),
            ))
          :
MyHomePage(
              token:
gelenToken!,
            ),
    );
  }
}

class MyHomePage extends StatefulWidget {
  
String token = "";

  
MyHomePage({required this.token});

  
@override
  
State<MyHomePage> createState() => _MyHomePageState();
}

class _MyHomePageState extends State<MyHomePage> {
  
late TextEditingController txtController;

  
@override
  
void initState() {
    
// TODO: implement initState
    
super.initState();
    
txtController = new TextEditingController();
    
txtController.text = widget.token;
    print(
widget.token + "--");
    setState(() {});
  }

  
@override
  
Widget build(BuildContext context) {
    
return Scaffold(
        appBar:
AppBar(
          title:
Text("FCM 2024"),
        ),
        body:
Container(
            child:
TextFormField(
          controller:
txtController,  keyboardType: TextInputType.multiline,
              maxLines:
null,

        )));
  }
}

 

 

 2024 Kasım 12 Salı
 966