3. 사용자 인증하기
startLivePlayer() 에 사용자 토큰을 넘기면 회원으로, 넘기지 않으면 게스트로 시청합니다. 게스트도 SDK 가 임시 계정을 자동 발급받지만, 채팅 참여 여부는 방송 설정이 정하고 회원 전용 기능은 제한됩니다.
게스트와 회원, 두 가지 상태
인증은 토큰을 넘기는지 여부 하나로 갈립니다.
토큰을 넘기지 않으면 게스트 모드로 실행되며, 회원 전용 기능만 제한됩니다.
| 게스트 | 회원실제 서비스 권장 | |
|---|---|---|
| 호출 | token 을 넘기지 않음(또는 null) |
token = "발급받은 사용자 토큰" |
| 계정 | SDK 가 임시 계정을 자동 발급 | 자사 회원 계정 |
| 닉네임 | GUEST + 10자리 난수(설정에 따라 시청자가 직접 입력) |
토큰 발급 시 지정한 닉네임 |
| 회원 구분값 | memberType: "0" (비회원) |
memberType: "1" (회원) |
| 채팅 | 방송 설정에 따라 갈립니다 게스트 참여를 허용하면 닉네임을 입력받아 채팅 허용하지 않으면 로그인 안내가 뜨고 onLoginRequest 가 호출됩니다플레이어는 닫히지 않습니다 |
바로 가능 |
| 회원 전용 기능 | 제한 — 찜한 상품 등 memberType 이 회원일 때만 노출되는 기능이 있습니다 |
전체 사용 |
| 준비물 | 없음 | 토큰 발급 경로 1개 (아래) |
📘 게스트 모드 우선 확인 — 토큰 없이 플레이어 실행을 확인한 뒤 회원 연동을 붙이면, 문제가 생겼을 때 원인이 인증인지 아닌지 구분됩니다.
게스트 계정 자동 발급
토큰을 넘기지 않으면 SDK 가 임시 계정을 서버에서 발급받아 사용합니다.
발급된 토큰은 기기에 저장되어 다음 실행에 재사용됩니다.
-
1토큰을 넘기지 않은 상태로 플레이어를 실행하면, 기기에 저장된 게스트 토큰이 있는지 확인합니다.
-
2없으면
GUEST+ 10자리 난수 닉네임으로 임시 계정을 발급받습니다. -
3발급된 토큰을 기기에 저장합니다. 다음 실행에서는 같은 게스트로 인식됩니다.
회원으로 연결하기
앞 단계에서 null 로 두었던 token 자리에 발급받은 토큰을 넣습니다.
Kotlin
SauceClient.startLivePlayer( context = this, broadcastId = "라이브 ID", token = userAccessToken // 자사 로그인 사용자의 토큰 )
토큰 발급 위치
앱이 소스라이브에 직접 토큰을 요청하는 방법은 제공되지 않습니다.
자사 백엔드가 토큰을 만들어 앱에 내려 주는 구조가 유일한 경로입니다.
-
1사용자가 앱에 로그인하면 자사 서버가 회원을 확인합니다.
-
2자사 서버가 소스라이브 규격으로 토큰을 만들어 앱에 응답합니다.
닉네임·회원 식별자·회원 구분 같은 정보를 토큰 안에 담습니다. -
3앱은 받은 토큰을
startLivePlayer()의token에 그대로 전달합니다.
앱의 역할은 전달까지입니다. 토큰을 해석하거나 가공하지 않습니다.
📘 비밀키가 서버에만 있어 안전합니다. 앱을 분석해도 토큰을 위조할 수 없습니다. 그래서 앱에서 직접 발급받는 경로를 두지 않습니다.
📘 토큰 생성 규격 — 서버에서 어떤 형식으로 만들어야 하는지는 JWT 토큰 생성 가이드에 정리되어 있습니다.
토큰 거부 시 동작
전달한 토큰이 유효하지 않으면 시청자에게 오류를 보여 주지 않고 게스트 계정으로 대체합니다.
플레이어는 정상적으로 재생되므로, 로그인했는데 게스트로 보이는 상황이 생길 수 있습니다.
| 증상 | 가장 흔한 원인 | 확인 방법 |
|---|---|---|
로그인했는데 닉네임이 GUEST… 로 보임 |
토큰이 만료·위조·형식 오류로 검증에 실패해 게스트로 대체됨 | Logcat 에서 SauceLive 태그의 validationToken 로그 확인 |
| 회원 전용 기능이 보이지 않음 | 토큰이 회원(memberType: "1")으로 발급되지 않음 |
토큰 발급 시 회원 구분값을 확인 |
| 이전 시청자의 게스트 닉네임이 계속 유지됨 | 기기에 저장된 게스트 토큰을 재사용하기 때문 | 정상 동작입니다. 회원으로 전환하려면 토큰을 전달하세요 |
⚠️ 토큰 오류는 예외를 던지지 않습니다. 검증에 실패하면
onError 로 코드 30001 이 오고 게스트로 진행됩니다. 재생이 멈추지 않아 놓치기 쉬우므로, 실제 서비스 배포 전에 회원 닉네임이 플레이어에 제대로 표시되는지 함께 확인하세요. → Error codes
로그인이 필요한 순간 처리하기
게스트 참여가 허용되지 않은 방송에서 게스트가 회원 기능을 시도하면, 플레이어가 로그인 안내를 표시한 뒤 앱에 알려 줍니다.
이때 앱의 로그인 화면으로 보내고, 완료 후 updateAccessToken() 으로 토큰을 전달합니다.
Kotlin
SauceClient.setLivePlayerCallbackListener(object : LivePlayerCallbackListener { override fun onLoginRequest(context: LoginRequestContext) { // context.feature = 로그인을 요구한 기능 (CHAT, COUPON, REWARD, WISH, EVENT, NOTIFICATION) // context.resumeId = 로그인 후 이어서 처리할 대상 ID (쿠폰 ID 등). 없으면 null // 앱의 로그인 화면으로 이동. 로그인이 끝나면 아래 한 줄로 플레이어를 회원으로 전환합니다 // SauceClient.updateAccessToken(newToken) } })
📘 플레이어는 열린 채로 유지됩니다. 로그인이 끝나면
SauceClient.updateAccessToken(token) 을 호출하세요. 다시 실행하지 않아도 회원으로 전환됩니다.
Updated 5 days ago
Did this page help you?
