DuoDuel Admin

관리자 로그인

세션 쿠키(HttpOnly). 12시간 후 만료.

  • 개요
  • 랜딩 페이지
  • - -
  • 로그아웃
DuoDuel Admin

    개요

    불러오는 중…

    서버 진단

    실시간 룸

    • 이벤트(메모리)
    • 감사(영속)

    최근 300건까지 메모리에 둡니다. 서버를 재시작하면 비워집니다 — 금전·삭제·세션·운영중단 기록은 옆의 감사(영속) 탭에서 봅니다.

    파일에 남는 기록입니다 — 재시작해도 남습니다. 값은 서버에서 가려서 기록되므로(시크릿은 ***, 본문은 ‹str:N›) 여기서 원문은 볼 수 없습니다. 「무엇이 언제 누구에 의해 바뀌었나」에 답하는 자리입니다.

    사용자 분석 — 최근 14일

    「사용자(기기)」는 앱 설치 단위 익명 ID 로 셉니다 (- 부터, 그 뒤 앱이 보낸 기록만). 기기 두 대를 쓰거나 앱을 지웠다 다시 깔면 둘로 셉니다. 옛 앱·이전 기록은 「미식별 세션」으로 따로 보이고 사람 수에 섞지 않습니다. 「실행 세션」은 켤 때마다 새로 생기므로 사람 수가 아닙니다. 또 동의한 사용자가 보내고 서버에 저장된 것만 잡힙니다 — 동의를 안 했거나 전송이 실패하면 여기 안 보입니다.
    날짜 사용자(기기) 게임 사용자 실행 세션 게임 진입 결과 보고 내부 검증 미분류 미식별 세션

    빌드별 이용 (14일, 고유 세션)

    「버전 게이트」의 최소 빌드 번호를 정할 때 이 표를 봅니다. 단 이 표«만»으로 정하면 안 됩니다.
    안전한 값은 둘을 다 만족해야 합니다 — ① 두 스토어가 실제로 배포 중인 빌드 이하(그보다 높으면 사용자가 받을 수 없는 업데이트를 안내받습니다) ② 그 빌드가 이 표에 실제로 나타날 것(단계적 롤아웃이 닿았다는 뜻입니다).
    🔴 이 표에는 우리 시험 기기도 섞여 있습니다. 여기 보인다고 스토어에 있는 것이 아닙니다 — 2026-09-09 실측으로 b61 이 양쪽에 있었지만 두 스토어는 b53 이었습니다.
    스토어 확인: iOS itunes.apple.com/lookup?bundleId=kr.co.duoduel.app · Android 는 Play 스토어 페이지의 버전(또는 Play Console 의 롤아웃 %).
    빌드플랫폼사용자(기기)고유 세션

    사용자(기기) — 그날 활동한 고유 설치 ID 수. 사람 수에 가장 가깝습니다(기기 여러 대·재설치는 따로 셉니다). 기간 합계는 일별 합이 아니라 합집합입니다.

    게임 사용자 — 그중 게임 시작이 기록된 기기.

    미식별 세션 — 설치 ID 가 없는 세션(설치 ID 를 보내기 전 앱·기록). 사람 수로 추정하지 않습니다.

    실행 세션 — 그날 활동 기록이 있던 세션 수. 같은 사람이 여러 번 켜면 여러 번 셉니다.

    게임 진입 — 그중 게임 시작이 기록된 세션. 온라인은 로비 진입도 포함될 수 있습니다.

    결과 보고 — 대전 결과 «보고» 수. 온라인은 양쪽이 각각 보고하므로 «판 수»가 아닙니다.

    내부 검증 — 개발 표식이 붙은 세션. 우리 손이라고 말할 수 있는 것입니다.

    미분류 — 나머지. 「실사용자」라는 뜻이 아닙니다 — 우리도 릴리즈 빌드로 검증하고, 표식을 남기기 시작한 - 이전 기록에는 표식 자체가 없습니다.

    최근 14일 추이

    익명 텔레메트리(활성 세션·게임 진입/종료·플레이·에러)를 날짜별로 집계합니다. 출시 후 "어제보다 늘었나?"·"에러가 갑자기 튀었나?"를 한눈에 봅니다.

    활성 앱 세션-
    게임 진입-
    게임 종료율-
    평균 체류-
    플레이 결과-
    에러-
    활성 앱 세션 (일별 익명 세션 중복 제거)
    플레이 (막대 위 숫자 = 그 날 승리 수)
    에러

    앱 사용 현황 익명 세션 · 개인 식별 없음

    불러오는 중…

    게임 통계 승/패/무·모드별(익명)

    자원 추이 게임을 나갈 때 앱이 직접 잰 값

    한 실행에서 게임을 몇 번째로 나갔는지(회차)별 평균이다. RSS 가 회차를 따라 계속 오르면 회수가 안 되는 것이고, 첫 구간만 높고 그 뒤 평탄하면 캐시가 데워진 것이라 정상이다.

    최근 표본

    클라이언트 에러

    최근 발생 상세 항목을 눌러 스택을 확인하세요

    위험 작업

    전체 통계·오류·광고·앱 활동 로그를 백업 후 초기화합니다.

    접근 로그

    이 사이트(duoduel.co.kr)에 들어온 HTTP 요청입니다. 대전 WebSocket 은 여기 안 들어옵니다 — 그건 「실시간 룸」에서 봅니다. 기본은 사이트 페이지만 보여줍니다. 앱이 보내는 API 호출 (/log·/wallet 등)과 관리자 화면 요청은 양이 훨씬 많아 섞으면 실제 방문자를 가리므로 왼쪽에서 갈라 봅니다. 개인정보 보호를 위해 IP 는 해시로만 남고, 쿼리스트링·헤더·본문은 기록하지 않습니다(토큰이 실릴 수 있는 자리라 수집 시점에 잘라냅니다). 그래서 여기서 원본 IP 나 파라미터는 볼 수 없습니다.

    많이 열린 경로

    많이 온 클라이언트

    최근 요청

    고객 문의

    게임 노출 체크 = 홈에서 숨김

    피처드 캐러셀 순서

      사이트 소유확인 Google Search Console

      Search Console 에서 HTML 태그 방식을 고르면 나오는 content="..." 안의 값만 붙여넣으세요. 태그 전체를 넣어도 값만 걸러 저장합니다. Search Console 열기

      공지

      게임 밸런스 — 앱 배포 없이 숫자 바꾸기

      여기서 바꾼 값은 앱을 새로 배포하지 않아도 적용됩니다. 앱이 시작할 때 서버에서 받아 가고, 경기가 시작되는 순간 그 경기용으로 «고정»됩니다.
      🔴 이미 하고 있는 경기에는 영향이 없습니다 — 도중에 규칙이 바뀌면 같은 경기에서 두 사람이 다른 규칙으로 놀게 되고, 온라인이면 두 기기가 다르게 판정합니다.
      ⚠️ 앱이 모르는 이름은 그냥 무시합니다(오타를 넣어도 고장나지 않습니다). 대신 아래 「앱이 버린 이름」에 나옵니다.
      값은 숫자만 됩니다(문자열·true/false 는 저장이 거부됩니다). 이름은 80자까지, 최대 500개.
      예: "tap_battle.rounds": 5 — 탭배틀 라운드 수를 5로.
      비우려면 {} 를 넣으세요. 그러면 앱에 박힌 기본값으로 돌아갑니다.

      버전 게이트


      스토어 최신 빌드 — 「새 버전이 나왔어요」 권장 안내의 근거값입니다. 위의 최소 빌드는 차단이고, 이 값은 권유라 뜻이 다릅니다.
      🔴 iOS 는 이 값이 없으면 안내가 아예 못 뜹니다. Android 는 Play 가 직접 알려 주지만, iOS·사이드로드 설치본에는 물어볼 곳이 없기 때문입니다.
      🔴 스토어에 실제로 올라간 빌드 번호만 넣으세요. 없는 번호를 넣으면 사용자가 「업데이트」를 눌러도 받을 것이 없습니다.
      값의 모양: 정수 빌드 번호(버전 이름이 아닙니다). 예 67 · 비우면 끕니다(권장 안내를 하지 않습니다).
      어디서 얻나: Play Console → 출시 → 프로덕션 / App Store Connect → 앱 → 빌드.

      광고 운영 현황

      0
      광고 요청
      0
      실제 노출
      0
      리워드 시청 요청
      0
      시청 완료·보상
      0
      클릭
      0
      로드·표시 실패
      추정 광고 수익 아직 paid event 없음
      앱에서 받은 impression-level paid event 합계입니다. 실제 지급·정산 금액은 AdMob 콘솔이 정본입니다.

      형식요청로드노출시청 요청완료·보상클릭실패
      최근 광고 이벤트
      시각형식이벤트위치플랫폼·빌드

      광고

      모르겠으면 이대로 두세요. 아래 권장 표시가 기본 권장값입니다.

      순서: ① 아래 AdMob 광고 단위 ID 3칸을 먼저 채우고 저장 → ② 실기기에서 광고가 뜨는지 확인 → ③ 그 다음 마스터 스위치를 켭니다. ID 가 빈 상태로 마스터를 켜면 테스트 광고가 유저에게 나갑니다(수익 0).

      앱 전체 광고의 on/off 한 방 스위치입니다. 앱 업데이트 없이 즉시 반영돼, 광고 관련 사고가 터졌을 때 긴급 차단 용도로도 씁니다. 현재 권장 OFF — 실 ID 검증이 끝난 뒤 켜세요.
      배너
      화면 하단에 항상 떠 있는 작은 띠 광고. 수익은 낮지만 거슬림이 가장 적습니다. 권장 ON
      노출 화면
      배너를 띄울 화면을 고릅니다. 권장 3개 모두 ON — 게임을 방해하지 않는 대기 화면들입니다. 게임 플레이 화면에는 배너가 아예 없습니다(2인 모드는 화면 하단이 플레이어1 의 조작 영역이라, 배너가 터치를 가로채고 P1/P2 영역이 불공평해집니다).
      전면광고
      매치가 끝난 뒤 화면 전체를 덮는 광고. 배너보다 수익이 훨씬 크지만 너무 자주 띄우면 이탈·악평·정책 위반으로 이어집니다. 권장 ON (빈도는 아래 두 값으로 조절)
      매치 N 번에 한 번만 전면광고를 띄웁니다. 1 = 매 매치마다(너무 잦음, 비권장), 3 = 세 판에 한 번. 숫자가 클수록 광고가 줄고 유저 경험이 좋아집니다.
      직전 전면광고 이후 최소 이만큼(초)은 광고를 띄우지 않습니다. 위의 N 조건을 만족해도 이 시간이 안 지났으면 건너뜁니다 — 짧은 게임을 연속으로 할 때 광고가 몰아치는 걸 막는 안전장치입니다. 120 = 2분.

      AdMob 광고 단위 ID

      AdMob 콘솔 열기

      비워두면 Google 테스트 광고가 나갑니다(수익 없음). 실 ID 를 넣으면 앱 업데이트 없이 즉시 실광고로 전환됩니다.

      형식 ca-app-pub-0000000000000000/0000000000 — AdMob > 앱 > 광고 단위에서 복사. 앱 ID(~ 물결이 들어간 값)는 여기가 아니라 앱 빌드에 박혀 있어 여기서 못 바꿉니다.

      처음이신가요? ① 앱 목록 → 앱 선택 → 광고 단위 → 광고 단위 추가 → 생성된 광고 단위 ID 복사 → 아래 칸에 붙여넣기 → 저장. 광고 단위 만들기 도움말

      AdMob "광고 형식 선택" 화면에서 만들 것은 3개뿐입니다.

      배너 전면 광고 보상형 — 이 3개만 각각 1개씩 만드세요.

      보상형 전면 네이티브 광고 고급형 앱 오프닝 — 앱이 사용하지 않으므로 만들지 마세요. (특히 보상형과 보상형 전면은 이름이 비슷하니 주의 — 필요한 건 유저가 직접 "광고 보고 2배 받기"를 누르는 보상형입니다.)

      AdMob 앱 ID 기록용

      앱 설정에서 확인

      여기 저장해도 앱은 바뀌지 않습니다. 앱 ID 는 앱 빌드(AndroidManifest)에 박혀 있고 SDK 가 앱 시작 시 거기서 읽습니다 — 교체하려면 재빌드·재배포가 필요합니다.

      그럼에도 여기 적어두는 이유: 값을 한곳에 보관하고, 아래 단위 ID 와 게시자 번호가 어긋났는지 자동으로 검사하기 위해서입니다. 앱 ID 와 단위 ID 의 게시자가 다르면 광고가 한 개도 안 뜹니다(수익 0).

      iOS 광고

      -

      위 설정은 전부 Android 값입니다. AdMob 은 플랫폼마다 앱을 따로 만들고 광고 단위 ID 가 공유되지 않습니다 — iOS 것을 여기 따로 넣으세요.

      앱 ID 와 단위 3칸을 모두 채워야 "iOS 광고 사용"을 켤 수 있습니다. 하나라도 비면 저장이 거부됩니다 — 빈 채로 켜면 앱이 테스트 광고로 폴백해 "광고가 도는 것처럼 보이는데 수익 0" 이 되기 때문입니다.

      ⚠ 이 값도 기록용입니다. iOS SDK 는 Info.plist 의 GADApplicationIdentifier 를 읽으므로 실제로 바꾸려면 재빌드가 필요합니다. 현재 빌드는 구글 테스트 ID가 박혀 있습니다.

      출시 범위 — 앱이 어떤 기능을 노출하는가

      플랫폼마다 여는 기능이 다릅니다. 서버가 켤 조건을 강제하므로 준비되지 않은 상태로는 켜지지 않습니다. 앱은 서버 응답 전에 전부 꺼진 상태로 동작합니다.
      기능AndroidiOS
      광고--
      계정 연동 (순위표·업적)--
      현금 결제 (IAP)-
      iOS 게이트
      위 iOS 광고 카드가 완성돼야 켤 수 있습니다.
      ⚠ 켜기 전에 Xcode 에서 Game Center capability 를 추가하고 App Store Connect 에 순위표·업적을 만든 뒤 재빌드해야 실제로 동작합니다. 서버는 그것까지 알 수 없으므로 이 토글만으로는 부족합니다.

      관련 사이트 바로가기

      광고 (AdMob)
      앱 목록 · 광고 단위 수익 대시보드 개인정보 보호 및 메시지 (GDPR) 광고 단위 만들기 도움말
      스토어 (Google Play)
      Play Console 인앱 상품 등록 도움말 데이터 안전 설문 도움말
      DuoDuel 공개 페이지
      사이트 개인정보처리방침 이용약관 데이터 삭제
      개인정보처리방침·데이터 삭제 URL 은 Play Console 제출용입니다.

      Play Games 리더보드(순위표)·업적

      Play Console
      설정 순서
      1. Play Console → 사용자 늘리기 → Play Games 서비스 → 설정 및 관리 로 이동
      2. 리더보드 → 리더보드 만들기: 이름 Total Coins(en-US 필수 — 영어로 입력), 형식 숫자·소수점 0, 정렬 높을수록 상위 → 저장
      3. 업적 → 업적 만들기: 아래 6개를 각각 만듦(이름은 en-US 필수 — 괄호 안 영어로 입력). "50 Wins"만 증분형(목표 50), 나머지는 표준형
      4. 각 항목의 ID(CgkI… 형태)를 복사 → 아래 같은 이름 칸에 붙여넣기 → 저장

      ID 는 어디서 보나: 만든 리더보드/업적 목록에서 각 항목을 열면 상단에 CgkI… ID 가 있습니다. 비워두면 그 항목은 무시(안전). 로그인한 유저에게만 적용됩니다.

      업적 "점수"(포인트) 배분 — 승리 수가 아니라 게이머 레벨용 가치 포인트입니다(계정당 총 2,000, 5~200·5의 배수, 게임 동작과 무관). 게시 후에도 조정 가능. 권장:

      업적점수
      First Win (첫 승리)10
      50 Wins (50승)50
      7-Day Streak (7일 출석)40
      Champion (선수권 우승)30
      First Online Win (온라인 첫 승)20
      First Purchase (첫 구매)25
      합계175 (2,000 이내면 자유)
      리더보드(순위표)
      유저가 지금까지 번 코인 합계로 겨루는 전체 순위표.
      업적 — 아래 6개를 Play Console 에서 만들고 ID 를 각 칸에
      설정 진행: ① 계정 로그인 → ② 결제 검증 → ③ 순위표·업적 위에서 아래로 순서대로 하시면 됩니다.

      ① 계정 로그인 — Google Play Games (필수)

      -

      유저가 로그인해 다이아·진행도를 서버에 저장하려면 필요합니다. 미설정이면 앱은 게스트(기기 로컬)로만 동작합니다.

      준비 순서
      1. Play Console → 사용자 늘리기 → Play Games 서비스 → 설정 및 관리 → 게임 생성 → 앱 연결(패키지 kr.co.duoduel.app + 앱 서명 키 SHA-1) → 테스터에 본인 계정 추가
      2. Google Cloud → 사용자 인증 정보 → OAuth 클라이언트 → 유형 "웹 애플리케이션" 생성 (Android 아님!)
      3. 생성된 클라이언트 ID + 보안 비밀번호를 아래에 넣고 → 저장 → 연결 테스트

      ⚠ 웹 유형이어야 합니다(Android 는 비밀번호가 없어 서버 인증 불가). ⚠ SHA-1 은 앱 서명 키(업로드 키 아님) — AAB 를 한 번 올려야 Play Console 앱 서명에 생깁니다.

      서버 환경변수로 설정돼 있습니다. 환경변수가 우선이라 여기서 저장해도 적용되지 않습니다.

      현재 값: - — 비워두고 저장하면 기존 값 유지. 공개 응답에 절대 포함되지 않습니다.

      Play Console Cloud 사용자 인증 정보

      ② 결제 검증 — 서비스 계정 (권장)

      -

      없으면 다이아 지급을 앱이 스스로 합니다(루팅 기기에서 부풀리기 가능). 설정하면 서버가 Google 영수증을 확인 후 서버가 정한 금액만 지급합니다.

      출시 필수는 아니지만, 유료 상품 보안을 위해 권장합니다.

      설정 순서
      1. Google Cloud → IAM → 서비스 계정 생성 → 키(JSON) 내려받기
      2. Google Cloud → API·서비스 → 라이브러리 → Google Play Android Developer API 사용 설정
      3. Play Console → 사용자 및 권한 → 새 사용자 초대 → 이메일에 서비스 계정 이메일 입력 → "재무 데이터, 주문 및 취소 설문조사 응답 보기" 부여 (DuoDuel 앱만 선택) → 초대
        서비스 계정 이메일 = Google Cloud → IAM 및 관리자 → 서비스 계정 목록의 "이메일" 값(=JSON 의 client_email, 아래 칸에 넣는 값과 동일). …@프로젝트ID.iam.gserviceaccount.com 형태.
      4. 내려받은 JSON 파일 내용을 그대로 아래 칸에 붙여넣기 → 저장 → 연결 시험
      이미 다른 앱(머니판 등)에 등록한 서비스 계정이 있다면 같은 JSON 을 그대로 쓸 수 있습니다 — 한 서비스 계정에 여러 앱 권한을 줄 수 있기 때문입니다. 다만 앱마다 서버가 다르므로 이 화면에도 한 번 넣어야 합니다(자동으로 공유되지 않습니다).

      서비스 계정은 서버 전용 신분증이라, 관리자 본인 권한과 별개로 위 권한을 따로 줘야 합니다. 서비스 계정 · API 사용 설정 · Play Console

      비워두고 저장하면 기존 값을 유지합니다. 저장된 키는 다시 보여주지 않습니다 — 아래 요약으로 확인하세요.
      서비스 계정-
      프로젝트-
      키 지문 — 다른 앱에 넣은 키와 같은지 대조용 -
      마지막 연결 확인-

      iOS 업로드 — App Store Connect API

      -

      없으면 iOS 업로드를 손으로 해야 합니다(Xcode Organizer·Transporter). 넣으면 안드로이드처럼 빌드 → 업로드 → TestFlight 를 명령 하나로 돌립니다.

      Play 의 서비스 계정과 목적은 같지만 완전히 별개입니다 — 애플은 .p8 키를 씁니다.

      발급 순서
      1. App Store Connect → 사용자 및 액세스 → 통합 → App Store Connect API
      2. 팀 키 탭에서 + → 이름 입력 → 액세스 권한 App Manager 이상 선택
      3. Issuer ID(화면 상단 UUID)와 Key ID를 복사
      4. AuthKey_XXXXXXXXXX.p8 내려받기 — ⚠ 다운로드는 한 번뿐입니다. 잃어버리면 폐기하고 새로 발급해야 합니다
      5. 내려받은 파일을 텍스트로 열어 내용 전체를 아래에 붙여넣기
      6. 번들 ID 는 따로 받지 않습니다 — 「② 결제 검증」의 패키지 이름을 그대로 씁니다

      App Store Connect API 키 발급 · 나의 앱

      비워두고 저장하면 기존 키를 유지합니다. 저장된 키는 다시 보여주지 않습니다 — 아래 지문으로 확인하세요.
      번들 ID - — 「② 결제 검증」의 패키지 이름을 그대로 씁니다(따로 안 받습니다)
      키 지문-
      마지막 연결 확인-

      ③ 순위표·업적 — Play Games (선택)

      재방문을 돕는 순위표·업적입니다. 출시 필수 아님 — 나중에 켜도 됩니다. Play Console 에서 항목을 만든 뒤 그 ID 를 왼쪽 메뉴 "순위표·업적" 화면에 입력하세요.

      -

      총 결제 건수

      -

      지급 다이아 합계

      -

      광고 제거 구매

      -

      영수증 검증

      상품별 판매

      상품판매 건수
      불러오는 중…

      최근 결제

      영수증 검증에 성공해 실제 지급된 건만 기록됩니다. 환불 문의 시 이 내역과 Play Console 주문을 대조하세요. 게스트(미연동) 구매는 서버를 거치지 않아 여기 없습니다.

      시각플레이어상품다이아주문 ID
      불러오는 중…

      유저 지갑 -

      계정 연동이 꺼져 있습니다.

      서버에 GOOGLE_OAUTH_CLIENT_ID / GOOGLE_OAUTH_CLIENT_SECRET 이 설정돼야 Play Games 로그인이 동작합니다. 설정 전에는 앱이 기존처럼 기기 로컬에만 저장합니다. 절차는 docs/account_wallet_setup.md.

      보정은 감사 로그로 남습니다(누가·언제·왜). 문의 대응으로 지급할 때는 사유를 구체적으로 적어주세요.

      플레이어코인다이아광고제거코스메틱최근 동기화보정
      불러오는 중…

      관리자 충전 내역 -

      관리자가 지급/보정한 전 내역(영구 보관). 누가·언제·얼마·왜가 남습니다. 결제(실구매)와는 별개입니다.

      누적 충전 다이아-
      누적 지급 코인-
      시각플레이어다이아코인관리자사유
      불러오는 중…
      되돌릴 수 없는 것 — 먼저 확인
      • 패키지 이름 kr.co.duoduel.app — 확정되면 영구히 못 바꿉니다.
      • 무료 → 유료 전환 불가 — 게시 후에는 무료 앱을 유료로 못 바꿉니다.
      • 기본 언어 한국어(ko-KR) — 나중에 바꾸기 번거롭습니다.

      현재 상태

      플랫폼Android — Play 프로덕션 공개(한국)
      패키지kr.co.duoduel.app
      광고 단위어드민 광고 화면에서 확인·변경
      연동 자격어드민 Google Play·App Store 화면

      짧은 체크리스트

      • AAB 업로드 전 버전 코드가 올라갔는지
      • 난독화 심볼을 심볼 보관함에 올렸는지
      • 광고 단위 ID가 테스트 ID 가 아닌지 (광고 화면이 경고합니다)
      • 출시 후 클라이언트 에러로 크래시 증가 확인

      정본 문서 — Play Console 실행 절차

      정본: docs/admin_launch_guide_android.md · 값(패키지·서명·AdMob ID)은 docs/deployment_playstore.md. 문서를 고칠 때는 그 파일 하나만 고치면 됩니다.

      이미지 자산 — 교체 대기

      여기서 올린 이미지는 서버에 대기했다가 다음 빌드 때 앱에 반영됩니다(실시간 교체 아님 — 재빌드가 필요합니다).

      PNG 만 가능 · 권장 크기는 각 항목 아래에 표시됩니다. 교체 대기본은 파란 테두리로 보이고 "취소"로 되돌릴 수 있습니다. 캐릭터는 5색이 같은 모양이어야 자연스럽습니다 — 한 색만 바꾸면 어색할 수 있으니 참고하세요.

      불러오는 중…

        게임 미리보기 웹 빌드 · 실시간 플레이

        새 탭

        실제 앱을 브라우저에서 그대로 실행합니다. 47개 게임을 직접 플레이해 UI를 확인하세요. 광고·인앱결제·계정 로그인은 웹에서 자동 비활성이며(순수 미리보기), 실제 출시 빌드는 Play 스토어 AAB입니다. 첫 로딩은 수 초 걸릴 수 있습니다. 소리는 화면을 한 번 탭하면 켜집니다.

        iOS 는 Android 와 완전히 별개입니다
        • iOS 플랫폼은 이미 추가돼 있고 릴리즈 빌드가 통과합니다 — 2026-08-16 실측(Runner.app 44.8MB). 번들 ID·서명 팀·ATT 문구까지 설정됨. 아래에서 완료 표시는 건너뛰고 남음 만 보세요.
        • Mac + Xcode 가 필수입니다. Windows/Linux 만으로는 iOS 빌드·업로드가 불가합니다.
        • Play 스토어 등록정보·인앱상품·순위표는 iOS 로 넘어오지 않습니다 — App Store Connect 에서 다시 만듭니다.

        진행 체크리스트

        0 / 0

        체크 상태는 이 브라우저에만 저장됩니다(localStorage). 서버에는 저장하지 않습니다.

        정본 문서 — App Store Connect 실행 절차

        정본: docs/admin_launch_guide_ios.md · 빌드·업로드 명령은 ios/ExportOptions.plist 헤더 주석.

        유료화 — 여는 조건 체크리스트

        현재 현금 결제는 닫혀 있습니다(2026-08-14 판단, 2026-08-28 재확인). iOS 는 지갑 세션도 영수증 서버검증도 없어, 지금 열면 구매가 서버 기록 없이 로컬로만 들어갑니다 — 앱 삭제·기기교체에 사라지고 대조할 근거가 없습니다. 상품을 만들기 전에 아래 문서 §7 의 6항목을 끝내야 합니다. server/admin_smoke.js 가 순서를 검사로 막습니다.

        난독화 심볼 보관함

        이 파일이 없으면 난독화된 크래시 로그를 영영 해독할 수 없습니다.

        릴리즈 빌드(tool\build_release.ps1)가 자동으로 여기에 올립니다. Play Console 이 보여주는 크래시 스택이 의미 없는 주소값이면, 그 버전의 심볼을 내려받아 해독하세요 (flutter symbolize -i <스택파일> -d <심볼파일>). 빌드 PC 가 고장나도 여기 사본이 남습니다.

        버전파일크기업로드내려받기
        불러오는 중…

        파일 보관함

        폰에서 찍은 파일을 여기에 올리면 개발 PC 가 내려받습니다.

        심사 대응용 화면녹화처럼 폰 → PC 로 옮겨야 하는 큰 파일을 위한 곳입니다. 한 개당 최대 - 까지. 앱에 반영되는 것이 아니라 그냥 주고받는 파일입니다 (앱 이미지 교체는 「이미지 자산」 메뉴).

        사진 앱의 화면녹화(.mov)도 그대로 올릴 수 있습니다.
        0%

        파일크기올린 시각받기 / 삭제
        불러오는 중…

        계정 정보

        로그인 아이디- -
        인증 방식-
        세션 만료-
        접속 IP-
        서버 가동-
        서버 버전-

        보안

        다른 기기·브라우저에 로그인이 남아 있다고 의심되면 전부 끊을 수 있습니다.


        이 콘솔은 유저 지갑 보정·심볼 다운로드 등 되돌리기 어려운 작업을 포함합니다. 비밀번호는 이 서비스에서만 쓰는 것으로 설정하세요.

        비밀번호 변경

        변경 시 다른 모든 세션이 로그아웃됩니다.

        DuoDuel Admin · 운영 콘솔
        확인
        대상
        -
        영향
        -
        되돌리기
        -
        되돌릴 수 없습니다. 실행하면 이전 상태로 복구할 수 없습니다.

        변경 미리보기

        항목지금바뀔 값

        문자열 값은 길이 요약으로만 보여 줍니다(공지 본문·광고 ID 원문은 화면에도 로그에도 남기지 않습니다).

        ×
        ‹
        ›
        좌·우 탭 또는 스와이프로 이동 · X로 닫기