Description 추가 설명
대상 및 범위
대상: apps/ios
목적: 사용자가 자신의 YouTube 채널을 연결하고, InnoLive 방송 중 YouTube로 송출을 시작·중지할 수 있게 한다.
계약 영향: 기존 서버 API 및 WebRTC signaling을 사용하며, 요청·응답 필드는 변경하지 않는다.
연동할 API
1. YouTube 계정 연결
GET /auth/youtube/config
인증 없이 호출한다.
응답의 web_client_id를 GoogleSignIn-iOS의 serverClientID로, scope를 additionalScopes로 사용한다.
404면 해당 서버 배포에 기능이 없으므로 YouTube 연결 UI를 숨긴다.
GoogleSignIn-iOS에서 YouTube scope 동의 후 serverAuthCode를 수집한다.
POST /auth/youtube/connect
Authorization: Bearer <InnoLive access token>
본문: { "server_auth_code": "...", "code_source": "native" }
성공 시 channel.id, channel.title을 저장·표시한다.
invalid_auth_code는 인가부터 다시 시작하고, youtube_channel_missing은 YouTube 채널 생성 안내를 표시한다.
2. YouTube 송출 제어
POST /sessions/{session_id}/stream/start
Authorization과 X-Session-Owner-Token을 모두 포함한다.
본문: provider: "youtube", title, privacy.
개발/테스트에서는 privacy: "private"를 기본으로 사용한다.
계정 미연결, 영상 트랙 없음, 라이브 활성화 대기, 이미 송출 중 오류를 코드별로 안내한다.
POST /sessions/{session_id}/stream/stop
동일한 인증 헤더를 사용한다.
YouTube 송출만 중지하며 InnoLive 방송과 카메라 연결은 유지한다.
GET /sessions/{session_id}
시작 직후 2~3초 간격으로 폴링한다.
stream.status(idle/streaming/reconnecting/stopped), started_at, publisher_active, last_error, reconnect_attempts를 UI에 반영한다.
오류 및 UX 기준
오류 응답은 error.code 중심으로 분기하고 request_id를 문의 대응용으로 표시한다.
live_streaming_blocked에서는 details.help_url을 열고, YouTube 최초 라이브 활성화에 최대 24시간이 걸릴 수 있음을 안내한다.
시작 후 YouTube 라이브 반영은 약 14초, 중지 반영은 약 1분이므로 준비/재연결 상태를 명확히 표시한다.
스트림 키·Google 토큰은 클라이언트에 노출하거나 저장하지 않는다.
서버 배포 대기 API (PR #89 병합·배포 후 연결)
GET /auth/streaming/accounts
앱 재시작 후 계정 연결 상태를 서버 기준으로 복원한다.
provider, channel_id, channel_title, connected_at, reconnect_required를 처리한다.
DELETE /auth/streaming/accounts/{provider}
설정의 계정 연결 해제에 사용한다.
성공은 204 No Content이며 본문을 파싱하지 않는다.
완료 기준
iOS에서 YouTube 계정 연결, 채널명 표시, private 테스트 송출 시작·중지, 상태 폴링이 동작한다.
방송 영상과 Opus 오디오가 WebRTC로 서버에 전달되고, 카메라/마이크 선택 및 방송 중 카메라 전환이 실제 캡처에 반영된다.
서버 계정 조회/연결 해제 API는 PR #89가 프로덕션에 배포된 뒤 로컬 캐시 의존을 제거하고 연결한다.
Reactions are currently unavailable
You can’t perform that action at this time.
추가 설명
대상 및 범위
apps/ios연동할 API
1. YouTube 계정 연결
GET /auth/youtube/configweb_client_id를 GoogleSignIn-iOS의serverClientID로,scope를additionalScopes로 사용한다.serverAuthCode를 수집한다.POST /auth/youtube/connectAuthorization: Bearer <InnoLive access token>{ "server_auth_code": "...", "code_source": "native" }channel.id,channel.title을 저장·표시한다.invalid_auth_code는 인가부터 다시 시작하고,youtube_channel_missing은 YouTube 채널 생성 안내를 표시한다.2. YouTube 송출 제어
POST /sessions/{session_id}/stream/startAuthorization과X-Session-Owner-Token을 모두 포함한다.provider: "youtube",title,privacy.privacy: "private"를 기본으로 사용한다.POST /sessions/{session_id}/stream/stopGET /sessions/{session_id}stream.status(idle/streaming/reconnecting/stopped),started_at,publisher_active,last_error,reconnect_attempts를 UI에 반영한다.오류 및 UX 기준
error.code중심으로 분기하고request_id를 문의 대응용으로 표시한다.live_streaming_blocked에서는details.help_url을 열고, YouTube 최초 라이브 활성화에 최대 24시간이 걸릴 수 있음을 안내한다.서버 배포 대기 API (PR #89 병합·배포 후 연결)
GET /auth/streaming/accountsprovider,channel_id,channel_title,connected_at,reconnect_required를 처리한다.DELETE /auth/streaming/accounts/{provider}204 No Content이며 본문을 파싱하지 않는다.완료 기준