게시글 공유는 웹앱 셸을 내려준다 — 같은 주소에서 바로 웹앱#130
Merged
Merged
Conversation
'웹에서 계속 보기' 2차 CTA 로 한 번 더 누르게 하던 것을, 링크를 누르면 **바로**
웹앱이 뜨도록 바꾼다(pmdart docs/web-port.md 결정 6).
웹앱 주소를 그냥 공유하지 않는 이유는 그러면 크롤러가 빈 셸을 받아 링크
미리보기가 죽기 때문이다. 그래서 주소는 go.pawmate.kr/s 그대로 두고, 이 함수가
웹앱의 index.html 을 가져와 아래를 주입해 내려준다.
1) <base href> 를 웹앱 절대주소로 — 에셋을 그쪽에서 받는다(CORS 열려 있음)
2) 토큰별 OG 태그(제목·설명·이미지·url) + <title>
3) <meta name="pm-post"> — 열어야 할 게시글 id. 주소에는 토큰만 있고
토큰→게시글 해석은 service_role 전용이라 웹앱이 스스로 못 한다.
크롤러는 OG 만 읽고, 사람은 같은 주소에서 웹앱이 부팅된다. 셸을 못 가져오면
(웹앱 배포 중 등) 기존 서버 렌더링으로 폴백한다 — 링크가 죽는 것보다 낫다.
WEB_APP_URL 미설정이면 지금까지와 동일하게 동작한다.
케어리포트·업체 미리보기는 이 경로를 쓰지 않는다. 그쪽 수신자는 '내 아이 기록을
받을 보호자' 한 명이라 웹 탐색이 아니라 앱 설치·계정 연결(전화번호 대조 자동
연결)이 목적이고, 그 연결은 앱에만 있다.
deno check 통과.
Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
직전 PR(#128)의 "웹에서 계속 보기" 2차 CTA 를, 링크를 누르면 바로 웹앱이 뜨는 방식으로 바꾼다.
왜 웹앱 주소를 그냥 공유하지 않나
그러면 크롤러가 빈 셸을 받아 카톡 링크 미리보기가 죽는다(Flutter 웹은 클라이언트 렌더링). 그래서 공유 주소는
go.pawmate.kr/s?t=…그대로 두고, 이 함수가 웹앱의index.html을 가져와 아래를 주입해 내려준다.<base href>를 웹앱 절대주소로 — 에셋(main.dart.js·canvaskit.wasm 등)을 그쪽에서 받는다. pmdart 쪽에web/_headers로 CORS 를 열어 뒀다.<title><meta name="pm-post">— 열어야 할 게시글 id3번이 필요한 이유: 주소에는 토큰만 있는데 토큰→게시글 해석은
share_view_load(service_role 전용) 라 웹앱이 스스로 못 한다. 서버가 대신 실어 보낸다.결과: 크롤러는 OG 만 읽고 → 미리보기 유지. 사람은 같은 주소에서 웹앱이 부팅 → 바로 둘러보기.
폴백
WEB_APP_URL미설정이면 지금까지와 완전히 동일하게 동작한다. 즉 이 PR 만 머지·배포해도 사용자 노출 변화는 0 이고, 시크릿을 넣는 순간 전환된다.케어리포트·업체 미리보기는 이 경로를 쓰지 않는다
수신자 성격이 다르다.
자동 연결(
claim_care_reports)은 앱에만 있다. 웹앱으로 보내면 "로그인해도 내 기록이 안 보이는" 상태가 된다.감수한 비용
지금은 링크를 누르면 서버 렌더링 HTML 이 즉시 뜨고 사진·본문이 바로 보인다. 바뀌면 CanvasKit 2MB 를 받는 동안 스플래시를 3~4초 보게 된다(모바일 데이터면 더). 즉시 표시를 내주고 탐색 깊이를 얻는 교환이며, 사용자가 이 비용을 알고 선택했다.
부작용 하나 더: 셸이
go.pawmate.kr오리진에서 뜨므로app.pawmate.kr의 세션(sessionStorage)은 공유되지 않는다. 공유 링크는 게스트 대상이라 감수한다.검증
deno check통과. 실제 동작 확인은WEB_APP_URL설정 후에 가능하다(그전까지는 기존 경로).🤖 Generated with Claude Code