🔔

Androidの通知権限取得・チャンネル作成

2024/06/23に公開

Androidで通知を送るには権限許可、チャンネル作成の必要があるがAndroid OSバージョンによって挙動が変わる。

確認環境

  • compileSdk = 34
  • targetSdk = 34
  • minSdk = 29

インストール後の状態

  • Android12以下
    • 通知設定は自動的オンにになる。
      ※ただし通知チャンネルを作成しないと通知は届かない。
  • Android13以上
    • デフォルトはオフ(明示的に付与する必要がある)
12以下 13以上

通知権限の付与

AndroidManifest

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

ユーザに権限許可を求める

  • Android13以上では権限をリクエストする必要がある
        private val permissionLauncher =
          registerForActivityResult(ActivityResultContracts.RequestPermission()) { isGranted ->
              Log.d("sample", "granted=$isGranted")
          }
            if(Build.VERSION.SDK_INT >= Build.VERSION_CODES.TIRAMISU
              && ContextCompat.checkSelfPermission(context, Manifest.permission.POST_NOTIFICATIONS) == PackageManager.PERMISSION_DENIED) {
              permissionLauncher.launch(Manifest.permission.POST_NOTIFICATIONS)
          }
    

チャンネルの作成

   val channel = NotificationChannel(ID, NAME, IMPORTANCE)
   channel.description = DESCRIPTION
   val notificationManager = context.getSystemService(NOTIFICATION_SERVICE) as NotificationManager
   notificationManager.createNotificationChannel(channel)
  • Android13以下

    • ユーザに権限許可を求めなくてOK、チャンネルを任意のタイミングで作成しておけば、アプリで通知を受け取れるようになる
  • チャンネル作成のタイミング

    • 必ずしも権限が許可されてからチャンネルを作る順番である必要はない
      例 : チャンネルを作っておく→ POST_NOTIFICATIONS が許可 → 通知権限がオンになると同時にチャンネルも設定画面に現れる

Discussion