Flutter SDK
pushizo_flutter — Android ve iOS yerel SDK'larını MethodChannel/EventChannel ile saran eklenti; push, in-app (Flutter widget'larıyla çizim), bildirim kutusu, tercihler.
pushizo_flutter, yerel Android ve iOS SDK'larını sarar: HTTP, kuyruk, oturum, teslimat geri bildirimi ve tetik değerlendirme yerel tarafta çalışır; in-app mesajlar Flutter widget'larıyla çizilir. Web desteği v2 kapsamındadır. Örnek: examples/flutter-app.
Kurulum
# pubspec.yaml
dependencies:
pushizo_flutter: ^0.1.0
# Monorepo içinden: pushizo_flutter: { path: <repo>/sdk/flutter/pushizo_flutter }Android
google-services.json→android/app/;android/settings.gradle.ktsiçindeid("com.google.gms.google-services") version "4.4.2" apply false,android/app/build.gradle.ktsiçindeid("com.google.gms.google-services").- Dashboard → Kanallar → Android Push → servis hesabı JSON'u.
- Monorepo içinden derliyorsanız
android/settings.gradle.ktssonunainclude(":pushizo")veproject(":pushizo").projectDir = file("<repo>/sdk/android/pushizo"); yayınlanmış paketcom.pushizo:pushizo-androidartefaktını kullanır.
iOS
ios/Podfile:platform :ios, '15.0';cd ios && pod install.- Xcode → Runner → Signing & Capabilities → Push Notifications, Background Modes → Remote notifications.
- Dashboard → Kanallar → iOS Push →
.p8. Eklenti APNs token'ınıUIApplicationDelegateolaylarından otomatik alır; ek AppDelegate kodu gerekmez. - Zengin medya ve
receivedkaydı için Notification Service Extension: iOS SDK.
Kullanım
import 'package:pushizo_flutter/pushizo_flutter.dart';
Future<void> main() async {
WidgetsFlutterBinding.ensureInitialized();
await Pushizo.initialize('app_…', apiUrl: 'https://api.example.com', requiresPrivacyConsent: false, logLevel: PushizoLogLevel.warn);
runApp(const MyApp());
}
await Pushizo.setConsentGiven(true);
final granted = await Pushizo.Notifications.requestPermission();
await Pushizo.login('user_42', identityHash: null);
await Pushizo.logout();
await Pushizo.User.addTags({'plan': 'pro'}); await Pushizo.User.removeTag('plan');
final tags = await Pushizo.User.getTags(); await Pushizo.User.setLanguage('tr');
final userId = await Pushizo.User.id; final ext = await Pushizo.User.externalId;
final state = await Pushizo.User.pushSubscription.state; // id, token, optedIn, permission
await Pushizo.User.pushSubscription.optIn(); await Pushizo.User.pushSubscription.optOut();
Pushizo.User.pushSubscription.changes.listen((s) => …);
Pushizo.Notifications.clickStream.listen((e) => openRoute(e.url)); // e.notification, e.actionId
Pushizo.Notifications.foregroundStream.listen((n) => …); // ön planda gelen bildirim
final current = await Pushizo.Notifications.permission;
Pushizo.Notifications.permissionStream.listen((granted) => …);
Pushizo.Notifications.addPermissionObserver(onPermission); // removePermissionObserver(onPermission)
await Pushizo.Session.sendEvent('purchase', properties: {'sku': 'A1'}, value: 49.9);
await Pushizo.Debug.setLogLevel(PushizoLogLevel.debug);Uygulama kapalıyken gelen tıklama ilk clickStream dinleyicisine teslim edilir (yerel SDK bekletir). İzin olayları izin isteği sonuçlandığında ve uygulama ön plana döndüğünde (ayarlardan değişmişse) gelir; ilk durum gönderilmez.
E-posta ve SMS
await Pushizo.User.addEmail('Ali@Example.com'); // geçersizse PlatformException(INVALID_ARGUMENT)
await Pushizo.User.removeEmail('ali@example.com');
await Pushizo.User.addSms('+90 (532) 123-45-67'); // → +905321234567
await Pushizo.User.removeSms('+905321234567');Kullanıcı tercihleri
final prefs = await Pushizo.User.getPreferences(); // prefs.preferences, prefs.categories
for (final c in prefs.categories) print('${c.key}: ${c.localizedName('tr')} (varsayılan ${c.defaultOptedIn})');
final updated = await Pushizo.User.setPreferences([
const PushizoPreferenceInput(category: 'promos', optedIn: false),
const PushizoPreferenceInput(category: 'orders', channel: 'android_push', optedIn: true),
]);Abonelik henüz yoksa PlatformException(NOT_READY), geçersiz girdi INVALID_ARGUMENT. Android bildirim kanalları (android_channels) yerel SDK tarafından oluşturulur; Dart tarafında ek kod gerekmez.
In-app mesajlar
final navigatorKey = GlobalKey<NavigatorState>();
Pushizo.InAppMessages.setNavigatorKey(navigatorKey); // MaterialApp(navigatorKey: navigatorKey); verilmezse kök navigator aranır
await Pushizo.InAppMessages.addTrigger('level', 'gold'); // addTriggers, removeTrigger(s), clearTriggers, getTriggers
await Pushizo.InAppMessages.setScreen('cart');
await Pushizo.Session.sendEvent('cart_viewed');
await Pushizo.InAppMessages.setPaused(true); // await Pushizo.InAppMessages.paused
Pushizo.InAppMessages.clickStream.listen((e) => …); // e.messageId, e.actionId, e.url
Pushizo.InAppMessages.lifecycleStream.listen((e) => …); // e.type: willDisplay | didDisplay | willDismiss | didDismissListe, tetik değerlendirme, sıklık, olay kaydı ve aksiyonlar yerel SDK'dadır; seçilen mesaj Flutter widget'larıyla çizilir: modal/fullscreen → şeffaf rota (geri tuşu ve dışarı dokunma kapatılabilir mesajı kapatır), banner_top/banner_bottom → overlay (auto_dismiss_seconds). Renkler Theme.of(context).brightness'a göre varsayılanlanır.
Bildirim kutusu
final page = await Pushizo.Inbox.list(limit: 20, cursor: null); // items, unreadCount, nextCursor, hasMore
final item = await Pushizo.Inbox.markRead(page.items.first.id);
final remaining = await Pushizo.Inbox.markAllRead();
await Pushizo.Inbox.archive(item.id);
final unread = await Pushizo.Inbox.unreadCount();Hatalar PlatformException olarak döner (NOT_READY: abonelik/kullanıcı henüz yok; API hata kodu, ör. HS_FORBIDDEN). Zamanlar UTC DateTime.
Bildirim tepsisi
await Pushizo.Notifications.clearAll(); // Android: Pushizo bildirimleri; iOS: tümü + rozet
await Pushizo.Notifications.removeNotification(n.androidNotificationId!); // yalnızca Android
await Pushizo.Notifications.removeGroupedNotifications('orders'); // Android grup anahtarı / iOS thread-idTest
cd sdk/flutter/pushizo_flutter && flutter analyze && flutter test
cd examples/flutter-app && flutter analyze && flutter build apk --debugSorun giderme
| Belirti | Neden / çözüm |
|---|---|
MissingPluginException | flutter clean && flutter pub get; uygulamayı tamamen yeniden derleyin (hot restart yetmez). |
Android: project ':pushizo' not found | settings.gradle.kts içine modülü ekleyin veya SDK'yı publishToMavenLocal ile yayınlayın. |
iOS: Pushizo pod bulunamadı | Podfile'da pod 'Pushizo' satırı ve pod install. |
| In-app mesaj çizilmiyor | setNavigatorKey verilmedi ve kök navigator bulunamadı ya da başka mesaj açık. |
requestPermission hep false | Android 13+'ta izin reddedildi; iOS'ta Push yeteneği eksik. Diğer belirtiler: Android, iOS. |