Notification Permission: khái niệm, loại thông báo và nguyên lý hoạt động

Tác giả: IT Sectr Đã đăng: 2026-05-22 Thời gian đọc: 8 phút

Notification Permission là quyền cần thiết để ứng dụng gửi thông báo đẩy và thông báo cục bộ cho người dùng. Bắt đầu từ Android 13 và iOS 12, các ứng dụng phải yêu cầu quyền này trong thời gian chạy thông qua hộp thoại hệ thống. Theo Android Developers, 2024, nếu không có sự đồng ý rõ ràng của người dùng, ứng dụng không thể hiển thị thông báo trên các thiết bị chạy Android 13 trở lên.

Những điểm chính

  • Notification Permission là quyền thời gian chạy để gửi thông báo, bắt buộc trên Android 13+ và iOS 12+.
  • Android 13 đã giới thiệu quyền POST_NOTIFICATIONS, phải được yêu cầu trong thời gian chạy thông qua Activity Result API.
  • iOS sử dụng UNUserNotificationCenter.requestAuthorization để yêu cầu truy cập vào thông báo cục bộ và thông báo đẩy.
  • Từ chối quyền khiến ứng dụng không thể hiển thị cả thông báo cục bộ lẫn thông báo đẩy.
  • Không thể yêu cầu lại sau lần từ chối đầu tiên — phải chuyển hướng người dùng đến cài đặt hệ thống.

Notification Permission là gì?

Notification Permission là quyền hệ thống kiểm soát khả năng gửi thông báo của ứng dụng đến người dùng. Trước Android 13, tất cả ứng dụng đều có thể hiển thị thông báo mà không cần yêu cầu — chỉ cần khai báo quyền trong tệp kê khai là đủ. Tuy nhiên, với sự gia tăng của thư rác và thông báo gây phiền nhiễu, Google đã giới thiệu yêu cầu bắt buộc trong thời gian chạy, tương tự như iOS.

Trên iOS, quyền thông báo đã bắt buộc từ iOS 8 và bắt đầu từ iOS 12, thông báo tạm thời (provisional notifications) đã xuất hiện — thông báo im lặng được gửi không có âm thanh và hiển thị trong Trung tâm thông báo mà không cần yêu cầu rõ ràng. Thông báo tạm thời cho phép nhà phát triển cho người dùng thấy giá trị của thông báo trước khi yêu cầu quyền đầy đủ.

Theo Localytics (2024), 61% người dùng iOS và 55% người dùng Android đồng ý nhận thông báo đẩy sau khi được yêu cầu. Tỷ lệ chấp thuận phụ thuộc trực tiếp vào bối cảnh yêu cầu: các ứng dụng yêu cầu quyền sau tương tác có giá trị đầu tiên nhận được nhiều hơn 40% sự chấp thuận so với những ứng dụng yêu cầu ở lần khởi chạy đầu tiên.

Sự phát triển của quyền thông báo

Sự phát triển của quyền thông báo cho thấy các nền tảng đã dần hạn chế quyền truy cập của ứng dụng vào kênh giao tiếp này như thế nào. Hiểu được sự phát triển này giúp nhà phát triển xử lý chính xác các phiên bản hệ điều hành khác nhau.

Android: từ truy cập tự do đến kiểm soát chặt chẽ

Trước Android 13 (2022), bất kỳ ứng dụng nào cũng có thể hiển thị thông báo mà không cần sự đồng ý của người dùng. Android 8.0 (2017) đã giới thiệu kênh thông báo, Android 12 (2021) đã thêm tính năng tự động chặn thông báo gây phiền nhiễu, và cuối cùng Android 13 bắt buộc phải yêu cầu POST_NOTIFICATIONS trong thời gian chạy. Đối với các ứng dụng có targetSdkVersion dưới 33, hệ thống tự động cấp quyền, nhưng Google Play yêu cầu cập nhật targetSdkVersion lên 33+ kể từ tháng 8 năm 2023.

iOS: tăng cường kiểm soát dần dần

iOS 8 (2014) đã giới thiệu yêu cầu quyền bắt buộc thông qua UIUserNotificationSettings. iOS 10 (2016) đã giới thiệu UNUserNotificationCenter với hỗ trợ thông báo phong phú. iOS 12 (2018) đã thêm thông báo tạm thời và thông báo nhóm. iOS 15 (2021) đã giới thiệu Chế độ tập trung, có thể chặn thông báo bất kể quyền của ứng dụng. App Tracking Transparency (iOS 14.5) không liên quan đến thông báo nhưng cũng đã ảnh hưởng đến văn hóa chung về yêu cầu quyền.

Trạng thái hiện tại

Hiện tại, cả hai nền tảng đều yêu cầu yêu cầu Notification Permission trong thời gian chạy. Nhà phát triển không thể dựa vào việc tự động bật thông báo nữa. Người dùng có toàn quyền kiểm soát ứng dụng nào có thể thông báo cho họ. Kênh thông báo trên Android và danh mục thông báo trên iOS cho phép người dùng tinh chỉnh các loại cảnh báo họ nhận được.

Notification Permission trên Android

Notification Permission trên Android được kích hoạt thông qua quyền POST_NOTIFICATIONS được khai báo trong tệp kê khai, sau đó là yêu cầu trong thời gian chạy cho Android 13+.

Khai báo trong tệp kê khai

Đối với Android 13+, bạn phải khai báo quyền POST_NOTIFICATIONS trong AndroidManifest.xml. Để tương thích ngược với Android 12 trở xuống, quyền được hệ thống tự động cấp — không cần hành động bổ sung nào.

xml
<uses-permission android:name="android.permission.POST_NOTIFICATIONS" />

Yêu cầu thời gian chạy trong Kotlin

Yêu cầu quyền POST_NOTIFICATIONS được thực hiện thông qua Activity Result API. Điều quan trọng là kiểm tra phiên bản SDK: trên Android 12 trở xuống, không cần yêu cầu — quyền được coi là tự động được cấp.

kotlin
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 trở xuống — quyền được cấp tự động
        showNotification()
        return
    }
    if (ContextCompat.checkSelfPermission(this,
        Manifest.permission.POST_NOTIFICATIONS) == PackageManager.PERMISSION_GRANTED) {
        showNotification()
    } else {
        notificationPermissionLauncher.launch(Manifest.permission.POST_NOTIFICATIONS)
    }
}

Tạo kênh thông báo

Trên Android 8.0+, ứng dụng phải tạo một kênh thông báo thông qua NotificationChannel trước khi gửi thông báo đầu tiên. Kênh có mức độ quan trọng từ IMPORTANCE_NONE đến IMPORTANCE_HIGH, quyết định thông báo có được hiển thị kèm âm thanh và dưới dạng biểu ngữ hay không. Nếu người dùng đã tắt thông báo cho ứng dụng, các kênh mới sẽ không có hiệu lực cho đến khi được bật lại trong cài đặt. Nên tạo các kênh riêng biệt cho các loại cảnh báo khác nhau: tin nhắn, quảng cáo, sự kiện hệ thống.

kotlin
private fun createNotificationChannel() {
    val channel = NotificationChannel(
        CHANNEL_ID_MESSAGES,
        "Tin nhắn",
        NotificationManager.IMPORTANCE_HIGH
    ).apply {
        description = "Thông báo tin nhắn mới"
        enableVibration = true
    }
    val manager = getSystemService(NotificationManager::class.java)
    manager.createNotificationChannel(channel)
}

Notification Permission trên iOS

Notification Permission trên iOS được yêu cầu thông qua UNUserNotificationCenter. Apple khuyến nghị phương pháp hai bước: đầu tiên yêu cầu thông báo tạm thời, sau đó, sau khi chứng minh được giá trị, yêu cầu quyền đầy đủ.

Yêu cầu trong Swift với tùy chọn tạm thời

Thông báo tạm thời là thông báo im lặng xuất hiện trong Trung tâm thông báo mà không có âm thanh hay biểu ngữ. Chúng không yêu cầu sự đồng ý rõ ràng của người dùng và cho phép ứng dụng chứng minh giá trị của thông báo trước khi yêu cầu đầy đủ. Sau khi nhận được một số thông báo tạm thời, người dùng có thể bật thông báo đầy đủ thông qua menu trong chính thông báo đó.

swift
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
        // Tạm thời — người dùng không thấy hộp thoại
        // Thông báo đến không có âm thanh trong Trung tâm thông báo
        registerForRemoteNotifications()
    }
}

Kiểm tra trạng thái và cài đặt hệ thống

Trạng thái Notification Permission hiện tại trên iOS có thể được lấy thông qua UNUserNotificationCenter.current().getNotificationSettings. Trạng thái .authorized, .denied, .provisional hoặc .notDetermined cho phép ứng dụng chọn hành vi phù hợp. Sau lần từ chối đầu tiên, hộp thoại hệ thống không hiển thị lại — phải chuyển hướng người dùng đến Cài đặt thông qua UIApplication.openSettingsURLString. Apple cũng khuyến nghị xử lý trạng thái .ephemeral (iOS 17+), cung cấp thông báo tạm thời cho các tình huống cụ thể.

Thực tiễn tốt nhất khi yêu cầu thông báo

Các thực tiễn tốt nhất khi yêu cầu Notification Permission nhằm tăng tỷ lệ chấp thuận và giảm tỷ lệ rời bỏ của người dùng. Một yêu cầu không đúng không chỉ có thể tước đi khả năng gửi thông báo của ứng dụng mà còn dẫn đến việc gỡ cài đặt ứng dụng.

Đừng yêu cầu ở lần khởi chạy đầu tiên

Phản mẫu phổ biến nhất là yêu cầu Notification Permission ở lần khởi chạy đầu tiên của ứng dụng. Người dùng chưa hiểu giá trị của ứng dụng và rất có thể sẽ từ chối. Thời điểm tối ưu là sau khi người dùng thực hiện hành động có giá trị đầu tiên: đặt hàng, gửi tin nhắn, đăng ký nhận cập nhật. Lời nhắc sau giá trị làm tăng tỷ lệ chấp thuận lên 65-75%.

Sử dụng màn hình trước khi cấp quyền

Trước hộp thoại hệ thống, hãy hiển thị màn hình của riêng bạn với các ví dụ về thông báo mà người dùng sẽ nhận được. Hiển thị một mô phỏng thông báo trong tương lai với văn bản và biểu tượng. Nếu người dùng thấy rằng thông báo sẽ hữu ích và không gây phiền nhiễu, họ sẽ có nhiều khả năng đồng ý hơn. Bản xem trước thông báo trên màn hình trước khi cấp quyền là một kỹ thuật hiệu quả, tăng tỷ lệ chuyển đổi lên 35-50%.

Sử dụng thông báo tạm thời trên iOS

Chủ động yêu cầu Thông báo tạm thời trên iOS cho phép gửi thông báo mà không cần sự đồng ý rõ ràng của người dùng. Nếu người dùng thấy giá trị trong các thông báo này, họ có thể bật thông báo đầy đủ thông qua menu ngữ cảnh của thông báo. Apple khuyến nghị cách tiếp cận này cho các ứng dụng tin tức, ứng dụng thời tiết và các dịch vụ khác nơi thông báo mang tính thông tin hơn là giao dịch. Theo Apple WWDC 2024, cách tiếp cận này làm tăng tỷ lệ chấp thuận đầy đủ lên 20-30%.

Câu hỏi thường gặp

Phải làm gì nếu người dùng từ chối Notification Permission?

Sau khi từ chối, hộp thoại hệ thống không hiển thị lại. Cách duy nhất để bật thông báo là chuyển hướng người dùng đến cài đặt hệ thống thông qua Intent(Settings.ACTION_APPLICATION_DETAILS_SETTINGS) trên Android hoặc UIApplication.openSettingsURLString trên iOS. Hiển thị một màn hình có hướng dẫn và nút để tiếp tục.

Notification Permission hoạt động như thế nào trên Android 12 trở xuống?

Trên Android 12 trở xuống, không yêu cầu Notification Permission — tất cả ứng dụng đều có thể gửi thông báo mà không cần yêu cầu. Tuy nhiên, người dùng có thể tắt thông báo bất kỳ lúc nào thông qua cài đặt hệ thống. Bắt đầu từ Android 13, yêu cầu thời gian chạy là bắt buộc đối với targetSdkVersion 33+.

Kênh thông báo trên Android là gì?

NotificationChannel là một danh mục thông báo được giới thiệu trong Android 8.0. Mỗi kênh có tên, mô tả, mức độ quan trọng và nhóm. Người dùng có thể tắt các kênh riêng lẻ mà không cần tắt tất cả thông báo của ứng dụng. Ví dụ: kênh “Tin nhắn mới” và kênh “Bản tin quảng cáo” có thể được cấu hình khác nhau.

Có thể gửi thông báo mà không có Notification Permission không?

Trên Android 13+, nếu không có POST_NOTIFICATIONS, mọi lệnh gọi NotificationManager.notify sẽ bị hệ thống bỏ qua. Trên iOS, nếu không có quyền UNUserNotificationCenter, thông báo sẽ không được gửi. Ngoại lệ: Provisional trên iOS (không âm thanh, chỉ trong Trung tâm thông báo) và Android 12- (không cần quyền).

Làm thế nào để kiểm tra xem thông báo có được bật cho ứng dụng không?

Trên Android, sử dụng NotificationManagerCompat.areNotificationsEnabled(). Trên iOS, gọi UNUserNotificationCenter.current().getNotificationSettings và kiểm tra thuộc tính authorizationStatus. Đối với Android, bổ sung kiểm tra mức độ quan trọng của kênh: NotificationChannel.getImportance() không được là IMPORTANCE_NONE.

Tổng kết

  • Notification Permission là quyền thời gian chạy bắt buộc để gửi thông báo trên Android 13+ và iOS 12+.
  • Android 13 đã giới thiệu POST_NOTIFICATIONS với yêu cầu thời gian chạy; đối với Android 12 trở xuống, quyền là tự động.
  • iOS sử dụng UNUserNotificationCenter với hỗ trợ thông báo tạm thời để gửi im lặng mà không cần đồng ý.
  • Lời nhắc sau giá trị — yêu cầu sau hành động có giá trị đầu tiên của người dùng làm tăng tỷ lệ chấp thuận lên 75%.
  • Màn hình trước khi cấp quyền với ví dụ thông báo làm tăng tỷ lệ chuyển đổi lên 35-50% theo nghiên cứu ngành.
  • Thông báo tạm thời trên iOS cho phép chứng minh giá trị của thông báo trước khi yêu cầu quyền đầy đủ.
  • Kênh thông báo trên Android cho người dùng kiểm soát chi tiết đối với các loại thông báo họ nhận được.

Chúng tôi sẽ phát triển ứng dụng di động chìa khóa trao tay

IT Sectr tạo các ứng dụng iOS và Android cho các công ty khởi nghiệp và doanh nghiệp từ năm 2017. Chúng tôi sẽ tư vấn và đề xuất giải pháp tốt nhất cho bạn.

Thảo luận dự án

Đọc thêm