Buat APK Gratis

Notifikasi

Notifikasi Lokal & Pengingat

Tampilkan notifikasi instan, atau jadwalkan pengingat yang berbunyi bahkan saat aplikasi tertutup - di perangkat, tanpa server

1Yang ditambahkan fitur ini#

Aplikasi Anda dapat menampilkan notifikasi Android dari kodenya sendiri - dua tingkat:

  • Instan (Tier 1): notifikasi yang muncul saat ini juga, ketika aplikasi terbuka. Cocok untuk 'unduhan selesai', 'timer selesai', dan sebagainya.
  • Pengingat terjadwal (Tier 2): notifikasi yang berbunyi di waktu mendatang bahkan saat aplikasi TERTUTUP, dan tetap ada setelah reboot. Inilah yang dibutuhkan aplikasi pengingat, kebiasaan, alarm, dan obat.

Semua ini 100% di perangkat dan offline - tanpa server, tanpa akun OneSignal. (Push OneSignal adalah fitur terpisah untuk pesan yang ANDA kirim dari server.)

2Aktifkan di wizard build#

Di Langkah 4 (Akses), centang:

  • đź”” Notifikasi - mengizinkan aplikasi memunculkan notifikasi (menambahkan POST_NOTIFICATIONS).
  • ⏰ Pengingat - menambahkan notifikasi terjadwal yang berbunyi saat aplikasi tertutup (menambahkan komponen alarm tepat waktu + jadwal ulang saat boot). Mencentang Pengingat otomatis mengaktifkan Notifikasi.

Biarkan keduanya mati untuk aplikasi yang tidak memerlukan notifikasi - tidak ada tambahan apa pun di APK Anda.

3Panggil bridge dari kode web Anda#

AppMint menyediakan bridge JavaScript di window.WebToApk. Selalu deteksi fitur ini lebih dulu - bridge hanya ada di dalam aplikasi terinstal, jadi situs Anda tetap berfungsi di browser.

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() || '[]');

4Biarkan AI yang memasangnya untuk Anda#

Di AI App Studio, cukup jelaskan yang Anda inginkan - misalnya 'pengingat minum air yang mengingatkan saya setiap 2 jam' atau 'pelacak obat yang mengingatkan saya setiap hari pukul 8 pagi'. Saat permintaan Anda menyebut pengingat/alarm/notifikasi, AppMint otomatis mengajarkan bridge ini kepada AI sehingga aplikasi yang dihasilkan memakainya dengan benar (dengan cadangan yang aman saat bridge tidak tersedia).

5Suara Anda sendiri sebagai pengganti default Android#

Taruh file audio di bundel web Anda (mp3, wav, ogg, m4a, flac, atau opus) dan tulis path-nya sebagai suara. Berfungsi sama pada notifikasi instan maupun pengingat yang berbunyi beberapa hari kemudian saat aplikasi tertutup.

File disalin ke tempatnya saat Anda menjadwalkan, sehingga nama file yang salah langsung mengembalikan false, bukan berubah menjadi suara default pada pukul 7 pagi.

Satu aturan Android yang perlu diketahui: suara channel notifikasi ditetapkan saat channel dibuat, sehingga AppMint membuat channel terpisah untuk setiap suara. Mengganti suara karenanya mereset pengaturan channel itu di layar notifikasi Android - tidak bisa dihindari, dan itulah perilaku yang jujur.

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.

6Pengingat dengan suara, gambar, dan tombol#

scheduleNotificationEx() menerima semua yang diterima notify(), ditambah kapan notifikasi dibunyikan. Gunakan ini sebagai ganti scheduleNotification() lama dengan lima argumen jika Anda menginginkan lebih dari sekadar judul dan isi.

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.

7Membuka aplikasi itu sendiri pada waktu tertentu#

Tambahkan openApp: true dan pengingat menjadi peringatan layar penuh: di ponsel terkunci aplikasi terbuka di atas layar kunci, di ponsel yang tidak terkunci muncul sebagai banner heads-up.

Inilah seluruh yang diizinkan Android. Aplikasi tidak bisa meluncurkan dirinya sendiri diam-diam di latar belakang - itu diblokir sejak Android 10 - jadi halaman mana pun yang menjanjikan 'aplikasi langsung terbuka pukul 7 pagi' harus melalui jalur ini. Di Android 14+ pengguna memberikan izin peringatan per aplikasi; periksa canOpenAppAtTime() dan arahkan mereka ke layar pengaturan jika hasilnya denied.

Saat aplikasi terbuka dengan cara ini, halaman Anda menerima event appmint:reminder, sehingga dapat menjalankan pekerjaan yang tidak bisa dilakukan saat aplikasi tertutup.

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);
});

8Keandalan di perangkat sungguhan#

Pengingat terjadwal seandal yang diizinkan Android:

  • Di Android 12+, ketepatan waktu membutuhkan SCHEDULE_EXACT_ALARM. Jika dimatikan untuk aplikasi Anda, pengingat dipasang dalam jendela 10 menit (lebih lambat saat ponsel tidur), dan aplikasi menjelaskannya sekali kepada pengguna. Tanyakan getAlarmPrecision() - hasilnya 'exact' atau 'inexact' - dan panggil requestExactAlarms() untuk mengarahkan pengguna ke pengaturan itu. Aplikasi jam alarm atau kalender dapat mencentang "My app is an alarm clock or calendar app" di wizard: alarm tepat waktu lalu selalu aktif (Google Play mewajibkan deklarasi Exact alarm di Play Console).
  • Beberapa ponsel (Xiaomi, Samsung, Oppo, dll.) menahan atau menghentikan alarm latar belakang untuk menghemat baterai. Aplikasi menjelaskannya sekali (dengan jalur Background usage limits Samsung) dan membuka daftar optimasi baterai.
  • Pengingat dipasang ulang secara otomatis setelah ponsel di-reboot atau aplikasi diperbarui.

9Ajak kembali pengguna yang mematikan notifikasi#

Banyak orang mengetuk 'Don't allow' pada permintaan notifikasi Android 13, atau melewatinya, dan Android hanya menampilkan permintaan itu beberapa kali saja. Setelah itu hanya pengaturan notifikasi aplikasi yang bisa mengaktifkannya kembali.

AppMint.enableNotifications() melakukan hal yang tepat dari tombol yang diketuk pengguna: permintaan izin selama Android masih bisa menampilkannya, jika tidak maka pengaturan notifikasi aplikasi - dan memberi tahu Anda status barunya saat pengguna kembali. getNotificationState() menjawab 'granted', 'prompt' (masih bisa diminta), 'blocked' (hanya Pengaturan yang bisa memperbaikinya) atau 'unavailable' (build tidak memiliki notifikasi). Tampilkan banner Anda hanya untuk 'prompt' dan 'blocked', dan jangan pernah meminta saat peluncuran.

Tombol pesan push atau dalam aplikasi dengan tautan appmint://notifications/enable melakukan hal yang sama tanpa kode halaman apa pun.

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?.();

Halaman ini dibuat dari Panduan Integrasi di dalam aplikasi itu sendiri, jadi isinya persis sama dengan build saat ini. Baca sebagai Markdown.

Diperiksa terhadap panduan yang dirilis pada 2026-10-22.