1. AndroidManifest.xml 수정
[경로] app.manifests.AndroidManifest.xml
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools">
<!-- (필수) Android 13 이상부터 필수로 알림을 사용자에게 보여주려면 권한 요청이 필요하다. 해당 퍼미션이 없을 경우 푸시 알림이 와도 상단에 표시되지 않는다. -->
<uses-permission android:name="android.permission.POST_NOTIFICATIONS" />
<application
android:allowBackup="true"
android:dataExtractionRules="@xml/data_extraction_rules"
android:fullBackupContent="@xml/backup_rules"
android:icon="@mipmap/ic_launcher"
android:label="@string/app_name"
android:roundIcon="@mipmap/ic_launcher_round"
android:supportsRtl="true"
android:theme="@style/Theme.STOCK"
tools:targetApi="31">
<activity
android:name=".MainActivity"
android:exported="true"
android:label="@string/app_name">
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
</application>
</manifest>
2. MyPushNotificationService.kt
[경로] com.project.project_name.service.MyPushNotificationService.kt
class MyPushNotificationService(private val context: Context) {
fun sendPushNotification(title: String, body: String) {
val notificationManager = context.getSystemService(Context.NOTIFICATION_SERVICE) as NotificationManager
if(Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) {
val channel = NotificationChannel(
"default_channel", // Channel ID
"Default Channel", // Channel NAME
NotificationManager.IMPORTANCE_DEFAULT
)
notificationManager.createNotificationChannel(channel)
}
val notification = NotificationCompat.Builder(context, "default_channel")
.setContentTitle(title) // 알림 제목
.setContentText(body) // 알림 본문
.setSmallIcon(R.drawable.ic_notifications_black_24dp) // 알림 아이콘
.setAutoCancel(true) // 클릭 시 자동으로 알림 제거
.build()
notificationManager.notify(0, notification)
}
}
3. MotificationPermissionHelper.kt
[경로] com.project.project_name.util.NotificationPermissionHelper.kt
object NotificationPermissionHelper {
fun requestNotificationPermission(activity : Activity) {
if(Build.VERSION.SDK_INT >= Build.VERSION_CODES.TIRAMISU) {
val permission = Manifest.permission.POST_NOTIFICATIONS
val granted = ContextCompat.checkSelfPermission(activity, permission) == PackageManager.PERMISSION_GRANTED
if(!granted) {
ActivityCompat.requestPermissions(activity, arrayOf(permission), 1001)
}
}
}
}
4. MainActivity.kt
[경로] com.project.project_name.MainActivity.kt
class MainActivity : AppCompatActivity() {
private lateinit var binding: ActivityMainBinding
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
binding = ActivityMainBinding.inflate(layoutInflater)
setContentView(binding.root)
val navController = findNavController(R.id.nav_host_fragment_activity_main)
val navView : BottomNavigationView = binding.navView
navView.setupWithNavController(navController)
// 알림 권한 요청
NotificationPermissionHelper.requestNotificationPermission(this)
// 로컬 푸시 알림 로직
val pushNotificationService = MyPushNotificationService(this)
pushNotificationService.sendPushNotification("푸시 알림 테스트입니다.", "본문 내용")
}
}
'Android' 카테고리의 다른 글
[Android] Firebase 푸시 알림 테스트(2) - API 생성 및 푸시 알림 테스트 (3) | 2025.05.20 |
---|---|
[Android] Firebase 푸시 알림 테스트(1) - 세팅 및 Client 소스코드 작성 (1) | 2025.05.20 |