짧은 데이터 전송
LINE Planet은 통신 중에 피어에게 제한된 크기의 데이터("짧은 데이터")를 보낼 수 있는 API를 제공합니다. 이 페이지에서는 통화 중에 짧은 데이터를 보내고 받는 방법을 설명합니다.
| 지원 통화 유형 | 지원 SDK 버전 |
|---|---|
| 1대1 통화, 그룹 통화(컨퍼런스) | 모든 버전 |
공통 사항
통화 유형에 관계없이 짧은 데이터 전송에는 다음 사항이 적용됩니다.
크기 제한
짧은 데이터를 보내는 메서드는 데이터 자체와 함께 데이터 유형을 인자로 받습니다. 데이터 유형 및 데이터의 최대 크기는 다음과 같습니다.
- 데이터 유형: 100바이트(null 종료 문자 포함)
- 데이터: 800바이트
처리율 제한
초당 1회의 전송만 허용됩니다.
짧은 데이터 전송 결과 얻기
LINE Planet에서 여러 번 재시도한 후에도 데이터 전송이 실패하는 경우가 있습니다. 결과 핸들러 콜백을 사용하면 비동기적으로 데이터 전송 결과를 확인할 수 있습니다.
1대1 통화
1대1 통화에서는 다음과 같이 짧은 데이터를 보내고 받을 수 있습니다.
짧은 데이터 전송하기
통화 상대방에게 짧은 데이터를 전송하려면 PlanetKitCall의 sendShortData()를 사용하세요.
fun sendShortDataExample(call: PlanetKitCall, type: String, data: String) {
val byteArray = data.toByteArray(Charsets.UTF_8)
call.sendShortData(type, byteArray, object : PlanetKitSendShortDataResultCallback {
override fun onResult(isSuccess: Boolean, failReason: PlanetKitSendShortDataFailReason, userdata: Any?) {
if (isSuccess) {
Log.d(TAG, "sendShortData succeeded: type=$type, data=$data")
} else {
Log.e(TAG, "sendShortData failed: $failReason")
}
}
})
}
수신한 짧은 데이터 처리하기
상대방은 CallListener의 onShortDataReceived를 통해 짧은 데이터를 수신할 수 있습니다.
// Implement related callbacks of the CallListener interface
// MakeCallListener for caller and AcceptCallListener for callee
private val makeAcceptCallListener = object : MakeCallListener, AcceptCallListener {
...
override fun onShortDataReceived(call: PlanetKitCall, shortData: PlanetKitShortData) {
// This is called when short data is received from the peer.
val receivedData = String(shortData.data, Charsets.UTF_8)
Log.d(TAG, "Received short data: type=${shortData.type}, data=$receivedData")
// Write your own code here to handle the received data.
}
}
그룹 통화
그룹 통화에서는 특정 피어 또는 모든 피어에게 짧은 데이터를 보낼 수 있습니다.
특정 피어에게 짧은 데이터 전송하기
특정 피어에게 짧은 데이터를 전송하려면 PlanetKitConference의 sendShortData(PlanetKitUser, String, ByteArray, Any?, PlanetKitSendShortDataResultCallback?)를 사용하세요.
fun sendShortDataToSpecificPeerExample(conference: PlanetKitConference, targetUser: PlanetKitUser, type: String, data: String) {
val byteArray = data.toByteArray(Charsets.UTF_8)
conference.sendShortData(targetUser, type, byteArray, object : PlanetKitSendShortDataResultCallback {
override fun onResult(isSuccess: Boolean, failReason: PlanetKitSendShortDataFailReason, userdata: Any?) {
if (isSuccess) {
Log.d(TAG, "sendShortData to ${targetUser.serviceId}@${targetUser.userId} succeeded: type=$type, data=$data")
} else {
Log.e(TAG, "sendShortData failed: $failReason")
}
}
})
}
모든 피어에게 짧은 데이터 전송하기
모든 피어에게 짧은 데이터를 전송하려면 PlanetKitConference의 sendShortData(String, ByteArray, Any?, PlanetKitSendShortDataResultCallback?)를 사용하세요.
fun sendShortDataToAllPeersExample(conference: PlanetKitConference, type: String, data: String) {
val byteArray = data.toByteArray(Charsets.UTF_8)
conference.sendShortData(type, byteArray, object : PlanetKitSendShortDataResultCallback {
override fun onResult(isSuccess: Boolean, failReason: PlanetKitSendShortDataFailReason, userdata: Any?) {
if (isSuccess) {
Log.d(TAG, "sendShortData to all peers succeeded: type=$type, data=$data")
} else {
Log.e(TAG, "sendShortData failed: $failReason")
}
}
})
}
수신한 짧은 데이터 처리하기
피어는 ConferenceListener의 onShortDataReceived를 통해 짧은 데이터를 수신할 수 있습니다.
// Implement related callbacks of the ConferenceListener interface
private val conferenceListener = object : ConferenceListener {
...
override fun onShortDataReceived(conference: PlanetKitConference, sender: PlanetKitUser, shortData: PlanetKitShortData) {
// This is called when short data is received from a peer in the conference.
val receivedData = String(shortData.data, Charsets.UTF_8)
Log.d(TAG, "Received short data from ${sender.serviceId}@${sender.userId}: type=${shortData.type}, data=$receivedData")
// Write your own code here to handle the received data.
}
}
짧은 데이터 전송 실패 이유
결과 핸들러 콜백으로 전달되는 PlanetKitSendShortDataFailReason 열거형을 통해 짧은 데이터 전송 결과와 실패 이유를 확인할 수 있습니다. 가능한 실패 이유는 다음과 같습니다.
| 값 | 설명 |
|---|---|
NONE | 짧은 데이터가 성공적으로 전송되었습니다. |
INVALID_PARAMETER | 하나 이상의 입력 파라미터가 유효하지 않습니다(예: 데이터 크기가 0). |
TOO_LONG_DATA_TYPE | 데이터 타입이 허용된 최대 길이를 초과합니다(null 종료 문자 포함 100바이트 초과). |
TOO_LONG_DATA | 데이터 페이로드가 허용된 최대 크기를 초과합니다(800바이트 초과). |
TOO_FREQUENT | 짧은 데이터가 허용된 것보다 더 자주 전송되었습니다(처리율 제한 초과). 초당 1회의 전송만 허용됩니다. |
TIMEOUT | 타임아웃으로 인해 전송이 실패했습니다. |
관련 API
짧은 데이터 전송과 관련된 API는 다음과 같습니다.