firebase_fcm_token
Firebase FCM token yönetimi ve server entegrasyonu için kapsamlı Flutter paketi. Bu paket FCM token'larını otomatik olarak yönetir, server'a gönderir ve uygulama durumunu kontrol ederek gerekli durumlarda beyaz ekran gösterir.
Özellikler
- ✅ Otomatik FCM Token Yönetimi: Token'ları otomatik olarak alır ve server'a gönderir
- ✅ Uygulama Durum Kontrolü: Server'dan uygulama durumunu kontrol eder
- ✅ Beyaz Ekran Koruması: Uygulama kapalı ise beyaz ekran gösterir
- ✅ Cross-Platform: Android, iOS ve Web desteği
- ✅ MySQL Entegrasyonu: PHP server dosyaları ile MySQL veritabanı desteği
- ✅ Token Yenileme: Otomatik token yenileme ve güncelleme
- ✅ Background/Foreground: Arka plan ve ön plan mesaj yönetimi
- ✅ Comprehensive API: Tam özellikli PHP REST API
Kurulum
pubspec.yaml dosyanıza ekleyin:
dependencies:
firebase_fcm_token: ^1.0.0
firebase_core: ^2.24.2
firebase_messaging: ^14.7.10
Paketleri yükleyin:
flutter pub get
Firebase Kurulumu
- Firebase Console'da projenizi oluşturun
- FCM'i etkinleştirin
- Platform-specific konfigürasyonu yapın
Android Konfigürasyonu
android/app/google-services.json dosyasını ekleyin ve android/app/build.gradle dosyasında:
plugins {
id 'com.google.gms.google-services'
}
dependencies {
implementation 'com.google.firebase:firebase-messaging:23.4.0'
}
iOS Konfigürasyonu
ios/Runner/GoogleService-Info.plist dosyasını ekleyin ve gerekli capability'leri etkinleştirin.
Kullanım
Temel Kullanım
import 'package:firebase_fcm_token/firebase_fcm_token.dart';
void main() async {
WidgetsFlutterBinding.ensureInitialized();
// Firebase FCM Token paketini başlat (sadece uygulama adı gerekli!)
await FirebaseFcmToken().initialize(
appName: 'your_app_name',
);
runApp(MyApp());
}
class MyApp extends StatelessWidget {
@override
Widget build(BuildContext context) {
return MaterialApp(
home: FirebaseFcmToken().buildAppStatusWidget(
child: YourHomeWidget(),
),
);
}
}
İleri Seviye Kullanım
class MyHomePage extends StatefulWidget {
@override
_MyHomePageState createState() => _MyHomePageState();
}
class _MyHomePageState extends State<MyHomePage> {
final FirebaseFcmToken _fcmToken = FirebaseFcmToken();
@override
void initState() {
super.initState();
// Notification permission iste
_fcmToken.requestPermission();
// Foreground mesajları dinle
_fcmToken.onMessage.listen((message) {
print('Yeni mesaj: ${message.notification?.title}');
});
// Background mesaj handler
_fcmToken.setBackgroundMessageHandler((message) async {
print('Background mesaj: ${message.messageId}');
});
}
@override
Widget build(BuildContext context) {
return _fcmToken.buildAppStatusWidget(
child: Scaffold(
appBar: AppBar(title: Text('My App')),
body: Column(
children: [
ElevatedButton(
onPressed: () async {
// Manual olarak uygulama durumunu kontrol et
await _fcmToken.refreshAppStatus();
},
child: Text('Durumu Kontrol Et'),
),
ElevatedButton(
onPressed: () async {
// FCM token'ı al
final token = await _fcmToken.getToken();
print('FCM Token: $token');
},
child: Text('Token Al'),
),
],
),
),
);
}
}
Widget Örnekleri
// Basit uygulama durum widget'ı
AppStatusWidget(
isAppEnabled: true,
child: MyContent(),
)
// Özelleştirilebilir durum widget'ı
AppStatusWidget(
isAppEnabled: false,
disabledColor: Colors.grey[100],
disabledMessage: 'Uygulama geçici olarak kullanılamıyor',
child: MyContent(),
)
// Loading ile kombineli widget
AppStatusWrapper(
isAppEnabled: appEnabled,
isLoading: isLoading,
loadingMessage: 'Yükleniyor, lütfen bekleyin...',
disabledMessage: 'Uygulama kapalı',
child: MyContent(),
)
Server Kurulumu
Pakete dahil PHP dosyalarını server'ınıza yükleyin:
1. Veritabanı Kurulumu
-- database.sql dosyasını çalıştırın
mysql -u username -p database_name < server/database.sql
2. Konfigürasyon
server/config.php dosyasını düzenleyin:
define('DB_HOST', 'localhost');
define('DB_NAME', 'firebase_fcm_db');
define('DB_USER', 'your_username');
define('DB_PASS', 'your_password');
3. API Endpoints
Pakette aşağıdaki API endpoint'leri mevcuttur:
POST /api/fcm_token.php- Token kaydetmePOST /api/app_status.php- Uygulama durumu kontrolüGET /api/get_tokens.php- Token listesiPOST /api/delete_token.php- Token silmePOST /api/update_app_status.php- Uygulama durumu güncelleme
4. API Kullanım Örnekleri
# Token kaydetme
curl -X POST https://yourserver.com/api/fcm_token.php \
-H "Content-Type: application/json" \
-d '{
"token": "fcm_token_here",
"app_name": "my_app",
"device_id": "device_123",
"platform": "android"
}'
# Uygulama durumu kontrolü
curl -X POST https://yourserver.com/api/app_status.php \
-H "Content-Type: application/json" \
-d '{
"app_name": "my_app"
}'
# Uygulama durumunu güncelleme
curl -X POST https://yourserver.com/api/update_app_status.php \
-H "Content-Type: application/json" \
-d '{
"app_name": "my_app",
"is_enabled": false,
"disabled_reason": "Maintenance"
}'
Server URL Konfigürasyonu
Paket varsayılan olarak dahili server URL'lerini kullanır. Eğer kendi server'ınızı kullanmak istiyorsanız:
// Custom server URL ile
await FirebaseFcmToken().initialize(
appName: 'your_app_name',
serverUrl: 'https://your-custom-server.com',
);
// Sadece uygulama adı (önerilen)
await FirebaseFcmToken().initialize(
appName: 'your_app_name',
);
Environment Yönetimi
import 'package:firebase_fcm_token/firebase_fcm_token.dart';
// Development için
if (kDebugMode) {
await FirebaseFcmToken().initialize(
appName: 'your_app_dev',
serverUrl: FCMConfig.environments['development'],
);
} else {
// Production için
await FirebaseFcmToken().initialize(
appName: 'your_app_prod',
);
}
Veritabanı Yapısı
fcm_tokens Tablosu
id: Primary keytoken: FCM tokenapp_name: Uygulama adıdevice_id: Cihaz ID'siplatform: Platform (android/ios/web)created_at: Oluşturma tarihiupdated_at: Güncelleme tarihilast_used: Son kullanım tarihiis_active: Aktif durumu
app_status Tablosu
id: Primary keyapp_name: Uygulama adıis_enabled: Aktif durumudisabled_reason: Kapatılma nedenidisabled_at: Kapatılma tarihicreated_at: Oluşturma tarihiupdated_at: Güncelleme tarihi
api_logs Tablosu
id: Primary keyendpoint: API endpointmethod: HTTP methodrequest_data: İstek verisiresponse_data: Yanıt verisiip_address: IP adresistatus_code: HTTP durum koducreated_at: Oluşturma tarihi
API Referansı
FirebaseFcmToken Sınıfı
Metodlar
initialize({required String appName, String? serverUrl, FirebaseOptions? firebaseOptions}): Paketi başlatırgetToken(): FCM token'ını döndürürrequestPermission(): Notification permission isterrefreshAppStatus(): Uygulama durumunu yenilerbuildAppStatusWidget({required Widget child}): Uygulama durum widget'ı oluşturur
Properties
isAppEnabled: Uygulamanın aktif olup olmadığını döndürüronMessage: Foreground mesajlar için streamonTokenRefresh: Token yenileme için stream
FCMTokenModel Sınıfı
FCM token verilerini temsil eden model sınıfı:
FCMTokenModel(
token: 'fcm_token',
appName: 'app_name',
deviceId: 'device_id',
timestamp: DateTime.now(),
)
AppStatusWidget Sınıfı
Uygulama durumuna göre içerik gösteren widget:
AppStatusWidget(
isAppEnabled: true,
disabledColor: Colors.white,
disabledMessage: 'Özel mesaj',
child: YourContent(),
)
Özelleştirme
Beyaz Ekran Özelleştirme
AppStatusWidget(
isAppEnabled: false,
disabledColor: Colors.grey[50],
disabledMessage: 'Bakım çalışması devam ediyor...',
disabledTextStyle: TextStyle(
color: Colors.grey[800],
fontSize: 18,
),
child: MyContent(),
)
Loading Durumu
AppStatusLoader(
isLoading: true,
loaderColor: Colors.blue,
loadingMessage: 'Veriler yükleniyor...',
child: MyContent(),
)
Hata Ayıklama
Yaygın Sorunlar
- Token alınamıyor: Firebase konfigürasyonunu kontrol edin
- Server bağlantısı yok: URL ve network izinlerini kontrol edin
- Veritabanı hatası: MySQL bağlantı bilgilerini kontrol edin
- Notification çalışmıyor: Platform-specific konfigürasyonu kontrol edin
Log'ları Kontrol Etme
// Debug modunda detaylı log'lar gösterilir
if (kDebugMode) {
print('FCM Token: $token');
print('App Status: ${fcm.isAppEnabled}');
}
Server Log'ları
PHP server'da server/logs/app.log dosyasını kontrol edin:
tail -f server/logs/app.log
Güvenlik
- API endpoint'lerinde rate limiting uygulayın
- HTTPS kullanın
- Veritabanı bağlantılarını güvenli hale getirin
- Input validation yapın (pakette mevcut)
Katkıda Bulunma
- Fork yapın
- Feature branch oluşturun (
git checkout -b feature/AmazingFeature) - Değişikliklerinizi commit edin (
git commit -m 'Add some AmazingFeature') - Branch'inizi push edin (
git push origin feature/AmazingFeature) - Pull Request açın
Lisans
Bu proje MIT lisansı altında lisanslanmıştır. Detaylar için LICENSE dosyasına bakın.
Changelog
1.0.0
- İlk stabil sürüm
- Firebase FCM entegrasyonu
- PHP server API'ları
- MySQL veritabanı desteği
- Otomatik uygulama durum kontrolü
- Kapsamlı dokümantasyon ve örnekler
Destek
Sorunlar için GitHub Issues kullanın: https://github.com/your-username/firebase_fcm_token/issues
Katkıda Bulunanlar
Sizin adınız- İlk geliştirici
Teşekkürler
- Firebase ekibine FCM için
- Flutter ekibine platform desteği için
- PHP ve MySQL topluluklarına