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 yerel bildirim 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; her 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> öğesiyle 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ımlanmadığından, manifest birleştirme işlemi sırasında 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 önce kullanıcıdan bu izni istemeniz gerekir (örneğin 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 zamanının gelip gelmediğine karar verebilirsiniz:

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() tamamlanır tamamlanmaz onReceive, otomatik olarak AppsKitSDKLocalNotificationManager.showNotification(context) metodunu çağırır. Bu metot, kuyruğa ilk eklenen NotificationModel öğesini kuyruktan çıkarıp gösterir. Bu akışta showNotification metodunu sizin çağırmanız gerekmez; checkNotifications() içinde bildirimi kuyruğa eklemeniz yeterlidir.

Bu kuyruktan gösterim akışı, Android 13+ üzerinde 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 açıklandığı 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ğini siz belirlersiniz; 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 tekrar aralığınızı kodda sabit olarak belirleyebilir veya AKS portalının uzaktan yapılandırmasında 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şilir. 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 zamanlamayı garanti etmez. Cihaz boştayken güvenilir biçimde tetiklenmesi gerekiyorsa her tetiklemede setExactAndAllowWhileIdle ile yeniden zamanlayın veya WorkManager sınıfının PeriodicWorkRequest özelliğine geçin (minimum aralık 15 dakikadır). AKS, bu seçeneklerden herhangi birini zorunlu kılmaz; uygulamanıza uygun olanı seçin. Ayrıca, alarmları kendiniz yeniden kaydetmediğiniz sürece (örneğin bir BOOT_COMPLETED alıcısı üzerinden), cihaz yeniden başlatıldığında alarmların korunmadığını unutmayın.

9.4 Doğrudan bildirim 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üklemesi de bildirim kanalı henüz yoksa sizin için oluşturur. §9.2 bölümündeki kuyruklu akışın aksine, bu aşırı yüklemelerin hiçbiri POST_NOTIFICATIONS iznini kendisi kontrol etmez. Android 13+ üzerinde çalışma zamanı iznini sizin istemeniz gerekir; aksi takdirde çağrı, herhangi bir uyarı vermeden bildirimi gösteremeyebilir.