Files
sodalive-ios/docs/20260914_크리에이터_채널_공유/prd.md
T

11 KiB

PRD: 크리에이터 채널 공유

문서 정보

항목 내용
문서 상태 구현 완료, 수동 검증 대기
작성일 2026-09-14
최종 수정일 2026-09-15
대상 제품 크리에이터 채널 공유
작성자·결정권자 제품 요구사항: 사용자, 문서 작성: Sisyphus
관련 API Contract 해당 없음
관련 구현 계획 docs/20260914_크리에이터_채널_공유/plan-task.md
관련 review 없음

요구사항 상태

상태 의미 구현 처리
확정 제품·기술 결정이 완료되어 구현 기준으로 사용 plan-task.md의 Task와 완료 증거로 추적
제외 현재 릴리스에서 구현하지 않기로 결정 Decision Log에 제외 이유 기록

1. Overview

크리에이터 채널 사용자는 채널을 외부 앱으로 공유할 수 있어야 한다. 내 채널에서는 우측 상단에 공유 버튼을 바로 노출하고, 다른 사람 채널에서는 우측 상단 더보기 메뉴 안에서 채널 공유를 선택한다.

공유 동작은 기존 UserProfileView의 채널 공유와 동일하게 OneLink 메시지를 만든 뒤 ActivityViewController로 시스템 공유 시트를 표시한다.

2. Problem Statement

  • 현재 신규 CreatorChannelView에는 채널 공유 진입점이 없다.
  • 기존 레거시 UserProfileView에는 채널 공유 동작이 있으나, 신규 크리에이터 채널 title bar와 더보기 overlay에는 연결되어 있지 않다.
  • 사용자는 자신의 채널을 홍보하거나 다른 사람의 채널을 추천하려면 앱 밖으로 공유할 수 있어야 한다.

문제를 해결했다는 판단은 내 채널과 다른 사람 채널에서 모두 기존 채널 공유 메시지와 딥링크가 포함된 iOS 공유 시트가 열리는 것으로 한다.

3. Goals

3.1 제품 목표

  • 내 크리에이터 채널 우측 상단에 공유 버튼을 직접 표시한다.
  • 다른 사람 크리에이터 채널 더보기 메뉴 최상단에 채널 공유 항목을 표시한다.
  • 공유 결과는 기존 UserProfileView 채널 공유와 동일한 메시지·딥링크 형식을 사용한다.

3.2 UX 목표

  • 내 채널 사용자는 더보기 단계를 거치지 않고 바로 공유할 수 있다.
  • 다른 사람 채널 사용자는 기존 더보기 메뉴 안에서 공유, 차단, 신고 동작을 한 곳에서 선택할 수 있다.
  • 공유 버튼에는 ic_audio_content_share asset을 사용한다.

4. Non-Goals

  • 새 공유 문구를 만들지 않는다.
  • 새 딥링크 계약이나 새 API를 만들지 않는다.
  • 공유 URL 생성 로직을 범용 helper로 리팩터링하지 않는다.
  • Pods/**, generated/**, build/**는 수정하지 않는다.
  • 이 문서 작업에서는 코드 구현을 진행하지 않는다.

5. Target Users and Permissions

사용자 목표 주요 작업 사용 환경
내 채널 소유자 내 채널 홍보 title bar 공유 버튼 탭 iOS 앱
다른 사람 채널 방문자 채널 추천 더보기 메뉴에서 채널 공유 선택 iOS 앱

권한 정책:

  • 인증 여부와 무관하게 기존 UserProfileView.shareChannel 동작과 동일한 조건을 따른다.
  • 내 채널 여부는 기존 CreatorChannelViewisOwnCreatorChannel 판단을 따른다.
  • 공유 대상 creatorIdCreatorChannelHomeResponse.creator.creatorId를 사용한다.

6. 핵심 사용자 흐름

  1. 사용자가 내 크리에이터 채널에 진입한다.
  2. 우측 상단 ic_audio_content_share 버튼을 탭한다.
  3. 앱이 기존 채널 공유 메시지와 OneLink URL을 생성한다.
  4. iOS ActivityViewController 공유 시트가 표시된다.

다른 사람 채널 흐름:

  1. 사용자가 다른 사람 크리에이터 채널에 진입한다.
  2. 우측 상단 더보기 버튼을 탭한다.
  3. overlay 메뉴 최상단의 채널 공유 항목을 탭한다.
  4. 앱이 기존 채널 공유 메시지와 OneLink URL을 생성한다.
  5. iOS ActivityViewController 공유 시트가 표시된다.

7. 정보 구조와 라우팅

CreatorChannelView(creatorId:)
  titleBar
    my channel: share button
    other channel: more button
  more overlay
    channel share
    block/report actions
  ActivityViewController

별도 route나 신규 AppStep은 추가하지 않는다.

8. 기능 요구사항

8.1 내 채널 공유 버튼

ID 상태 요구사항 수용 기준 계약/Goal 연결
CCSHARE-001 확정 내 채널 title bar 우측 상단에 공유 버튼을 직접 표시한다. isOwnCreatorChannel == true일 때 ic_audio_content_share 버튼이 보이고 더보기 버튼은 공유 진입에 필요하지 않다. P1-T1
CCSHARE-002 확정 공유 버튼 탭 시 기존 채널 공유 방식으로 iOS 공유 시트를 표시한다. 공유 메시지에 I18n.MemberChannel.shareChannelMessage(nickname) 결과와 OneLink URL이 포함된다. P1-T2

8.2 다른 사람 채널 더보기 공유

ID 상태 요구사항 수용 기준 계약/Goal 연결
CCSHARE-003 확정 다른 사람 채널 title bar는 기존 더보기 버튼을 유지한다. isOwnCreatorChannel == false일 때 더보기 버튼을 탭하면 overlay 메뉴가 열린다. P1-T3
CCSHARE-004 확정 더보기 overlay 메뉴 최상단에 채널 공유 항목을 추가한다. 메뉴 순서는 채널 공유가 기존 차단/신고 항목보다 위다. P1-T3
CCSHARE-005 확정 채널 공유 항목 탭 시 overlay를 닫고 공유 시트를 표시한다. 공유 시트가 표시되며 기존 차단/신고 흐름은 변경되지 않는다. P1-T3

8.3 공유 링크와 메시지

ID 상태 요구사항 수용 기준 계약/Goal 연결
CCSHARE-006 확정 공유 링크 생성은 기존 UserProfileViewModel.shareChannel과 동일한 OneLink 파라미터를 사용한다. af_dp=voiceon://, deep_link_value=channel, deep_link_sub5={creatorId}가 사용된다. P1-T2
CCSHARE-007 확정 공유 실패 시 기존 채널 공유 실패 처리와 동일한 사용자 피드백을 사용한다. OneLink 생성 실패 시 I18n.MemberChannel.shareLinkCreateFailed 기반 popup이 표시된다. P1-T2

9. 반응형 기능 범위

기능 iPhone iPad 비고
내 채널 공유 버튼 전체 전체 기존 title bar layout 범위 안에서 표시
다른 사람 채널 더보기 공유 전체 전체 기존 overlay 메뉴 패턴 유지
ActivityViewController 전체 전체 기존 ActivityViewController wrapper 사용

10. UI/UX Expectations

10.1 디자인과 component 원칙

  • 공유 버튼 asset은 ic_audio_content_share로 고정한다.
  • 신규 공용 component를 만들기보다 기존 CreatorChannelTitleBar, ProfileReportMenuView, ActivityViewController 패턴을 우선 재사용한다.
  • 더보기 메뉴의 신규 항목 텍스트는 채널 공유 의미의 I18n 항목으로 제공한다.

10.2 화면 상태

  • 홈 API 응답을 받기 전에는 공유 대상 creator 정보가 없으므로 공유 action은 실행하지 않는다.
  • 공유 시트 표시 중 기존 loading overlay를 새로 추가하지 않는다.
  • OneLink 생성 실패 시 기존 popup 피드백을 표시한다.

10.3 접근성

  • 공유 버튼에는 채널 공유 의미의 accessibility label을 제공한다.
  • 더보기 메뉴의 채널 공유 항목은 탭 가능한 충분한 영역을 유지한다.

11. API 계약

신규 API 계약은 없다.

공유 링크 생성 파라미터:

Key Value
af_dp voiceon://
deep_link_value channel
deep_link_sub5 {creatorId}

12. 보안과 데이터 취급

  • 공유 메시지에는 기존 채널 공유와 동일하게 공개 가능한 채널 nickname과 OneLink URL만 포함한다.
  • 토큰, 인증 헤더, 개인정보를 공유 메시지나 로그에 포함하지 않는다.
  • 새 네트워크 요청을 추가하지 않는다.

13. 성능과 품질 요구사항

  • 공유 버튼 또는 메뉴 항목 탭 한 번으로 iOS 공유 시트가 표시되어야 한다.
  • 기존 팔로우/알림/차단/신고 title bar 및 더보기 흐름을 회귀시키지 않는다.
  • 테스트 타깃이 없는 현재 저장소 상태를 고려해, 구현 시 focused 빌드와 수동 검증을 완료 증거로 기록한다.

14. 성공 기준

14.1 기능 수용 기준

  • 내 채널 title bar에서 ic_audio_content_share 버튼을 탭하면 공유 시트가 열린다. (CCSHARE-001, CCSHARE-002)
  • 다른 사람 채널 더보기 메뉴 최상단 채널 공유를 탭하면 공유 시트가 열린다. (CCSHARE-003~CCSHARE-005)
  • 공유 메시지와 OneLink 파라미터가 기존 UserProfileViewModel.shareChannel 기준과 일치한다. (CCSHARE-006)
  • OneLink 생성 실패 시 기존 실패 popup과 동일한 피드백이 표시된다. (CCSHARE-007)

14.2 UI/UX 수용 기준

  • 내 채널 공유 버튼은 우측 상단 title bar에 직접 노출된다.
  • 다른 사람 채널 메뉴에서 채널 공유는 최상단에 표시된다.
  • 기존 차단/신고 메뉴 항목과 동작은 유지된다.

14.3 추적성 완료 기준

  • 모든 확정 요구사항이 plan-task.md의 Task와 연결된다.
  • 구현 전 코드 변경 범위가 SodaLive/Sources/V2/CreatorChannel/**, SodaLive/Sources/Report/ProfileReportMenuView.swift, SodaLive/Sources/I18n/I18n.swift 중심인지 확인한다.

15. Open Questions

ID 상태 결정 필요 사항 현재 권고 결정 주체 결정 기한/시점 영향 Goal
없음 확정 추가 미결정 사항 없음 기존 공유 방식 재사용 사용자 2026-09-14 전체

16. 요구사항 추적표

요구사항 범위 API Contract 계획 Phase Goal 자동 검증 수동 검증
CCSHARE-001~002 해당 없음 1 P1-T1, P1-T2 빌드 내 채널 공유 버튼 탭
CCSHARE-003~005 해당 없음 1 P1-T3 빌드 다른 사람 채널 더보기 공유 탭
CCSHARE-006~007 해당 없음 1 P1-T2, P1-GATE 코드 대조, 빌드 공유 메시지와 실패 popup 확인

17. Decision Log

날짜 ID 상태 결정 근거 영향 요구사항·계약·Goal
2026-09-14 DEC-001 확정 기존 문서에 누적하지 않고 신규 문서 docs/20260914_크리에이터_채널_공유/를 만든다. 사용자 선택 B 전체
2026-09-14 DEC-002 확정 다른 사람 채널 더보기 메뉴의 채널 공유 항목은 최상단에 배치한다. 사용자 선택 A CCSHARE-004, P1-T3
2026-09-14 DEC-003 확정 공유 구현은 기존 UserProfileViewActivityViewController 방식과 OneLink 파라미터를 재사용한다. 사용자 요구사항, 기존 코드 확인 CCSHARE-002, CCSHARE-006

18. 변경 관리

  • 공유 문구, 딥링크 파라미터, 메뉴 순서가 바뀌면 Decision Log에 정정 행을 추가한 뒤 요구사항과 plan-task.md를 갱신한다.
  • 구현 중 테스트 타깃 또는 빌드 명령이 달라지면 docs/agent-guides/build-test-verification.md 확인 후 검증 기록에 실제 명령을 남긴다.