Apps Kit SDK logoApps Kit SDK
Dokümantasyon · AppsKitSDK (AKS) — Android Entegrasyon Kılavuzu

9. Yerel bildirimler (AppsKitSDKLocalNotificationManager)

AKS, kendi yerel bildirimlerinizi göstermek için kullanabileceğiniz küçük bir araç seti sunar: bir kuyruk, bir bildirim oluşturucu ve soyut bir BroadcastReceiver. AKS, alıcıyı kendi manifest dosyasına kaydetmez ve sizin için herhangi bir zamanlama yapmaz; bunların ikisi de sizin sorumluluğunuzdadır.

9.1 Manifest

AppsKitSDKLocalNotificationBroadCastReceiver sınıfından bir alt sınıf türetin (§9.2 bölümünde gösterilmiştir) ve bu alt sınıfı, §2 bölümündeki aynı <application> öğesine birleştirilecek şekilde bir <receiver> olarak tanımlayın:

xml
<application
    android:name=".YourApplication">

    <receiver
        android:name=".YourNotificationReceiver"
        android:exported="false" />

</application>

Android 13+ (API 33) hedefliyorsanız çalışma zamanı bildirim iznini de ekleyin. AKS'nin kendi manifest dosyasında bu izin tanımlı değildir, dolayısıyla manifest birleştirme işlemiyle otomatik olarak eklenmez:

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

POST_NOTIFICATIONS bir çalışma zamanı iznidir; bu nedenle bildirimlerin gerçekten gösterilebilmesi için kullanıcıdan bu izni istemeniz gerekir (ör. ActivityResultContracts.RequestPermission() aracılığıyla).

9.2 Bildirimi kuyruğa ekleme

AppsKitSDKLocalNotificationBroadCastReceiver sınıfından bir alt sınıf türetin ve checkNotifications() metodunu uygulayın. Alıcı her tetiklendiğinde çağrılan bu metotta, bir bildirimin gösterilme zamanının gelip gelmediğine karar verirsiniz:

kotlin
class YourNotificationReceiver : AppsKitSDKLocalNotificationBroadCastReceiver() {

    override fun checkNotifications() {
        addNotificationInQueue(
            NotificationModel(
                id = "daily_reminder",                      // dedup key — a second add with the same id is ignored
                title = "Come back!",
                description = "You have unfinished items waiting.",
                icon = R.drawable.ic_notification,
                notificationId = 1001,                       // the actual Android notification ID passed to notify()
                targetScreen = "com.yourapp.MainActivity"    // fully-qualified Activity class opened on tap
            )
        )
    }
}

checkNotifications() döner dönmez onReceive, otomatik olarak AppsKitSDKLocalNotificationManager.showNotification(context) metodunu çağırır. Bu metot, kuyruğa ilk eklenen NotificationModel öğesini kuyruktan çıkarır ve bildirimi gösterir. Bu akışta showNotification metodunu kendiniz çağırmazsınız; checkNotifications() içinde kuyruğa eklemeniz yeterlidir.

Bu kuyruktan gösterim akışı, Android 13+ sürümlerinde POST_NOTIFICATIONS iznini kendisi kontrol eder. İzin verilmemişse bir günlük satırı yazarak bildirimi sessizce atlar. Bu nedenle önce §9.1 bölümünde belirtildiği gibi izni istediğinizden emin olun.

9.3 Zamanlama

AKS, bu alıcıyı herhangi bir zamanlamaya göre kaydetmez veya tetiklemez. onReceive metodunun ne zaman tetikleneceğine siz karar verirsiniz; bunun için genellikle AlarmManager kullanılır:

kotlin
val intent = Intent(context, YourNotificationReceiver::class.java)
val pendingIntent = PendingIntent.getBroadcast(
    context, 0, intent, PendingIntent.FLAG_IMMUTABLE or PendingIntent.FLAG_UPDATE_CURRENT
)

val alarmManager = context.getSystemService(Context.ALARM_SERVICE) as AlarmManager
alarmManager.setRepeating(
    AlarmManager.RTC_WAKEUP,
    System.currentTimeMillis() + intervalMs,
    intervalMs,
    pendingIntent
)

intervalMs için kendi aralığınızı kodda sabit olarak belirleyebilir veya AKS portalındaki uzak yapılandırmada ayarlanan değeri kullanabilirsiniz (HOURS_TO_MAKE_NOTIFICATION; ayarlanmamışsa varsayılan değer 2 saattir). Bu değere, temel alıcı sınıfındaki getTimeIntervalInMilliSeconds() metodu üzerinden erişilebilir. Ancak metot protected olduğundan, yukarıdaki çağrı noktasından değil, alt sınıfınızın içinden çağırın:

kotlin
class YourNotificationReceiver : AppsKitSDKLocalNotificationBroadCastReceiver() {
    fun intervalMillis(): Long = getTimeIntervalInMilliSeconds()
    override fun checkNotifications() { /* ... */ }
}

AlarmManager.setRepeating, Doze/pil optimizasyonları altında kesin zamanlamayla çalışmaz. Cihaz boştayken güvenilir biçimde tetiklenmesi gerekiyorsa bunun yerine her tetiklenmede setExactAndAllowWhileIdle ile yeniden zamanlayın veya WorkManager içindeki PeriodicWorkRequest kullanımına geçin (minimum aralık 15 dakikadır). AKS bu seçeneklerden herhangi birini zorunlu tutmaz; uygulamanıza uygun olanı seçin. Ayrıca, alarmları kendiniz yeniden kaydetmediğiniz sürece (ör. bir BOOT_COMPLETED alıcısından) cihaz yeniden başlatıldığında alarmların korunmadığını unutmayın.

9.4 Bildirimi doğrudan gösterme (kuyruk olmadan)

Yukarıdaki kuyruk/alıcı akışını kullanmadan bir bildirimi hemen göstermek için:

kotlin
// Tapping opens the Activity at classPath
AppsKitSDKLocalNotificationManager.showNotification(
    context = this,
    id = 2001,
    classPath = "com.yourapp.MainActivity",
    channelId = "general",
    title = "New message",
    message = "You've got a new message waiting.",
    notificationIcon = R.drawable.ic_notification
)

// Or pass a fully-built Intent instead of a class path
AppsKitSDKLocalNotificationManager.showNotification(
    context = this,
    id = 2002,
    intent = Intent(this, MainActivity::class.java).putExtra("from", "notification"),
    channelId = "general",
    title = "New message",
    message = "Tap to view details.",
    notificationIcon = R.drawable.ic_notification
)

Metodun her iki aşırı yüklenmiş sürümü de bildirim kanalı henüz mevcut değilse kanalı sizin için oluşturur. §9.2 bölümündeki kuyruk akışının aksine, bu sürümlerin hiçbiri POST_NOTIFICATIONS iznini kendisi kontrol etmez. Android 13+ sürümlerinde çalışma zamanı iznini kendiniz isteyin; aksi takdirde çağrı sessizce başarısız olabilir ve bildirim gösterilmeyebilir.