매칭완료후->Notification 뜨지않는 오류 문제..
745
작성한 질문수 3
안녕하세요. 개복치님. 수고 많으십니다.
소개팅 앱 수강 중, 매칭 완료 후, 오른쪽 슬라이드 넘겼을 시, 알람이 가상 핸드폰 화면에
뜨지 않는 오류가 아래와 같이 발생하여.. 문의드립니다.( Android Studio 최신버젼으로 수강 중이라 Version 오류로 그런건지.. 확인부탁드립니다. ㅠㅠ)

답변 4
0
혹시 notify(123, builder.build()) 이부분 오류 해결 하셨나요?
0
개복치님 추가로
Manifest 쪽에도 notifications 권한이 된상태입니다. 뭐가문제일까요..? ㅠㅠ
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools">
<uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="android.permission.POST_NOTIFICATIONS" />
0
개복치님!! 깃허브 사용하다가 도저히 안되서 아래와 같이 코드 복사하여 송부드립니다.
오류 확인 부탁드립니다. 맨 밑에 줄이 에러로 뜹니다.
오류 코드 : with(NotificationManagerCompat.from(this)){notify(123, builder.build())
package com.example.sogothing
import android.app.NotificationChannel
import android.app.NotificationManager
import android.content.Context
import android.content.Intent
import android.os.Build
import androidx.appcompat.app.AppCompatActivity
import android.os.Bundle
import android.util.Log
import android.view.View
import android.widget.ImageView
import android.widget.Toast
import androidx.core.app.NotificationCompat
import androidx.core.app.NotificationManagerCompat
import com.bumptech.glide.Glide
import com.example.sogothing.auth.IntroActivity
import com.example.sogothing.auth.UserDataModel
import com.example.sogothing.setting.SettingActivity
import com.example.sogothing.slider.CardStackAdapter
import com.example.sogothing.utils.FirebaseAuthUtils
import com.example.sogothing.utils.FirebaseRef
import com.google.firebase.auth.ktx.auth
import com.google.firebase.database.DataSnapshot
import com.google.firebase.database.DatabaseError
import com.google.firebase.database.ValueEventListener
import com.google.firebase.ktx.Firebase
import com.google.firebase.storage.ktx.storage
import com.yuyakaido.android.cardstackview.CardStackLayoutManager
import com.yuyakaido.android.cardstackview.CardStackListener
import com.yuyakaido.android.cardstackview.CardStackView
import com.yuyakaido.android.cardstackview.Direction
class MainActivity : AppCompatActivity() {
lateinit var cardStackAdapter: CardStackAdapter
lateinit var manager : CardStackLayoutManager
private val TAG = "MainActivity"
private val usersDataList = mutableListOf<UserDataModel>()
private var userCount = 0
private lateinit var currentUserGender : String
private val uid = FirebaseAuthUtils.getUid()
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_main)
// 나는 민수, 내가 좋아한 여자는 민지다
// 내가 민지를 좋아요 하면은, 민지의 좋아요 리스트중에서 내가 있는지만 확인하면 됨.
//
val setting = findViewById<ImageView>(R.id.settingIcon)
setting.setOnClickListener{
val intent = Intent(this, SettingActivity::class.java)
startActivity(intent)
}
val cardStackView = findViewById<CardStackView>(R.id.cardStackView)
manager = CardStackLayoutManager(baseContext,object : CardStackListener {
override fun onCardDragging(direction: Direction?, ratio: Float) {
}
override fun onCardSwiped(direction: Direction?) {
if(direction == Direction.Right) {
// Toast.makeText(this@MainActivity,"right", Toast.LENGTH_SHORT).show()
// Log.d(TAG,usersDataList[userCount].uid.toString())
userLikeOtherUser(uid,usersDataList[userCount].uid.toString())
}
if(direction == Direction.Left) {
// Toast.makeText(this@MainActivity,"left", Toast.LENGTH_SHORT).show()
}
userCount = userCount + 1
if(userCount == usersDataList.count()) {
getUserDataList(currentUserGender)
Toast.makeText(this@MainActivity,"유저 새롭게 받아옵니다", Toast.LENGTH_LONG).show()
}
}
override fun onCardRewound() {
}
override fun onCardCanceled() {
}
override fun onCardAppeared(view: View?, position: Int) {
}
override fun onCardDisappeared(view: View?, position: Int) {
}
})
cardStackAdapter = CardStackAdapter(baseContext,usersDataList)
cardStackView.layoutManager = manager
cardStackView.adapter = cardStackAdapter
// getUserDataList()
getMyUserData()
}
private fun getMyUserData(){
val postListener = object : ValueEventListener {
override fun onDataChange(dataSnapshot: DataSnapshot) {
Log.d(TAG,dataSnapshot.toString())
val data = dataSnapshot.getValue(UserDataModel::class.java)
Log.d(TAG,data?.gender.toString())
currentUserGender = data?.gender.toString()
getUserDataList(currentUserGender)
}
override fun onCancelled(databaseError: DatabaseError) {
// Getting Post failed, log a message
Log.w(TAG, "loadPost:onCancelled", databaseError.toException())
}
}
FirebaseRef.userInfoRef.child(uid).addValueEventListener(postListener)
}
private fun getUserDataList(currentUserGender : String){
val postListener = object : ValueEventListener {
override fun onDataChange(dataSnapshot: DataSnapshot) {
for (dataModel in dataSnapshot.children){
val user = dataModel.getValue(UserDataModel::class.java)
if(user!!.gender.toString().equals(currentUserGender)){
} else {
}
usersDataList.add(user!!)
}
cardStackAdapter.notifyDataSetChanged()
}
override fun onCancelled(databaseError: DatabaseError) {
// Getting Post failed, log a message
Log.w(TAG, "loadPost:onCancelled", databaseError.toException())
}
}
FirebaseRef.userInfoRef.addValueEventListener(postListener)
}
// 유저의 좋아요를 표시하는 부분
// 데이터에서 값을 저장해야 되는데, 어떤 값을 저장할까?
// 나의 uid, 내가 좋아요 한 사람의 uid 값
private fun userLikeOtherUser(myUid : String, otherUid : String){
FirebaseRef.userLikeRef.child(uid).child(otherUid).setValue("true")
getOtherUserLikeList(otherUid)
}
// 내가 좋아요한 사람이 누구를 좋아요 했는지 알 수 있음.
private fun getOtherUserLikeList(otherUid : String){
val postListener = object : ValueEventListener {
override fun onDataChange(dataSnapshot: DataSnapshot) {
// 여기 리스트안에서 나의 UID가 있는 지 확인만 해주면 됨.
// 내가 좋아요한 사람(응디)의 좋아요 리스트를 불러와서
// 여기서 내 UID가 있는 지 체크만 해주면 됨.
for (dataModel in dataSnapshot.children){
Log.e(TAG, dataModel.key.toString())
val likeUserKey = dataModel.key.toString()
if(likeUserKey.equals(uid)) {
Toast.makeText(this@MainActivity,"매칭완료",Toast.LENGTH_SHORT).show()
createNotificationChannel()
sendNotification()
}
}
}
override fun onCancelled(databaseError: DatabaseError) {
// Getting Post failed, log a message
Log.w(TAG, "loadPost:onCancelled", databaseError.toException())
}
}
FirebaseRef.userLikeRef.child(otherUid).addValueEventListener(postListener)
}
// Notification
private fun createNotificationChannel() {
// Create the NotificationChannel, but only on API 26+ because
// the NotificationChannel class is new and not in the support library
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) {
val name = "name"
val descriptionText = "description"
val importance = NotificationManager.IMPORTANCE_DEFAULT
val channel = NotificationChannel("Test_Channel", name, importance).apply {
description = descriptionText
}
// Register the channel with the system
val notificationManager: NotificationManager =
getSystemService(Context.NOTIFICATION_SERVICE) as NotificationManager
notificationManager.createNotificationChannel(channel)
}
}
private fun sendNotification(){
var builder = NotificationCompat.Builder(this, "Test_Channel")
.setSmallIcon(R.drawable.ic_launcher_background)
.setContentTitle("title")
.setContentText("content")
.setPriority(NotificationCompat.PRIORITY_DEFAULT)
with(NotificationManagerCompat.from(this)){
notify(123, builder.build())
}
}
}
0
안녕하세요
코드를 깃허브에 올리신 후 링크를 공유주시겠어요?
0
안녕하세요. 정말 죄송한데. 깃허브 사용법 보면서도 잘모르겠어서요.
with(NotificationManagerCompat.from(this)){
notify(123, builder.build())notfity(123, builder.build()) 여기서 빨간 줄그어지면서 에러가 나는거 같습니다.
package com.example.sogothing
import android.app.NotificationChannel
import android.app.NotificationManager
import android.content.Context
import android.content.Intent
import android.os.Build
import androidx.appcompat.app.AppCompatActivity
import android.os.Bundle
import android.util.Log
import android.view.View
import android.widget.ImageView
import android.widget.Toast
import androidx.core.app.NotificationCompat
import androidx.core.app.NotificationManagerCompat
import com.bumptech.glide.Glide
import com.example.sogothing.auth.IntroActivity
import com.example.sogothing.auth.UserDataModel
import com.example.sogothing.setting.SettingActivity
import com.example.sogothing.slider.CardStackAdapter
import com.example.sogothing.utils.FirebaseAuthUtils
import com.example.sogothing.utils.FirebaseRef
import com.google.firebase.auth.ktx.auth
import com.google.firebase.database.DataSnapshot
import com.google.firebase.database.DatabaseError
import com.google.firebase.database.ValueEventListener
import com.google.firebase.ktx.Firebase
import com.google.firebase.storage.ktx.storage
import com.yuyakaido.android.cardstackview.CardStackLayoutManager
import com.yuyakaido.android.cardstackview.CardStackListener
import com.yuyakaido.android.cardstackview.CardStackView
import com.yuyakaido.android.cardstackview.Direction
class MainActivity : AppCompatActivity() {
lateinit var cardStackAdapter: CardStackAdapter
lateinit var manager : CardStackLayoutManager
private val TAG = "MainActivity"
private val usersDataList = mutableListOf<UserDataModel>()
private var userCount = 0
private lateinit var currentUserGender : String
private val uid = FirebaseAuthUtils.getUid()
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_main)
// 나는 민수, 내가 좋아한 여자는 민지다
// 내가 민지를 좋아요 하면은, 민지의 좋아요 리스트중에서 내가 있는지만 확인하면 됨.
//
val setting = findViewById<ImageView>(R.id.settingIcon)
setting.setOnClickListener{
val intent = Intent(this, SettingActivity::class.java)
startActivity(intent)
}
val cardStackView = findViewById<CardStackView>(R.id.cardStackView)
manager = CardStackLayoutManager(baseContext,object : CardStackListener {
override fun onCardDragging(direction: Direction?, ratio: Float) {
}
override fun onCardSwiped(direction: Direction?) {
if(direction == Direction.Right) {
// Toast.makeText(this@MainActivity,"right", Toast.LENGTH_SHORT).show()
// Log.d(TAG,usersDataList[userCount].uid.toString())
userLikeOtherUser(uid,usersDataList[userCount].uid.toString())
}
if(direction == Direction.Left) {
// Toast.makeText(this@MainActivity,"left", Toast.LENGTH_SHORT).show()
}
userCount = userCount + 1
if(userCount == usersDataList.count()) {
getUserDataList(currentUserGender)
Toast.makeText(this@MainActivity,"유저 새롭게 받아옵니다", Toast.LENGTH_LONG).show()
}
}
override fun onCardRewound() {
}
override fun onCardCanceled() {
}
override fun onCardAppeared(view: View?, position: Int) {
}
override fun onCardDisappeared(view: View?, position: Int) {
}
})
cardStackAdapter = CardStackAdapter(baseContext,usersDataList)
cardStackView.layoutManager = manager
cardStackView.adapter = cardStackAdapter
// getUserDataList()
getMyUserData()
}
private fun getMyUserData(){
val postListener = object : ValueEventListener {
override fun onDataChange(dataSnapshot: DataSnapshot) {
Log.d(TAG,dataSnapshot.toString())
val data = dataSnapshot.getValue(UserDataModel::class.java)
Log.d(TAG,data?.gender.toString())
currentUserGender = data?.gender.toString()
getUserDataList(currentUserGender)
}
override fun onCancelled(databaseError: DatabaseError) {
// Getting Post failed, log a message
Log.w(TAG, "loadPost:onCancelled", databaseError.toException())
}
}
FirebaseRef.userInfoRef.child(uid).addValueEventListener(postListener)
}
private fun getUserDataList(currentUserGender : String){
val postListener = object : ValueEventListener {
override fun onDataChange(dataSnapshot: DataSnapshot) {
for (dataModel in dataSnapshot.children){
val user = dataModel.getValue(UserDataModel::class.java)
if(user!!.gender.toString().equals(currentUserGender)){
} else {
}
usersDataList.add(user!!)
}
cardStackAdapter.notifyDataSetChanged()
}
override fun onCancelled(databaseError: DatabaseError) {
// Getting Post failed, log a message
Log.w(TAG, "loadPost:onCancelled", databaseError.toException())
}
}
FirebaseRef.userInfoRef.addValueEventListener(postListener)
}
// 유저의 좋아요를 표시하는 부분
// 데이터에서 값을 저장해야 되는데, 어떤 값을 저장할까?
// 나의 uid, 내가 좋아요 한 사람의 uid 값
private fun userLikeOtherUser(myUid : String, otherUid : String){
FirebaseRef.userLikeRef.child(uid).child(otherUid).setValue("true")
getOtherUserLikeList(otherUid)
}
// 내가 좋아요한 사람이 누구를 좋아요 했는지 알 수 있음.
private fun getOtherUserLikeList(otherUid : String){
val postListener = object : ValueEventListener {
override fun onDataChange(dataSnapshot: DataSnapshot) {
// 여기 리스트안에서 나의 UID가 있는 지 확인만 해주면 됨.
// 내가 좋아요한 사람(응디)의 좋아요 리스트를 불러와서
// 여기서 내 UID가 있는 지 체크만 해주면 됨.
for (dataModel in dataSnapshot.children){
Log.e(TAG, dataModel.key.toString())
val likeUserKey = dataModel.key.toString()
if(likeUserKey.equals(uid)) {
Toast.makeText(this@MainActivity,"매칭완료",Toast.LENGTH_SHORT).show()
createNotificationChannel()
sendNotification()
}
}
}
override fun onCancelled(databaseError: DatabaseError) {
// Getting Post failed, log a message
Log.w(TAG, "loadPost:onCancelled", databaseError.toException())
}
}
FirebaseRef.userLikeRef.child(otherUid).addValueEventListener(postListener)
}
// Notification
private fun createNotificationChannel() {
// Create the NotificationChannel, but only on API 26+ because
// the NotificationChannel class is new and not in the support library
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) {
val name = "name"
val descriptionText = "description"
val importance = NotificationManager.IMPORTANCE_DEFAULT
val channel = NotificationChannel("Test_Channel", name, importance).apply {
description = descriptionText
}
// Register the channel with the system
val notificationManager: NotificationManager =
getSystemService(Context.NOTIFICATION_SERVICE) as NotificationManager
notificationManager.createNotificationChannel(channel)
}
}
private fun sendNotification(){
var builder = NotificationCompat.Builder(this, "Test_Channel")
.setSmallIcon(R.drawable.ic_launcher_background)
.setContentTitle("title")
.setContentText("content")
.setPriority(NotificationCompat.PRIORITY_DEFAULT)
with(NotificationManagerCompat.from(this)){
notify(123, builder.build())
}
}
}
CardStackView 라이브러리 추가에 실패합니다.
0
98
1
CardStackView
0
126
2
CardStackView 오류 정상적으로 구현이 되지 않습니다.
0
201
3
최신화 된 강의 요청합니다
0
162
2
auth.currentUser?.uid.toString() 가 null 이 나와요
0
194
1
혹시.. 지금 최신 환경 상, 강의 내용대로 진행이 안 되는 걸까요?
0
242
1
현시점에서 알려주신 방법대로 서버키를 받는것이 안되는것같습니다
0
261
2
3강 firebase 쓰기가 동작하질않아요
0
186
1
강사님 실시간으로 혹시 문의하는 방법은 없을까요??
0
185
1
해당 강의 들으시는 분들 중에 교육관련해서 서로 얘기 나누실 분 있으신가요??
0
158
1
강사님 FCM 단계 진행하면서 오류들이 너무 많이 발생합니다...
0
207
1
FCM 토큰 문의
0
215
1
강사님 FCM 단계에서 전체적으로 앱 문제가 발생해서 혹시 원격으로 조치 해주실 수 있나요?
0
232
1
토큰 정보 유저정보에 저장하기 강의 4분 12초 코드를 동일하게 입력했는데 적용이 잘 안되는 것 같아요.
0
398
3
토큰 받아와서 메세지 보내기 강의 2분 20초 로그캣 확인 하는 창이 다르고 토큰 값이 안떠요.
0
221
1
FCM 강의, firebaseservice 클래스 내 오류코드 해결방안이 궁금합니다.
0
274
2
FCM 강의 중간부터 코드 오류가 발생했는지 앱에서 회원가입을 해도 파이어베이스 Authentication에는 회원등록이 해도 화면이 넘어가지 않고 데이터도 저장이 안 되네요.
0
295
3
섹션 1 CardStackView의 Implement members 질문있습니다.
0
228
1
수업자료 다운로드 후 알집풀기에서 오류가 발생합니다.
0
466
3
Retrofit 사용해보기 강의 2:20 쯤에 작성된 복사된 코드는 어디서 받나요?
0
234
2
강의 FCM 소개 1:56에 디펜던시 추가하는게 최신버전으로 바뀐 듯합니다.
0
277
1
매칭이 되면 알람 띄우기 강의에서 오류문구 해결방안이 궁금합니다.
0
357
3
소스코드 다운이 불가능합니다..
0
145
1
나와 다른 성별의 유저 불러오기 강의에서 에뮬레이터에서 앱이 켜졌다가 바로 꺼져요.
0
459
11





