Pushizo Docs
SDK rehberleri

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

  1. google-services.json → android/app/; android/settings.gradle.kts içinde id("com.google.gms.google-services") version "4.4.2" apply false, android/app/build.gradle.kts içinde id("com.google.gms.google-services").
  2. Dashboard → Kanallar → Android Push → servis hesabı JSON'u.
  3. Monorepo içinden derliyorsanız android/settings.gradle.kts sonuna include(":pushizo") ve project(":pushizo").projectDir = file("<repo>/sdk/android/pushizo"); yayınlanmış paket com.pushizo:pushizo-android artefaktını kullanır.

iOS

  1. ios/Podfile: platform :ios, '15.0'; cd ios && pod install.
  2. Xcode → Runner → Signing & Capabilities → Push Notifications, Background Modes → Remote notifications.
  3. Dashboard → Kanallar → iOS Push → .p8. Eklenti APNs token'ını UIApplicationDelegate olaylarından otomatik alır; ek AppDelegate kodu gerekmez.
  4. Zengin medya ve received kaydı 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 | didDismiss

Liste, 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-id

Test

cd sdk/flutter/pushizo_flutter && flutter analyze && flutter test
cd examples/flutter-app && flutter analyze && flutter build apk --debug

Sorun giderme

BelirtiNeden / çözüm
MissingPluginExceptionflutter clean && flutter pub get; uygulamayı tamamen yeniden derleyin (hot restart yetmez).
Android: project ':pushizo' not foundsettings.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 çizilmiyorsetNavigatorKey verilmedi ve kök navigator bulunamadı ya da başka mesaj açık.
requestPermission hep falseAndroid 13+'ta izin reddedildi; iOS'ta Push yeteneği eksik. Diğer belirtiler: Android, iOS.

Bu sayfada