Since Android 13 (API 33), apps must ask the user for the POST_NOTIFICATIONS runtime permission before showing notifications. On older versions the permission is granted automatically.
The Pulsate SDK already declares the permission in its manifest:
<uses-permission android:name="android.permission.POST_NOTIFICATIONS" />
Requesting the permission
Use the Activity Result API:
class MainFragment : Fragment() {
private val requestPermissions =
registerForActivityResult(ActivityResultContracts.RequestMultiplePermissions()) { results ->
// results[Manifest.permission.POST_NOTIFICATIONS] == true when granted
}
private fun checkAndRequestPushPermission() {
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.TIRAMISU) {
val granted = ContextCompat.checkSelfPermission(
requireContext(),
Manifest.permission.POST_NOTIFICATIONS,
) == PackageManager.PERMISSION_GRANTED
if (!granted) {
requestPermissions.launch(arrayOf(Manifest.permission.POST_NOTIFICATIONS))
}
}
}
}
Improving opt-in rates
You get one automatic system prompt — make it count:
- Prime first. Show a short screen explaining why notifications are useful before triggering the system dialog. Google may also ask for a priming screen during app review.
- Ask in context. Request the permission when the user reaches a feature that benefits from it (order updates, new-message alerts), not on first launch.
- Ask incrementally. Request permissions one at a time as features become relevant.
- Remind strategically. If the user declines, wait several days or sessions before showing your own reminder that links to system settings.
- Ride positive moments. Ask right after a success — completed purchase, earned reward, finished onboarding.
- Explain data handling. Users grant more when they understand what you do (and don't do) with the channel.

