티스토리 뷰

반응형

※ 지난 포스트와 연계된 내용입니다. 먼저 봐주세요 (_ _)




참조사이트 : EventBus 깃허브, EventBus 공식 홈페이지


저번 포스트에서 FCM을 통해 메시지를 받아 로그로 출력해 보았다.


이번 포스트는 GreenBot에서 만든 EventBus 라이브러리를 사용하여, 서비스에서 받은 메시지 정보(메시지 내용, 보낸 사람, 보낸 날짜)를 실시간으로 메인 액티비티에 출력해 보겠다.


굳이 EventBus 라이브러리를 사용하지 않고 브로드캐스트나, 바운드 서비스를 사용하여 비동기로 메시지를 출력하는 방법이야 많다.


그러나, EventBus 라이브러리를 사용하는 이유는 코드의 간결성과 메시지 전달의 안정성과 신속성 때문이라고 한다.


음...그렇다.. 이번 포스트는 EventBus 사용법을 적기 위한 포스팅이다.

(RX-ANDROID 쓰면 쓰지 않을 라이브러리...)





1. GreenRobot에서 만든 EventBus 라이브러리란?


컴포넌트 간에 비동기적 통신을 가능하게 끔 하는 라이브러리이다. 라이브러리의 크기가 매우 작으며(심플함), 다른 이벤트 버스 라이브러리보다 최적화가 잘 되어있다.


어노테이션 기반이며, UI 백그라운드 스레드에서 수행이 잘 된다고 한다. 


기존의 이벤트 버스인 Jake wharton(Square 사)가 만든 Otto 라이브러리가 있지만, 2015년 이후로 지원이 끊겼다고 한다.






2. 의존성 추가


implementation 'org.greenrobot:eventbus:3.1.1'





3. 전달할 객체들을 담을 클래스 생성


EventBus는 POJO 방식을 따른다.


따라서, 먼저 메시지 객체에 들어갈 정보들을 담을 빈 클래스(생성자 + getter)를 생성한다.


public class Message_package {
private String notification_body;
private String sender;
private String contents;

public Message_package(String notification_body, String sender, String contents) {
this.notification_body = notification_body;
this.sender = sender;
this.contents = contents;
}

public String getNotification_body() {
return notification_body;
}

public String getSender() {
return sender;
}

public String getContents() {
return contents;
}
}





4. 메시지를 전달 할 클래스에서, Message_package 객체를 생성하고 post로 보냄


public class Firebase_Messaging extends FirebaseMessagingService {
public Firebase_Messaging() {
}

@Override
public void onMessageReceived(RemoteMessage remoteMessage) {
super.onMessageReceived(remoteMessage);
String sender_id, contents, noti_body;
noti_body = remoteMessage.getNotification().getBody();
sender_id = remoteMessage.getData().get("sender");
contents = remoteMessage.getData().get("contents");
EventBus.getDefault().post(new Message_package(noti_body, sender_id, contents)); // 만들어진 객체를 post메소드를 통해 보냄
}
}






5. 메시지를 받을 클래스의 구성 + 어노테이션의 등록 및 EventBus 등록과 해제


우선, 레이아웃은 보낸 사람, 메시지 내용, 메시지를 받은 시간으로 간단하게 구성하였다.




public class MainActivity extends AppCompatActivity {
public TextView sender_txt, contents_txt, noti_body_txt;

@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
ButterKnife.bind(this);
sender_txt = findViewById(R.id.sender);
contents_txt = findViewById(R.id.contents);
noti_body_txt = findViewById(R.id.notification_body);
}

@Override
protected void onResume() {
super.onResume();
EventBus.getDefault().register(this); // 이벤트 버스 등록
}

@Override
protected void onStop() {
super.onStop();
EventBus.getDefault().unregister(this); // 이벤트 버스 해제
}

@Subscribe(threadMode = ThreadMode.MAIN) // SubScribe 어노테이션 등록
public void MessageEvent(Message_package message_package) {
// 메시지를 받을 때 마다 이 콜백 메소드가 호출 됨
noti_body_txt.setText(message_package.getNotification_body());
sender_txt.setText(message_package.getSender());
contents_txt.setText(message_package.getContents());
}
}




6. 파이어베이스에서 메시지 전송 및 확인


4번의 내용대로 이번에는 맞춤 데이터(Dataset)를 사용하여 메시지를 전송해 보겠다.


파이어베이스 콘솔 -> 내 프로젝트  메시지 전송으로 들어가서 메시지 내용은 필수 사항이니 아무 내용이나 넣는다.


그리고, 고급 옵션을 클릭 후에 춤 데이터 란에 '키'는 4번의 내용대로 sender와 contents 2개를 넣고, '값'도 2개 넣는다.


메시지를 보내면 실시간으로 텍스트 내용이 바뀌는 것을 확인할 수 있을 것이다.



이렇게 뜨면 성공.

반응형
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
TAG
more
«   2024/04   »
1 2 3 4 5 6
7 8 9 10 11 12 13
14 15 16 17 18 19 20
21 22 23 24 25 26 27
28 29 30
글 보관함