프로젝트

[Android Studio] 파이어베이스를 활용한 키워드 구독 / FCM (Firebase Cloud Messaging)

gom1n 2021. 7. 15. 16:01

내가 구현하고자 하는 것

: 사용자의 키워드 등록 -> 파이어베이스에 키워드 데이터 저장

: FCM을 이용해 사용자에게 푸시알람 기능 구현

 

 

1. 파이어베이스에 키워드 등록

간단하다. 

private FirebaseDatabase mDatabase;
private DatabaseReference mReference;

mReference = mDatabase.getReference("waang/취업키워드");

//등록버튼 클릭 - Oncreate 안에 넣는다.
addkw.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
if(count > 10)
Toast.makeText(Employ.this, "키워드 등록은 10개까지만 가능합니다.", Toast.LENGTH_LONG).show();
else if(count > -1){
String kw = kwinput.getText().toString();
mReference.child(kw).setValue(kw);
// 키워드 구독 - 푸시알림
FirebaseMessaging.getInstance().subscribeToTopic(kw);
}
}
});

등록 버튼을 누르면, 키워드가 파이어베이스에 들어가는 것이다. 10개 제한을 걸어두었다.

 

파이어베이스에 데이터를 넣는 방식에는 두가지가 있다.

1) push() 함수 이용 - 데이터마다 문자열로 이루어진 Token값이 생성되며, 중복값 삽입이 가능하다.

2) setValue() 를 이용 - Token 없이 깔끔한 key값으로 삽입되지만, 중복값 삽입이 불가능하며, 기존값에서 수정이 된다.

mReference.child(kw).setValue(kw);

setValue()를 이용하였다.

 

 

2. 키워드 구독 후 푸시알람

키워드 알람기능에 많은 고민을 했다. 

키워드 등록을 아이디 토큰마다 생성해 하나하나 푸시알림을 보내려 하니 생각보다 복잡해질 것 같아서,

더 알아보니 Topic 구독 기능이 있었다. 아주 유용하다.

 

어떤 사용자가 Topic을 구독하고, 내가 FCM을 이용해 그 Topic을 구독한 사용자들에게 푸시알림을 보내는 방식이다.

코드는 아래와 같다.

 

 // 키워드 구독 - 푸시알림
 FirebaseMessaging.getInstance().subscribeToTopic(kw);
 // 키워드 구독 해제
 FirebaseMessaging.getInstance().unsubscribeFromTopic(kw);

 

 

3. FCM 이용

클라우드 메시징 알림 작성에 들어간다.

유의할 점: 2단계에서 '사용자 세그먼트'가 아닌 '주제'로 바꾸어, Topic을 써넣어준다.

이 주제를 구독한 사용자에게 푸시알림이 갈 것이다.

알림 올 때 이미지를 넣으려면 ... 돈을 내야 하는건가?

 

>> 결과

성공적으로 알람이 왔다. 솔직히 한번에는 안될 줄 알았는데 생각보다 잘된다.

저 알람을 클릭하면 앱으로 접속된다.

 

 


// 번외

파이어베이스의 데이터가 수정될 때마다 리스트뷰에 출력시키기!

꽤나 애를 먹었어서 기록해둔다.

리스트뷰 출력과 삭제 코드

 

파이어베이스 안의 데이터가 리스트뷰로 고대로 출력이 된다.

 

 

원리는 다음과 같다. 

데이터가 수정될 때, addValueEventListener 가 실행과 동시에 onDataChange 함수로 넘어가게 된다.

이 때, adapter.clear()로 일단 리스트뷰를 싸악 초기화 시켜준 뒤,

dataSnapShot을 이용해 파이어베이스 내의 데이터를 다시 리스트뷰에다 .add() 해주는 것이다.