https://todaycode.tistory.com/8
위의 사이트를 참고하여 제작하였습니다.
MyFirebaseMessagingService.kt
package com.example.twitchpush
import android.app.NotificationChannel
import android.app.NotificationManager
import android.app.PendingIntent
import android.content.Context
import android.content.Intent
import android.media.RingtoneManager
import android.os.Build
import android.util.Log
import androidx.core.app.NotificationCompat
import com.google.firebase.messaging.FirebaseMessagingService
import com.google.firebase.messaging.RemoteMessage
class MyFirebaseMessagingService : FirebaseMessagingService(){
private val TAG = "FirebaseService"
override fun onNewToken(token: String) {
val pref = this.getSharedPreferences("token", Context.MODE_PRIVATE)
val editor = pref.edit()
editor.putString("token",token).apply()
editor.commit()
}
override fun onMessageReceived(message: RemoteMessage) {
if(message.data.isNotEmpty()){
Log.i("바디 : ",message.data["body"].toString())
Log.i("타이틀 : ",message.data["title"].toString())
sendNotification(message)
}
}
private fun sendNotification(message: RemoteMessage){
val unId : Int = (System.currentTimeMillis() / 7).toInt()
val intent = Intent(this,MainActivity::class.java)
intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP)
val pendingIntent = PendingIntent.getActivity(this,unId,intent,PendingIntent.FLAG_ONE_SHOT)
// 체널이름
val channelId = getString(R.string.firebase_channel_id)
// 알림 소리
val soundUri= RingtoneManager.getDefaultUri(RingtoneManager.TYPE_NOTIFICATION)
// ui
val notificationBuilder = NotificationCompat.Builder(this,channelId)
.setSmallIcon(R.mipmap.ic_launcher)
.setContentTitle(message.data["body"].toString())
.setContentText(message.data["title"].toString())
.setAutoCancel(true)
.setSound(soundUri)
.setContentIntent(pendingIntent)
val notificationManager = getSystemService(Context.NOTIFICATION_SERVICE) as NotificationManager
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O){
val channel = NotificationChannel(channelId,"Notice",NotificationManager.IMPORTANCE_DEFAULT)
notificationManager.createNotificationChannel(channel)
}
// 알림 생성
notificationManager.notify(unId,notificationBuilder.build())
}
}
MainActivity.kt
package com.example.twitchpush
import android.content.ContentValues.TAG
import android.os.Bundle
import android.util.Log
import android.widget.Toast
import androidx.appcompat.app.AppCompatActivity
import androidx.appcompat.widget.AppCompatButton
import com.google.firebase.messaging.FirebaseMessaging
class MainActivity : AppCompatActivity() {
lateinit var wakOnBtn : AppCompatButton
lateinit var wakOffBtn : AppCompatButton
lateinit var ineOnBtn : AppCompatButton
lateinit var ineOffBtn : AppCompatButton
lateinit var goseguOnBtn : AppCompatButton
lateinit var goseguOffBtn : AppCompatButton
lateinit var burgerOnBtn : AppCompatButton
lateinit var burgerOffBtn : AppCompatButton
lateinit var cottonOnBtn : AppCompatButton
lateinit var cottonOffBtn : AppCompatButton
lateinit var viichanOnBtn : AppCompatButton
lateinit var viichanOffBtn : AppCompatButton
lateinit var lilpaOnBtn : AppCompatButton
lateinit var lilpaOffBtn : AppCompatButton
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_main)
wakOnBtn = findViewById(R.id.wak_on)
wakOffBtn = findViewById(R.id.wak_off)
ineOnBtn = findViewById(R.id.ine_on)
ineOffBtn = findViewById(R.id.ine_off)
goseguOnBtn = findViewById(R.id.gosegu_on)
goseguOffBtn = findViewById(R.id.gosegu_off)
burgerOnBtn = findViewById(R.id.burger_on)
burgerOffBtn = findViewById(R.id.burger_off)
cottonOnBtn = findViewById(R.id.cotton_on)
cottonOffBtn = findViewById(R.id.cotton_off)
viichanOnBtn = findViewById(R.id.viichan_on)
viichanOffBtn = findViewById(R.id.viichan_off)
lilpaOnBtn = findViewById(R.id.lilpa_on)
lilpaOffBtn = findViewById(R.id.lilpa_off)
ineOnBtn.setOnClickListener {
sub("ine")
}
ineOffBtn.setOnClickListener {
unsub("ine")
}
goseguOnBtn.setOnClickListener {
sub("gosegu")
}
goseguOnBtn.setOnClickListener {
unsub("gosegu")
}
burgerOnBtn.setOnClickListener {
sub("burger")
}
burgerOffBtn.setOnClickListener {
unsub("burger")
}
cottonOnBtn.setOnClickListener {
sub("cotton")
}
cottonOffBtn.setOnClickListener {
unsub("cotton")
}
viichanOnBtn.setOnClickListener {
sub("viichan")
}
viichanOffBtn.setOnClickListener {
unsub("viichan")
}
lilpaOnBtn.setOnClickListener {
sub("lilpa")
}
lilpaOffBtn.setOnClickListener {
unsub("lilpa")
}
wakOnBtn.setOnClickListener {
sub("wak")
}
wakOffBtn.setOnClickListener {
unsub("wak")
}
}
fun sub(topic:String){
FirebaseMessaging.getInstance().subscribeToTopic(topic)
.addOnCompleteListener { task ->
if (task.isSuccessful) {
// 구독 요청 성공
val token = task.getResult()
Log.d(TAG, "token : $token")
Toast.makeText(this,"알림 설정 완료",Toast.LENGTH_SHORT).show()
} else {
// 구독 요청 실패
Toast.makeText(this,"알림 설정 실패",Toast.LENGTH_SHORT).show()
}
}
}
fun unsub(topic:String){
FirebaseMessaging.getInstance().unsubscribeFromTopic(topic)
.addOnCompleteListener { task ->
if (task.isSuccessful) {
// 구독 해제 요청 성공
Toast.makeText(this,"알림 해제 성공",Toast.LENGTH_SHORT).show()
} else {
// 구독 해제 요청 실패
Toast.makeText(this,"알림 해제 실패",Toast.LENGTH_SHORT).show()
}
}
}
}
activity_main.xml
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical"
tools:context=".MainActivity">
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="horizontal">
<androidx.appcompat.widget.AppCompatButton
android:id="@+id/wak_on"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_weight="1"
android:text="우왁굳 알림 설정" />
<androidx.appcompat.widget.AppCompatButton
android:id="@+id/wak_off"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_weight="1"
android:text="우왁굳 알림 취소" />
</LinearLayout>
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="horizontal">
<androidx.appcompat.widget.AppCompatButton
android:id="@+id/viichan_on"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_weight="1"
android:text="비챤 알림 설정" />
<androidx.appcompat.widget.AppCompatButton
android:id="@+id/viichan_off"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_weight="1"
android:text="비챤 알림 취소" />
</LinearLayout>
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="horizontal">
<androidx.appcompat.widget.AppCompatButton
android:id="@+id/ine_on"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_weight="1"
android:text="아이네 알림 설정" />
<androidx.appcompat.widget.AppCompatButton
android:id="@+id/ine_off"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_weight="1"
android:text="아이네 알림 취소" />
</LinearLayout>
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="horizontal">
<androidx.appcompat.widget.AppCompatButton
android:id="@+id/gosegu_on"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_weight="1"
android:text="고세구 알림 설정" />
<androidx.appcompat.widget.AppCompatButton
android:id="@+id/gosegu_off"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_weight="1"
android:text="고세구 알림 취소" />
</LinearLayout>
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="horizontal">
<androidx.appcompat.widget.AppCompatButton
android:id="@+id/cotton_on"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_weight="1"
android:text="주르르 알림 설정" />
<androidx.appcompat.widget.AppCompatButton
android:id="@+id/cotton_off"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_weight="1"
android:text="주르르 알림 취소" />
</LinearLayout>
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="horizontal">
<androidx.appcompat.widget.AppCompatButton
android:id="@+id/burger_on"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_weight="1"
android:text="징버거 알림 설정" />
<androidx.appcompat.widget.AppCompatButton
android:id="@+id/burger_off"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_weight="1"
android:text="징버거 알림 취소" />
</LinearLayout>
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content">
<androidx.appcompat.widget.AppCompatButton
android:id="@+id/lilpa_on"
android:layout_weight="1"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="릴파 알림 설정" />
<androidx.appcompat.widget.AppCompatButton
android:id="@+id/lilpa_off"
android:layout_weight="1"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="릴파 알림 취소" />
</LinearLayout>
</LinearLayout>
결과 화면
'안드로이드 > 트위치 알람앱 만들기' 카테고리의 다른 글
PART 4 - [linux screen] (0) | 2022.07.18 |
---|---|
PART 3 - PYTHON 파일을 AZURE에 올리기 (0) | 2022.07.18 |
PART 1 - 트위치 API [트위치 방송 알림] (0) | 2022.07.15 |