Appsflyer

  • 앱 마케팅 성과 측정 및 사용자 행동 분석을 위한 핵심 도구
  • 하나의 링크로 OS(iOS/Android)를 자동 감지하여 앱 설치 시 앱 실행을, 미설치 시 스토어 이동 후 설치 완료 시 특정 페이지로 자동 연결(디퍼드 딥링킹)하는 통합 링크 솔루션을 제공 = 원링크

기획 요약

사용자가 원링크를 활용해서 소셜미디어로 공유 시 모바일 기기에서는 앱으로 이동(앱 미설치시 앱 설치로 이동), 데스크탑에서는 웹사이트로 이동되도록 기능 구현

  1. 사용자가 링크를 클릭하면:
    • 앱 설치됨 → 앱 실행 후 이전에 공유했던 화면으로 이동
    • 앱 미설치 → 스토어로 이동
  2. 사용자에게 보여지는 링크는 짧아야 함 (단, 버튼인 경우는 긴 링크도 OK)

웹에서 해당 정책을 구현하기위해 찾아본 방식

  1. 앱스플라이어 사이트에서 생성한 원링크를 기반으로 쿼리스트링 전달 후 사이트에 접속하는 방식
    공유 링크 생성: 특정 페이지에서 공유 버튼을 누르면, [OneLink 템플릿] 과 함께 원하는 정보를 쿼리 스트링으로 조합하여 최종 공유 URL을 생성 (deep_link_sub1 = 앱에 전달되는 값, 웹으로 접속 시 앱스플라이어에서 누락시킴)

    예시 URL 조합: 
    [Short URL] + ?deep_link_sub1=[원하는 값] ...(원하는 값을 넣은 쿼리스트링)

  2. 데이터 파싱 (Parsing): 웹페이지 로딩 시, URL에 넘어온 쿼리 스트링(deep_link_sub1, af_sub1 등)을 파싱하여 건물 상세 정보 로드

     // middleware.ts
     if (url.searchParams.has('특정 값')) {
         if (req.headers.get('user-agent')?.includes('Mobile')) {
             // 모바일 기기에서는 원링크로 앱이 열리도록 리다이렉트
             return NextResponse.redirect(new URL(원링크 URL));
         }
    
         return  NextResponse.redirect(이동시킬 페이지)
     }
    

    해당 방식으로 링크 접속 시, 데스크탑에서 웹사이트로 이동, 모바일 기기에서는 앱 설치/앱으로 이동 확인

  3. SmartScript 를 호출해서 원링크 생성 함수를 이용해 원링크 제작 → 링크 삽입하는 방식
    해당 방식은 docs에도 나와있듯이 버튼에 삽입했을 때 사용하는 링크로 활용 ⇒ 즉, 전달하는 모든 파라미터를 담은 URL이고, shortURL을 생성해주는 함수는 아님.

    적용해본 결과, 1번 방식과 동일한 결과를 확인했지만 링크가 길어지기때문에 링크 복사 기능에 사용하기에 부적절.
    ** 원링크에서 제공하는 API를 사용해서 shortURL 만들어서 사용하는 방법도 있으나, 플랜 제한이 있음.

개발 진행하면서 확인한 추가 이슈

  1. 페이스북 인앱 브라우저에서 앱 열기 시도 → (앱이 설치되어있어도) 앱 설치 링크로 이동 페이스북의 ‘인앱 브라우저’ 환경이 앱 실행을 위한 딥링크(Deep Link) 신호를 차단하거나 제대로 전달하지 못하기 때문이라는 추측.
    → af_force_deeplink=true 파라미터 추가해서 강제로 열도록 변경해서 해결

  2. Short URL + 파라미터 추가하는 방식(위의 1번 방식)으로 링크 공유하기 후 데스크탑에서 해당 링크 클릭 시 공유할 때 설정한 쿼리스트링이 누락되고 앱스플라이어에서 등록된 URL로만 이동되는 문제가 있음 ( → 쿼리스트링이 누락되었으니 next 미들웨어에서 의도한 페이지로 이동할 수 없음)

    ```
    // 페이스북 공유 시 흐름
    
    1. 사용자가 원링크 공유
    ${원링크 URL}?af_sub1=...
    
    2. AppsFlyer 서버에서 User-Agent 확인
    
    3. 페이스북 크롤러 감지 시
    → af-preview 페이지로 301 리다이렉트
    ${원링크 URL}/af-preview/facebook?url=...&ios_dp=...&android_dp=...
    → 최종 목적지로 302 리다이렉트
    
    4. 게시글 공유했을 때 최종 목적지 + 페이스북 자체적으로 URL을 변경키는 걸로 보임.
    → 데스크탑: url 파라미터의 값으로 최종 리다이렉트
    → 앱: 유저 에이젼트별로 앱 이동
    ```
    
    **해결한 방식은,**<br/>
    
    그래서 공유하는 링크 자체를 변경해서 위 흐름을 타지 않고 ( `공유하기 리다이렉트 시킬 특정 페이지 URL` 공유 → 미들웨어 타도록) Next Middleware에서 판단할 수 있게 플로우 변경.
    

⚠️ 참고할 만한 TIP

크롤러가 어떻게 이동하는 지 디버깅하는 방법 (크롬 기준):

개발자 도구 → 네트워크 컨디션스 → ${개별 크롤러 에이전트} 설정 → 크롤러가 이동하는 과정을 확인할 수 있음.

  • 페이스북: facebookexternalhit/1.1 (+http://www.facebook.com/externalhit_uatext.php)
  • 카카오톡: KAKAOTALK (User-Agent 중 일부)