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:
<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:
<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:
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_NOTIFICATIONSiznini 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:
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:
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 tetiklemedesetExactAndAllowWhileIdleile yeniden zamanlayın veyaWorkManagersınıfınınPeriodicWorkRequestö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 birBOOT_COMPLETEDalı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:
// 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.