IVS Chat Client Messaging Android SDK 사용
이 문서에서는 Amazon IVS Chat Client Messaging Android SDK 사용과 관련된 단계를 안내합니다.
채팅 룸 인스턴스 초기화
ChatRoom
클래스의 인스턴스를 만듭니다. 채팅 룸이 호스팅된 AWS 리전인 regionOrUrl
, 그리고 이전 단계에서 생성된 토큰 가져오기 메서드인 tokenProvider
의 전달이 필요합니다.
val room = ChatRoom( regionOrUrl = "us-west-2", tokenProvider = ::fetchChatToken )
다음으로 채팅 관련 이벤트의 핸들러를 구현할 리스너 객체를 만들고, 이를 room.listener
속성에 할당합니다.
private val roomListener = object : ChatRoomListener { override fun onConnecting(room: ChatRoom) { // Called when room is establishing the initial connection or reestablishing connection after socket failure/token expiration/etc } override fun onConnected(room: ChatRoom) { // Called when connection has been established } override fun onDisconnected(room: ChatRoom, reason: DisconnectReason) { // Called when a room has been disconnected } override fun onMessageReceived(room: ChatRoom, message: ChatMessage) { // Called when chat message has been received } override fun onEventReceived(room: ChatRoom, event: ChatEvent) { // Called when chat event has been received } override fun onDeleteMessage(room: ChatRoom, event: DeleteMessageEvent) { // Called when DELETE_MESSAGE event has been received } } val room = ChatRoom( region = "us-west-2", tokenProvider = ::fetchChatToken ) room.listener = roomListener // <- add this line // ...
기본 초기화의 마지막 단계는 WebSocket 연결을 설정하여 특정 룸에 연결하는 것입니다. 이를 위해 룸 인스턴스 내에서 connect()
메서드를 호출합니다. 앱이 백그라운드에서 재개되는 경우에도 연결이 유지되도록 onResume()
수명 주기 메서드에서 이를 수행하는 것이 좋습니다.
room.connect()
SDK는 서버에서 받은 채팅 토큰으로 인코딩된 채팅 룸과의 연결을 설정하려고 시도합니다. 실패하면 룸 인스턴스에 지정된 횟수만큼 다시 연결을 시도합니다.
채팅 룸에서 작업 수행
ChatRoom
클래스에는 메시지를 보내고 삭제하고 다른 사용자의 연결을 끊는 작업이 있습니다. 이러한 작업은 요청 확인 또는 거부 알림을 받을 수 있는 선택적 콜백 파라미터를 허용합니다.
메시지 전송
이 요청의 경우 채팅 토큰에 SEND_MESSAGE
기능이 인코딩되어 있어야 합니다.
메시지 전송 요청 트리거:
val request = SendMessageRequest("Test Echo") room.sendMessage(request)
요청의 확인/거부를 받으려면 콜백을 두 번째 파라미터로 제공:
room.sendMessage(request, object : SendMessageCallback { override fun onConfirmed(request: SendMessageRequest, response: ChatMessage) { // Message was successfully sent to the chat room. } override fun onRejected(request: SendMessageRequest, error: ChatError) { // Send-message request was rejected. Inspect the `error` parameter for details. } })
메시지 삭제
이 요청의 경우 채팅 토큰에 DELETE_MESSAGE 기능이 인코딩되어 있어야 합니다.
메시지 삭제 요청 트리거:
val request = DeleteMessageRequest(messageId, "Some delete reason") room.deleteMessage(request)
요청의 확인/거부를 받으려면 콜백을 두 번째 파라미터로 제공:
room.deleteMessage(request, object : DeleteMessageCallback { override fun onConfirmed(request: DeleteMessageRequest, response: DeleteMessageEvent) { // Message was successfully deleted from the chat room. } override fun onRejected(request: DeleteMessageRequest, error: ChatError) { // Delete-message request was rejected. Inspect the `error` parameter for details. } })
다른 사용자 연결 해제
이 요청의 경우 채팅 토큰에 DISCONNECT_USER
기능이 인코딩되어 있어야 합니다.
조정 목적으로 다른 사용자의 연결 해제:
val request = DisconnectUserRequest(userId, "Reason for disconnecting user") room.disconnectUser(request)
요청의 확인/거부를 받으려면 콜백을 두 번째 파라미터로 제공:
room.disconnectUser(request, object : DisconnectUserCallback { override fun onConfirmed(request: SendMessageRequest, response: ChatMessage) { // User was disconnected from the chat room. } override fun onRejected(request: SendMessageRequest, error: ChatError) { // Disconnect-user request was rejected. Inspect the `error` parameter for details. } })
채팅 룸 연결 해제
채팅 룸과의 연결을 해제하려면 룸 인스턴스에서 disconnect()
메서드를 호출합니다.
room.disconnect()
애플리케이션이 백그라운드 상태일 때 잠시 후 WebSocket 연결의 작동이 중지되므로 백그라운드 상태로 또는 백그라운드 상태에서 전환할 때 수동으로 연결하거나 연결을 해제하는 것이 좋습니다. 이를 위해 Android room.connect()
또는 onResume()
에서 Activity
수명 주기 메서드의 Fragment
호출과 room.disconnect()
수명 주기 메서드의 onPause()
호출을 일치시킵니다.