1. Single ( 한번 받기 )
예제 : FirebaseMessage의 token 받기
기본
var token : String
fun getInstanceId(){
Firebase.messaging.token
.addOnCompleteListener {
token = it.result
}
}
이렇게 하면 함수형이 아니게 된다.
그래서 Single.create로 변환
override fun getInstanceId(): Single<String> {
return Single.create { emitter ->
Firebase.messaging.token
.addOnCompleteListener { task ->
when (task.isSuccessful) {
true -> task.result?.let {
emitter.onSuccess(it)
}
false -> task.exception?.let {
emitter.onError(it)
}
}
}
}
}
2. Flowable (구독하는 방식)
예제 : Sendbird addChannelHandler
기본
var unreadMessageCount : Int
fun getUnreadMessageCount(){
SendBird.addChannelHandler(identifier, object : SendBird.ChannelHandler() {
override fun onMessageReceived(channel: BaseChannel, message: BaseMessage) {
val groupChannel = channel as GroupChannel
unreadMessageCount = groupChannel.unreadMessageCount
}
})
}
Flowable.create 로 변경
fun subscribeTotalUnreadMessageCount(): Flowable<Int> {
return Flowable.create({ emitter ->
SendBird.addChannelHandler(identifier, object : SendBird.ChannelHandler() {
override fun onMessageReceived(channel: BaseChannel, message: BaseMessage) {
val groupChannel = channel as GroupChannel
emitter.onNext(groupChannel.unreadMessageCount)
}
})
}, BackpressureStrategy.LATEST)
}
센드버드에서 메시지가 업데이트 됐을때에만 해당 값을 받을 수 있다.
처음부터 앱을 로그인할때 구독해서 받기 위해선
fun subscribeTotalUnreadMessageCount(): Flowable<Int> {
return Flowable.create({ emitter ->
//처음에 시작할때 값을 받기 위해서 해당 부분 추가
SendBird.getTotalUnreadMessageCount { totalUnreadMessageCount, exception ->
if (exception != null) {
emitter.onError(exception)
} else if (!emitter.isCancelled) {
emitter.onNext(totalUnreadMessageCount)
}
}
SendBird.addChannelHandler(identifier, object : SendBird.ChannelHandler() {
override fun onMessageReceived(channel: BaseChannel, message: BaseMessage) {
val groupChannel = channel as GroupChannel
emitter.onNext(groupChannel.unreadMessageCount)
}
})
}, BackpressureStrategy.LATEST)
}
Single 형태의 getTotalUnreadMessageCount 를 추가해준다.
'Android' 카테고리의 다른 글
TroubleShooting With AppbarLayout expand (0) | 2021.06.06 |
---|---|
상품리스트 - 좋아요 - 툴팁 - 트러블 슈팅 (0) | 2021.06.05 |
웹뷰 스크롤 전파 (0) | 2021.04.03 |
Map vs FlatMap (0) | 2021.04.01 |
Data class + DiffUtil 이슈 (0) | 2021.03.25 |