Skip to content

Conversation

@SHcommit
Copy link
Member

@SHcommit SHcommit commented Jun 1, 2024

🚨 Your checklist for this pull request

  •  Make sure you are requesting to pull a topic/feature/bugfix branch (right side). Don't request your master!

  •  Check the commit's or even all commits' message styles matches our requested structure.

📸 [ 스크린샷(선택) ]

공유하기 로직 앱이 백그라운드 상태일때 링크클릭 실행되지 않은 앱일때 링크 클릭 유효하지 않은 포스트일때

📌 [ 요약 ]

  • Closed [피드] 여행 후기 홈 → 썸네일 공유 화면 #75

  • 포스트 공유하기 로직을 구현했습니다.

  • appsFlyer 라이브러리 추가했습니다.

  • 미리보기는 포스트 cell을 이미지화 했었는데, 이 방법보다 앱을 대표하는 이미지로 미리보기하도록 구현하는게 좋을것 같아서 변경했습니다. 이미지 수정 가능!!

  • BasePostViewDelegator를 구현함으로 5개의 클래스에서 각각 동일한 델리게이트 로직들을 준수하고 감싸서 delegate변수를 호출해야하는 로직 간소화

✨ [ 작업 내용 ]

[ universal link ]

  • 유니버셜 링크(onelink)를 클릭할 경우의 상황은 다음과 같습니다.

    • 앱은 깔려있지만 종료된 상태일 때
    • 앱은 깔려있지만 로그인하지 않은 경우
    • 앱을 실행중일때 공유하기 링크 클릭
    • 유효하지 않은 포스트일때
    • 앱을 설치하지 않은 경우
      이 모든 경우에 대한 처리를 구현했습니다.
  • one link를 지원하는 AppsFlyer 라이브러리를 활용하기로한 이유는 다음과 같습니다

    • universal link를 할 경우 aasa 적용 및 도메인이 있어야하는데, 서버 측에서 언제 도메인을 구매할지 여부를 모르기에 이때까지 유니버셜링크 활용이 불가능합니다. -> 로직 구현이 안됩니다.
    • Firesbase Dynamic links는 지원이 중단됩니다.
    • 첫번째 이유가 가장 큰 이유인 것 같습니다.
  • 유니버셜 링크를 사파리에서 복사 후 붙여넣기 할 때 시스템은 앱으로 이동하는 것보다, 사용자의 경험을 위해 웹에서 검색 결과를 보여주도록 설계했다고 합니다.

[ AppsFlyer ]

  • AppsFlyer를 하게될 때 AASA를 앱스플라이어에서 추가하고 유니버셜 링크를 지원해줍니다(도메인이 없어도 지원해줍니다). 이를 통해 xcode에서도 Associated Domains에 sub domain으로 앱스플라이어를 통해 생성한 도메인을 입력하면 됩니다: )

  • iOS13부터 SceneDelegate에서 시스템에서 특정 url이나 scheme일때 앱을 열수 있는 델리게이트 함수들이 호출됩니다. 앱스플라이어는 이런 로직들을 AppDelegate에서 처리하도록 담당했고, 그러기에 앱 델리게이트에서 sceneDeleagte에서 생성한 AppCoordinator인스턴스를 가져올 필요가 있어 추가 선언했습니다.

image

그 예로 위 이미지처럼, 유니버셜 링크에 의해 앱이 열릴때 iOS 13에서는 함수 호출스택보면 SceneDelegate에서 scene(_:openURLContexts:) 델리게이트가 시스템에 의해 호출되지만, 이를 앱스플라이어에서 appDelegate로 넘겨서 AppDelegate에서 처리하는 것을 알 수 있습니다. iOS13 이전과 동일하게 AppDelegate에서 처리되도록 앱스플라이어에서 의도한것 같다는 생각이 듭니다🤩.


[ 도전기 ]

image
  • 예전에도 그렇고.. 시간이 좀 걸렸는데, 기존에 카카오톡에 공유할 때 액티비티 뷰 컨트로러를 사용했을 때 위와같이 이미지, 링크, 제목이 담겼었습니다.
image
  • 카카오톡 전송 완료할 경우 이렇게 위 사진처럼 보여지는게 원하는 결과물인데 앱 내부에서 UIActivityItemSource나 UIActivityViewController들을 만지고 커스텀해도 도저히 위와 같은 결과가 나오지 않아서 해맸었습니다.....
image

특히 이 포스트 링크에서 위와 같은 결과가 나와서. 당연히 Activity관련 라이브러리를 활용하면 되는줄 알았는데 아니었습니다: ( 많이 해맸었는데..

카카오톡의 경우 카카오톡에서 제공하는 공유 기능과 템플릿을 정해야 합니다. 아니면 url에서 Open Graph의 태그들을 작성해주어야 합니다.😅😅

저희 서비스는 웹이 없기에, appsflyer를 사용하기로 했습니다. 유니버셜 링크는 이 링크가 associated domain인지 시스템에서 확인 후 해당 앱을 실행해주거나 앱이 없을 경우 리다이렉션으로 앱스토어를 향하게 합니다. 위에서 나오는 사진들 처럼 링크 아래 부가적인 이미지 정보들까지 관여하지는 않습니다😂

  • 앱스 플라이어에서는 미리보기 템플릿을 제공하기에 임시적으로 사진 블러처리하고 여가 앱 아이콘을 추가했습니다. 미리보기 이미지는 수정이 가능합니다. 이미지는 1200픽셀 x 628픽셀 + 5MB내여야하고, 이는 파이어베이스 Storage에서 이미지 저장 후 url화 해서 공유되도록 구현했습니다. 제목, 설명 다 변경 가능합니다.

[느낀점]

  • url 스킴은 앱이 설치된 유저한테만 가능합니다.
  • 유니버셜 링크는 서버에 AASA를 추가하고 앱 내부에 associated domain을 추가해서, 아이폰 사용자가 링크를 클릭할 때 url의 도메인 경로를 분석하고! 여기서 만약 우리 앱에 등록한 subdomain이라면? 그리고 우리 앱 이 설치됬다면, AASA 파일을 통해 앱으로 넘어오고, 아닐 경우에도 aasa를 통해 앱 사이트와 연관있는지 파악하고 AASA 파일을 통해 사파리에서 웹 페이지를 표시합니다.
  • universal link는 해당 링크를 통해 서버에서 AASA 파일을 확인해서 앱이 설치됬는지 파악하고 파악하면 iOS 13일 경우 SceneDeleagte에서 관련 메서드 호출, 설치 안되면 사파리에서 링크 열도록 합니다.
  • Open Graph 태그들을 작성하지 않는 한, url을 메시지로 전송할 때 아래 또는 상단에 미리보기 등이 로드되지 않는다는점..(이걸 너무 늦게 알았고 정보도 별로 없었습니다)(이것만 알았어도.. 하루이틀안에 뚝딱이었을텐데..ㅠㅠ)
  • 앱스플라이어를 활용한 포스트 정보가 거의 아예 없습니다. (공식문서에 의존)

[ TODO ]

  • 앱 출시하면 앱스플라이어에 앱스토어 제품 페이지를 추가해야합니다.
  • 스프링 서버에서 postId에 대해 해당 포스트 정보를 가져오는 여부가 없습니다. api 추가 구현되면 이를 통해 DefaultPostFetchUseCase에 적용해야합니다.
  • 미리보기 이미지를 수정해야합니다 1200픽셀 * 628 픽셀 (5MB내)

📚 [레퍼런스 (또는 새로 알게 된 내용) 혹은 궁금한 사항]

[ 액티비티 뷰 컨트롤러 ]

[ link ]

[ Open graph ]

[ ETC ]

SHcommit added 30 commits May 28, 2024 01:02
SHcommit added 16 commits June 1, 2024 13:05
…뷰에게 적용하는 로직, 에러가 날 경우 알림창과 함께 뒤로가기 로직 구현.
…업해서 시간이 오 래결렸는데 간단하게 딕셔너리로 이미지만 캐싱하도록 반영해서 초기 로드 속도 개선.
@SHcommit SHcommit added 🖥 View 뷰 관련 작업했어요. 👨‍💻 ViewModel 뷰 모델 관련 작업 📲 ViewController 뷰 컨트롤러 업데이트 🍒 Todo Github issue 해야할 todo list: ] 🥳 Library SwiftPM, CocoaPods등 라이브러리 추가 및 삭제 labels Jun 1, 2024
@SHcommit SHcommit self-assigned this Jun 1, 2024
Copy link
Contributor

@letusHyun letusHyun left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

고생하셨습니다 !

Comment on lines +198 to +199
self?.navigationInfo.send()
self?.loggedInUserUseCaseHandler.send()
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

해당 publisher는 어디에서 구독을 해주나요?

Copy link
Member Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

이 퍼블리셔들은 transfrom(_:) 의 Publishers.MergeMany의 Output Publisher에 머지됩니다 : )

@SHcommit SHcommit merged commit 4e28bee into develop Jun 2, 2024
@letusHyun letusHyun mentioned this pull request Sep 28, 2024
2 tasks
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

🥳 Library SwiftPM, CocoaPods등 라이브러리 추가 및 삭제 🍒 Todo Github issue 해야할 todo list: ] 🖥 View 뷰 관련 작업했어요. 📲 ViewController 뷰 컨트롤러 업데이트 👨‍💻 ViewModel 뷰 모델 관련 작업

Projects

None yet

Development

Successfully merging this pull request may close these issues.

[피드] 여행 후기 홈 → 썸네일 공유 화면

3 participants