Bildirimler
Yerel Bildirimler ve Hatırlatıcılar
Anlık bildirimler gösterin veya uygulama kapalıyken bile tetiklenen hatırlatıcılar zamanlayın - cihaz üzerinde, sunucu yok
1Bunun eklediği şeyler#
Uygulamanız kendi kodundan Android bildirimleri gösterebilir - iki seviyede:
- Anlık (Seviye 1): uygulama açıkken hemen görünen bir bildirim. 'İndirme tamamlandı', 'zamanlayıcı bitti' gibi durumlar için uygundur.
- Zamanlanmış hatırlatıcılar (Seviye 2): uygulama KAPALIYKEN bile gelecekteki bir zamanda tetiklenen ve yeniden başlatmadan sonra da korunan bir bildirim. Hatırlatıcı, alışkanlık, alarm ve ilaç uygulamalarının ihtiyacı budur.
Bunlar %100 cihaz üzerinde ve çevrimdışıdır - sunucu yok, OneSignal hesabı yok. (OneSignal push, BİR SUNUCUDAN sizin gönderdiğiniz mesajlar için ayrı bir özelliktir.)
2Derleme sihirbazında açın#
4. Adım'da (Erişim) şunları işaretleyin:
- 🔔 Bildirimler - uygulamanın bildirim göndermesine izin verir (POST_NOTIFICATIONS ekler).
- ⏰ Hatırlatıcılar - uygulama kapalıyken tetiklenen zamanlanmış bildirimler ekler (tam zamanlı alarm + açılışta yeniden zamanlama altyapısını ekler). Hatırlatıcılar'ı işaretlemek Bildirimler'i otomatik olarak etkinleştirir.
Bildirime ihtiyacı olmayan uygulamalarda ikisini de kapalı bırakın - APK'nıza fazladan hiçbir şey eklenmez.
3Köprüyü web kodunuzdan çağırın#
AppMint, window.WebToApk üzerinde bir JavaScript köprüsü sunar. Önce her zaman varlığını kontrol edin - yalnızca kurulu uygulamanın içinde bulunur, böylece siteniz tarayıcıda da çalışmaya devam eder.
const b = window.WebToApk || null;
// Ask once (Android 13+):
b?.requestNotificationPermission();
// Tier 1 — instant (app open):
b?.showNotification('Saved', 'Your note was saved', '', 'note');
// Tier 2 — scheduled reminder in 1 hour:
b?.scheduleNotification(
'water-1',
'Drink water',
'Time for a glass of water',
String(Date.now() + 60*60*1000),
'daily' // none | minutely | hourly | daily | weekly
);
b?.cancelNotification('water-1');
b?.cancelAllNotifications();
const pending = JSON.parse(b?.getScheduledNotifications() || '[]');4Yapay zekâ sizin için bağlasın#
AI App Studio'da yalnızca ne istediğinizi anlatın - örneğin 'beni 2 saatte bir uyaran bir su hatırlatıcısı' veya 'her gün sabah 8'de hatırlatan bir ilaç takipçisi'. İsteğiniz hatırlatıcı/alarm/bildirimlerden bahsettiğinde AppMint, yapay zekâya bu köprüyü otomatik olarak öğretir; böylece üretilen uygulama onu doğru kullanır (kullanılamadığında sorunsuz bir yedekle).
5Android varsayılanı yerine kendi sesiniz#
Web paketinize bir ses dosyası (mp3, wav, ogg, m4a, flac veya opus) koyun ve yolunu ses olarak yazın. Anlık bildirimde de, uygulama kapalıyken günler sonra tetiklenen hatırlatıcıda da aynı şekilde çalışır.
Dosya, zamanladığınız anda yerine kopyalanır; böylece yanlış bir dosya adı sabah 7'de varsayılan sese dönüşmek yerine hemen false döner.
Bilmeye değer bir Android kuralı: bildirim kanalının sesi kanal oluşturulurken sabitlenir; bu yüzden AppMint her ses için ayrı bir kanal oluşturur. Bu nedenle bir sesi değiştirmek, Android'in bildirim ekranında o kanalın kendi ayarlarını sıfırlar - kaçınılmaz ve dürüst davranış budur.
const b = window.WebToApk || null;
// Instant, with your sound:
b?.notify(JSON.stringify({
title: 'Order confirmed',
body: 'Arriving Tuesday',
sound: '/audio/chime.mp3' // a file in YOUR bundle
}));
// Check a sound before you save it in a settings screen:
const ok = b?.prepareNotificationSound('/audio/chime.mp3');
// 'silent' for no sound at all; leave it out for the Android default.6Sesli, resimli ve düğmeli hatırlatıcılar#
scheduleNotificationEx(), notify()'ın aldığı her şeyi ve ayrıca ne zaman tetikleneceğini alır. Başlık ve gövdeden fazlasını istediğinizde eski beş bağımsız değişkenli scheduleNotification() yerine bunu kullanın.
const b = window.WebToApk || null;
b?.scheduleNotificationEx('dose-1', JSON.stringify({
at: Date.now() + 60*60*1000, // epoch millis
repeat: 'daily', // none|minutely|hourly|daily|weekly
title: 'Time for your dose',
body: 'Vitamin D — 1 tablet',
sound: '/audio/chime.mp3',
actions: [{ id: 'taken', label: 'Taken' }]
}));
// Returns false if the sound file does not exist — check it.7Uygulamanın kendisini belirli bir saatte açmak#
openApp: true ekleyin; hatırlatıcı tam ekran bir uyarıya dönüşür: kilitli telefonda uygulama kilit ekranının üzerinde açılır, kilidi açık telefonda ise üstte beliren bir başlık bandı olarak görünür.
Android'in izin verdiği her şey bundan ibarettir. Bir uygulama arka planda sessizce kendini başlatamaz - bu Android 10'dan beri engellidir - bu yüzden 'uygulama sabah 7'de kendiliğinden açılır' vaat eden her sayfanın bundan geçmesi gerekir. Android 14+ sürümünde kullanıcı uyarıya uygulama başına izin verir; canOpenAppAtTime() değerini kontrol edin ve reddedildi diyorsa kullanıcıyı ayarlar ekranına yönlendirin.
Uygulama bu şekilde açıldığında sayfanız bir appmint:reminder olayı alır; böylece kapalıyken yapamadığı işi çalıştırabilir.
const b = window.WebToApk || null;
if (b?.canOpenAppAtTime() === 'denied') b?.requestOpenAppPermission();
b?.scheduleNotificationEx('standup', JSON.stringify({
at: tomorrowAt9am, repeat: 'daily',
title: 'Stand-up', body: 'Daily sync starts now',
sound: '/audio/alarm.mp3',
openApp: true
}));
window.addEventListener('appmint:reminder', e => {
// e.detail = { id: 'standup', overLockScreen: true }
showReminderScreen(e.detail.id);
});8Gerçek cihazlarda güvenilirlik#
Zamanlanmış hatırlatıcılar, Android'in izin verdiği ölçüde güvenilirdir:
- Android 12+ sürümünde tam zamanlama SCHEDULE_EXACT_ALARM gerektirir. Uygulamanız için kapalıysa hatırlatıcı 10 dakikalık bir pencerede kurulur (telefon uyurken daha geç) ve uygulama bunu kullanıcıya bir kez açıklar. getAlarmPrecision()'a sorun - 'exact' veya 'inexact' döndürür - ve kullanıcıyı ayara yönlendirmek için requestExactAlarms() çağırın. Bir çalar saat veya takvim uygulaması sihirbazda "Uygulamam bir çalar saat veya takvim uygulamasıdır" kutusunu işaretleyebilir: tam alarmlar o zaman her zaman açıktır (Google Play, Play Console'da Exact alarm beyanını gerektirir).
- Bazı telefonlar (Xiaomi, Samsung, Oppo vb.) pil tasarrufu için arka plan alarmlarını geciktirir veya durdurur. Uygulama bunu bir kez açıklar (Samsung'un Arka plan kullanım sınırları yoluyla birlikte) ve pil optimizasyonu listesini açar.
- Hatırlatıcılar, yeniden başlatma veya uygulama güncellemesinden sonra otomatik olarak yeniden kurulur.
9Bildirimleri kapatan kullanıcıları geri kazanın#
Birçok kişi Android 13'ün bildirim isteminde 'İzin verme'ye dokunur veya geçer; Android de bu istemi yalnızca sınırlı sayıda gösterir. Ondan sonra bildirimleri yalnızca uygulamanın bildirim ayarları geri açabilir.
AppMint.enableNotifications() kullanıcının dokunduğu bir düğmeden doğru olanı yapar: Android hâlâ gösterebiliyorsa izin istemini, aksi halde uygulamanın bildirim ayarlarını gösterir - ve kullanıcı geri döndüğünde yeni durumu size bildirir. getNotificationState() 'granted', 'prompt' (hâlâ sorulabilir), 'blocked' (yalnızca Ayarlar düzeltebilir) veya 'unavailable' (derlemede bildirim yok) döndürür. Bannerınızı yalnızca 'prompt' ve 'blocked' için gösterin ve açılışta asla sormayın.
appmint://notifications/enable bağlantısına sahip bir push veya uygulama içi mesaj düğmesi, hiç sayfa kodu yazmadan aynı işi yapar.
const A = window.AppMint;
if (A?.enableNotifications) {
const state = await A.getNotificationState();
// 'granted' | 'prompt' | 'blocked' | 'unavailable'
banner.hidden = !(state === 'prompt' || state === 'blocked');
turnOnButton.onclick = async () => {
const r = await A.enableNotifications();
// r = { state, changed, openedSettings }
banner.hidden = r.state === 'granted';
};
}
// Just the settings screen:
A?.openNotificationSettings?.();