Notification Permission — αυτή είναι η άδεια που χρειάζεται η εφαρμογή για να στέλνει push ειδοποιήσεις και τοπικές ειδοποιήσεις στον χρήστη. Από το Android 13 και το iOS 12, οι εφαρμογές υποχρεούνται να ζητούν αυτήν την άδεια κατά τον χρόνο εκτέλεσης μέσω ενός συστήματος διαλόγου. Σύμφωνα με το Android Developers, 2024, χωρίς τη ρητή συγκατάθεση του χρήστη, η εφαρμογή δεν μπορεί να εμφανίζει ειδοποιήσεις σε συσκευές με Android 13 και νεότερες εκδόσεις.
Κύρια σημεία
Notification Permission — αυτή είναι μια άδεια συστήματος που ρυθμίζει τη δυνατότητα της εφαρμογής να στέλνει ειδοποιήσεις στον χρήστη. Μέχρι το Android 13, όλες οι εφαρμογές μπορούσαν να εμφανίζουν ειδοποιήσεις χωρίς αίτημα — αρκούσε να δηλώσουν την άδεια στο manifest. Αλλά με την αύξηση των ανεπιθύμητων και ενοχλητικών ειδοποιήσεων, η Google επέβαλε το υποχρεωτικό αίτημα κατά τον χρόνο εκτέλεσης, παρόμοιο με το iOS.
Στο iOS, η άδεια ειδοποίησης ήταν υποχρεωτική από το iOS 8, και από το iOS 12 εμφανίστηκαν οι προσωρινές (provisional) ειδοποιήσεις — αθόρυβες ειδοποιήσεις που παραδίδονται χωρίς ήχο και εμφανίζονται στο Κέντρο Ειδοποιήσεων χωρίς ρητό αίτημα. Οι προσωρινές ειδοποιήσεις επιτρέπουν στον προγραμματιστή να δείξει στον χρήστη την αξία των ειδοποιήσεων πριν ζητήσει πλήρη άδεια.
Σύμφωνα με το Localytics (2024), το 61% των χρηστών iOS και το 55% των χρηστών Android συμφωνούν να λαμβάνουν push ειδοποιήσεις μετά από αίτημα. Το ποσοστό μετατροπής συγκατάθεσης εξαρτάται άμεσα από το πλαίσιο του αιτήματος: οι εφαρμογές που ζητούν άδεια μετά από την πρώτη πολύτιμη αλληλεπίδραση λαμβάνουν 40% περισσότερες συγκαταθέσεις από εκείνες που ζητούν κατά την πρώτη εκκίνηση.
Η εξέλιξη των αδειών ειδοποιήσεων δείχνει πώς οι πλατφόρμες περιόρισαν σταδιακά την πρόσβαση των εφαρμογών σε αυτό το κανάλι επικοινωνίας. Η κατανόηση αυτής της εξέλιξης βοηθά τον προγραμματιστή να χειρίζεται σωστά διαφορετικές εκδόσεις λειτουργικού συστήματος.
Μέχρι το Android 13 (2022), οποιαδήποτε εφαρμογή μπορούσε να εμφανίζει ειδοποιήσεις χωρίς τη συγκατάθεση του χρήστη. Το Android 8.0 (2017) εισήγαγε κανάλια ειδοποιήσεων, το Android 12 (2021) πρόσθεσε αυτόματο αποκλεισμό ενοχλητικών ειδοποιήσεων, και τελικά το Android 13 κατέστησε υποχρεωτικό το αίτημα POST_NOTIFICATIONS κατά τον χρόνο εκτέλεσης. Για εφαρμογές με targetSdkVersion κάτω από 33, το σύστημα χορηγεί αυτόματα την άδεια, αλλά το Google Play απαιτεί ενημέρωση του targetSdkVersion σε 33+ από τον Αύγουστο του 2023.
Το iOS 8 (2014) εισήγαγε το υποχρεωτικό αίτημα άδειας μέσω του UIUserNotificationSettings. Το iOS 10 (2016) παρουσίασε το UNUserNotificationCenter με υποστήριξη για πλούσιες ειδοποιήσεις. Το iOS 12 (2018) πρόσθεσε προσωρινές ειδοποιήσεις και ομαδοποιημένες ειδοποιήσεις. Το iOS 15 (2021) εισήγαγε τη Λειτουργία Εστίασης (Focus Mode), η οποία μπορεί να αποκλείει ειδοποιήσεις ανεξάρτητα από την άδεια της εφαρμογής. Η Διαφάνεια Παρακολούθησης Εφαρμογών (iOS 14.5) δεν σχετίζεται με ειδοποιήσεις, αλλά επηρέασε επίσης τη γενική κουλτούρα αιτημάτων άδειας.
Επί του παρόντος, και οι δύο πλατφόρμες απαιτούν αίτημα Notification Permission κατά τον χρόνο εκτέλεσης. Ο προγραμματιστής δεν μπορεί πλέον να βασίζεται στην αυτόματη ενεργοποίηση ειδοποιήσεων. Ο χρήστης έχει πλήρη έλεγχο σχετικά με το ποιες εφαρμογές μπορούν να τον ειδοποιούν. Τα κανάλια ειδοποιήσεων στο Android και οι κατηγορίες ειδοποιήσεων στο iOS επιτρέπουν στον χρήστη να ρυθμίζει με ακρίβεια τους τύπους των λαμβανόμενων ειδοποιήσεων.
Notification Permission στο Android πραγματοποιείται μέσω της άδειας POST_NOTIFICATIONS, που δηλώνεται στο manifest, με αίτημα κατά τον χρόνο εκτέλεσης για Android 13+.
Για Android 13+ πρέπει να δηλώσετε την άδεια POST_NOTIFICATIONS στο AndroidManifest.xml. Για συμβατότητα προς τα πίσω με Android 12 και παλαιότερες εκδόσεις, η άδεια χορηγείται αυτόματα από το σύστημα — δεν απαιτούνται πρόσθετες ενέργειες.
<uses-permission android:name="android.permission.POST_NOTIFICATIONS" />
Το αίτημα της άδειας POST_NOTIFICATIONS εκτελείται μέσω του Activity Result API. Είναι σημαντικό να ελέγχετε την έκδοση SDK: σε Android 12 και παλαιότερες εκδόσεις, δεν απαιτείται αίτημα, η άδεια θεωρείται αυτόματα χορηγηθείσα.
private val notificationPermissionLauncher =
registerForActivityResult(ActivityResultContracts.RequestPermission()) { granted ->
if (granted) {
createNotificationChannel()
showPushNotification()
} else {
logPermissionDenied()
}
}
fun requestNotificationAccess() {
if (Build.version.SDK_INT <= Build.VERSION_CODES.S_V2) {
// Android 12 και κάτω — άδεια χορηγείται αυτόματα
showNotification()
return
}
if (ContextCompat.checkSelfPermission(this,
Manifest.permission.POST_NOTIFICATIONS) == PackageManager.PERMISSION_GRANTED) {
showNotification()
} else {
notificationPermissionLauncher.launch(Manifest.permission.POST_NOTIFICATIONS)
}
}
Σε Android 8.0+, η εφαρμογή πρέπει να δημιουργήσει ένα κανάλι ειδοποιήσεων μέσω NotificationChannel πριν από την αποστολή της πρώτης ειδοποίησης. Το κανάλι έχει σπουδαιότητα (importance) από IMPORTANCE_NONE έως IMPORTANCE_HIGH, η οποία καθορίζει αν η ειδοποίηση θα εμφανίζεται με ήχο και ως banner. Εάν ο χρήστης απενεργοποίησε τις ειδοποιήσεις για την εφαρμογή, τα νέα κανάλια δεν θα έχουν αποτέλεσμα μέχρι την εκ νέου ενεργοποίηση στις ρυθμίσεις. Συνιστάται η δημιουργία ξεχωριστών καναλιών για διαφορετικούς τύπους ειδοποιήσεων: μηνύματα, διαφημίσεις, συμβάντα συστήματος.
private fun createNotificationChannel() {
val channel = NotificationChannel(
CHANNEL_ID_MESSAGES,
"Μηνύματα",
NotificationManager.IMPORTANCE_HIGH
).apply {
description = "Ειδοποιήσεις για νέα μηνύματα"
enableVibration = true
}
val manager = getSystemService(NotificationManager::class.java)
manager.createNotificationChannel(channel)
}
Notification Permission στο iOS ζητείται μέσω του UNUserNotificationCenter. Η Apple συνιστά μια προσέγγιση δύο βημάτων: πρώτα ζητήστε προσωρινές ειδοποιήσεις, στη συνέχεια, μετά την επίδειξη αξίας, πλήρη άδεια.
Οι προσωρινές ειδοποιήσεις είναι αθόρυβες ειδοποιήσεις που φτάνουν στο Κέντρο Ειδοποιήσεων χωρίς ήχο και banner. Δεν απαιτούν ρητή συγκατάθεση του χρήστη και επιτρέπουν στην εφαρμογή να δείξει την αξία των ειδοποιήσεων πριν από το πλήρες αίτημα. Αφού λάβει αρκετές προσωρινές ειδοποιήσεις, ο χρήστης μπορεί να ενεργοποιήσει τις πλήρεις ειδοποιήσεις μέσω του μενού στην ίδια την ειδοποίηση.
import UserNotifications
func requestNotificationPermission() {
let center = UNUserNotificationCenter.current()
center.requestAuthorization(options: [.alert, .badge, .sound]) { granted, error in
if let error = error {
print("Notification error: \(error.localizedDescription)")
return
}
if granted {
registerForRemoteNotifications()
} else {
handleDeniedPermission()
}
}
}
func requestProvisionalOnly() {
let center = UNUserNotificationCenter.current()
center.requestAuthorization(options: [.provisional, .alert, .badge, .sound]) { granted, error in
// Provisional — ο χρήστης δεν βλέπει το παράθυρο
// Οι ειδοποιήσεις φτάνουν χωρίς ήχο στο Κέντρο Ειδοποιήσεων
registerForRemoteNotifications()
}
}
Η τρέχουσα κατάσταση του Notification Permission στο iOS μπορεί να ληφθεί μέσω UNUserNotificationCenter.current().getNotificationSettings. Οι καταστάσεις .authorized, .denied, .provisional ή .notDetermined επιτρέπουν στην εφαρμογή να επιλέξει τη σωστή συμπεριφορά. Μετά την πρώτη άρνηση, ο διάλογος συστήματος δεν εμφανίζεται ξανά — πρέπει να ανακατευθύνετε τον χρήστη στις Ρυθμίσεις μέσω UIApplication.openSettingsURLString. Η Apple συνιστά επίσης τον χειρισμό της κατάστασης .ephemeral (iOS 17+), η οποία παρέχει προσωρινές ειδοποιήσεις για συγκεκριμένα σενάρια.
Βέλτιστες πρακτικές αιτήματος Notification Permission στοχεύουν στην αύξηση του ποσοστού μετατροπής συγκατάθεσης και στη μείωση της απώλειας χρηστών. Ένα εσφαλμένο αίτημα μπορεί όχι μόνο να στερήσει από την εφαρμογή τη δυνατότητα αποστολής ειδοποιήσεων, αλλά και να οδηγήσει στην αφαίρεση της εφαρμογής.
Το πιο κοινό αντι-πρότυπο — αίτημα Notification Permission κατά την πρώτη εκκίνηση της εφαρμογής. Ο χρήστης δεν κατανοεί ακόμα την αξία της εφαρμογής και με μεγάλη πιθανότητα θα αρνηθεί. Η βέλτιστη στιγμή — αφού ο χρήστης εκτελέσει την πρώτη στοχευμένη ενέργεια: πραγματοποιήσει παραγγελία, στείλει μήνυμα, εγγραφεί σε ενημερώσεις. Το αίτημα μετά την αξία αυξάνει το ποσοστό μετατροπής συγκατάθεσης στο 65-75%.
Πριν από τον διάλογο συστήματος, εμφανίστε τη δική σας οθόνη με παραδείγματα ειδοποιήσεων που θα λαμβάνει ο χρήστης. Δείξτε ένα προσχέδιο της μελλοντικής ειδοποίησης με κείμενο και εικονίδιο. Εάν ο χρήστης δει ότι οι ειδοποιήσεις θα είναι χρήσιμες και μη ενοχλητικές, είναι πιο πιθανό να συμφωνήσει. Το παράδειγμα ειδοποίησης στην προκαταρκτική οθόνη είναι μια αποτελεσματική τεχνική που αυξάνει τη μετατροπή κατά 35-50%.
Το προληπτικό αίτημα Προσωρινών Ειδοποιήσεων στο iOS επιτρέπει την παράδοση ειδοποιήσεων χωρίς ρητή συγκατάθεση του χρήστη. Εάν ο χρήστης δει αξία σε αυτές τις ειδοποιήσεις, μπορεί να ενεργοποιήσει τις πλήρεις ειδοποιήσεις μέσω του μενού περιβάλλοντος της ειδοποίησης. Η Apple συνιστά αυτήν την προσέγγιση για εφαρμογές ειδήσεων, καιρού και άλλες υπηρεσίες όπου οι ειδοποιήσεις είναι πληροφοριακές, όχι συναλλακτικές. Σύμφωνα με το Apple WWDC 2024, αυτή η προσέγγιση αυξάνει το ποσοστό μετατροπής πλήρους συγκατάθεσης κατά 20-30%.
Συχνές ερωτήσεις
Μετά την άρνηση, ο διάλογος συστήματος δεν εμφανίζεται ξανά. Ο μόνος τρόπος να ενεργοποιηθούν οι ειδοποιήσεις είναι να ανακατευθύνετε τον χρήστη στις ρυθμίσεις συστήματος μέσω Intent(Settings.ACTION_APPLICATION_DETAILS_SETTINGS) στο Android ή UIApplication.openSettingsURLString στο iOS. Εμφανίστε μια οθόνη με οδηγίες και κουμπί πλοήγησης.
Σε Android 12 και παλαιότερες εκδόσεις, το Notification Permission δεν απαιτείται — όλες οι εφαρμογές μπορούν να στέλνουν ειδοποιήσεις χωρίς αίτημα. Ωστόσο, ο χρήστης μπορεί να απενεργοποιήσει τις ειδοποιήσεις ανά πάσα στιγμή μέσω των ρυθμίσεων συστήματος. Από το Android 13, το αίτημα χρόνου εκτέλεσης είναι υποχρεωτικό για targetSdkVersion 33+.
NotificationChannel — είναι μια κατηγορία ειδοποιήσεων που εισήχθη στο Android 8.0. Κάθε κανάλι έχει όνομα, περιγραφή, σπουδαιότητα (importance) και ομάδα. Ο χρήστης μπορεί να απενεργοποιεί μεμονωμένα κανάλια χωρίς να απενεργοποιεί όλες τις ειδοποιήσεις της εφαρμογής. Για παράδειγμα, το κανάλι „Νέα μηνύματα” και το κανάλι „Διαφημιστικό ενημερωτικό δελτίο” μπορούν να ρυθμιστούν διαφορετικά.
Σε Android 13+ χωρίς POST_NOTIFICATIONS, οποιαδήποτε κλήση NotificationManager.notify θα αγνοηθεί από το σύστημα. Σε iOS χωρίς την άδεια UNUserNotificationCenter, οι ειδοποιήσεις δεν παραδίδονται. Εξαίρεση: Provisional στο iOS (χωρίς ήχο, μόνο στο Κέντρο Ειδοποιήσεων) και Android 12- (δεν απαιτείται άδεια).
Στο Android χρησιμοποιήστε NotificationManagerCompat.areNotificationsEnabled(). Στο iOS καλέστε το UNUserNotificationCenter.current().getNotificationSettings και ελέγξτε την ιδιότητα authorizationStatus. Για Android, ελέγξτε επίσης τη σπουδαιότητα του καναλιού: το NotificationChannel.getImportance() δεν πρέπει να είναι IMPORTANCE_NONE.
Περίληψη
Θα αναπτύξουμε μια εφαρμογή για κινητά έτοιμη για χρήση
Η IT Sectr δημιουργεί εφαρμογές iOS και Android για νεοφυείς επιχειρήσεις και επιχειρήσεις από το 2017. Θα σας συμβουλεύσουμε και θα προτείνουμε την καλύτερη λύση.
Διαβάστε επίσης