5.2 KiB
5.2 KiB
AppsFlyer 실제 SDK 콜백 검증
1. 검토 정보
- 일자: 2026-10-29. 대상: 제한적으로 승인된 P1-T2, 제품 구현 전 SDK 검증.
- 승인 범위: AppsFlyer 테스트 OneLink 해석만. 이벤트 API·앱 서버·푸시 발송·운영 앱 실행은 제외.
- 실제 SDK: 설치된 iOS Simulator artifact 6.17.5 (build 2), x86_64, iOS 17.5의 작업 소유 임시 시뮬레이터.
- 현재 결과: 긴 링크의 수동 API와 UDL 공존 동작 확인. 단축 링크의 정상 해석은 아직 입증하지 못함.
2. 실행 방식
UIKit과 AppsFlyer만 연결한 별도 임시 앱에서 AppsFlyerLibDelegate와 DeepLinkDelegate를 설정한 뒤 performOnAppAttribution(with:)를 호출했다. 실제 SDK callback만 JSONL로 기록했다. SodaLive 앱 소스나 이벤트 API를 실행하지 않았으며 start, logEvent, 푸시 관련 API는 호출하지 않았다.
입력:
- 긴 링크:
https://voiceon.onelink.me/RkTm?pid=sdk-validation&deep_link_value=event-detail&deep_link_sub5=123 - 단축 샘플:
https://onelink-basic-app.onelink.me/H5hv/6d66214a, AppsFlyer 공식 legacy 문서의 공개 예시. 현재 유효성을 별도로 보장하는 링크는 아니다.
실행은 매번 새 앱 프로세스로 분리했다. 설정 없는 실행과 합성 SDK 설정 실행을 구분하고, UDL delegate 없는 legacy-only 대조군도 확인했다. 실제 앱 자격증명은 로드하지 않았다.
3. 실제 관찰
| 구성 | 입력 | 실제 manual 호출 이후 callback | 결과 |
|---|---|---|---|
| UDL + legacy delegate | 긴 링크 | didResolveDeepLink |
found, event-detail, ID 123 |
| UDL + legacy delegate + 합성 설정 | 긴 링크 | didResolveDeepLink |
found, event-detail, ID 123 |
| legacy delegate만 | 긴 링크 | onAppOpenAttribution |
success, event-detail, ID 123 |
| UDL + legacy delegate | 단축 샘플 | didResolveDeepLink |
failure, NSError domain com.appsflyer.sdk.deeplink, code 0 |
| UDL + legacy delegate + 합성 설정 | 단축 샘플 | didResolveDeepLink |
같은 failure, 이벤트 값 없음 |
| legacy delegate만 | 단축 샘플 | onAppOpenAttributionFailure |
같은 오류 domain/code |
SDK 헤더의 enum은 notFound=0, found=1, failure=2다. 긴 링크의 실제 기록:
{"callback":"delegate-check","status":"legacySame-true-udlSame-true-udlPresent-true"}
{"callback":"performOnAppAttribution","status":"invoking"}
{"callback":"didResolveDeepLink","status":"AFSDKDeepLinkResultStatus(rawValue: 1)","eventvalue":"event-detail","ID":"123","errorclass":"none"}
위 JSON은 동일 실행의 허용된 필드만 발췌한 기록이다. 원래 callback을 테스트 코드가 직접 호출한 것이 아니라 실제 SDK가 delegate에 전달했다.
4. 혼동 방지
- 첫 harness는 UDL delegate setter 직후 동기 identity assertion이 실패해 URL 해석 호출 전에 종료됐다. 이는 SDK URL 실패 사례로 집계하지 않는다. 이후 실제 호출 직전 양 delegate 등록을 관찰하여 검증했다. 테스트의 대기 시간은 제품 코드에 적용할 요구사항이 아니다.
- UDL 설정 직후 manual 호출 이전의 notFound/failure callback도 관찰됐다. 이 callback은 manual 요청 결과와 구분했다. manual 긴 링크 결과는 그 뒤의 found + event-detail/123이다.
- 긴 링크 파라미터는 SDK가 URL 자체에서 추출할 수 있으므로, 이 성공을 AppsFlyer 서버의 링크 존재/설정 검증 성공이라고 표현하지 않는다.
- 단축 샘플의 실패만으로 SDK가 단축 링크를 지원하지 않는다고 결론내리지 않는다. 정상 단축 fixture의 성공 결과는 확보되지 않았다.
5. 코드·증거 확인
상위 실행자는 임시 Probe.swift, build/run 스크립트, 실제 JSONL 결과 및 SDK의 AppsFlyerDeepLinkResult.h enum을 직접 읽었다. 제품 소스 변경이나 신규 앱 기능 완료를 의미하지 않는다. 리소스 정리 및 최종 gate 판정은 후속 기록한다.
6. 최종 판정과 정리
- 콜백 공존과 긴 URL 파라미터 전달: 확인. 정상 short 해석: 미입증. 전체 P1-GATE는 유지하며 유효한 이벤트용 단축 OneLink가 다음 검증 입력이다.
- SDK simulator 바이너리 SHA-256:
4c940fc1670de4e05bc55d8e0436130c57ff4878ddd1b6778029a5d99d69205c. 이전 검토의 디바이스 slice와는 다른 바이너리이며 버전은 동일하다. - 소유 bundle
local.sdkprobe.eventlink.20261029.a제거, 소유 iOS17.5 simulator shutdown/delete 모두 exit 0. 상위 실행자도 UUID0E44E774-8669-4513-A12D-C8FA4F331A03의 simulator inventory 부재와 잔여 앱 프로세스 부재를 직접 확인했다. 기존 사용자 기기는 변경하지 않았다. - SDK 실제 callback 로그 7개에 대한 사후 검증은 모든 케이스에서 관찰된 callback 선택과 필드 유무가 일치했다. 이는 short 성공 7건이라는 뜻이 아니라 성공/실패를 포함한 실제 로그의 정합성 검사다.
- 테스트 앱·시뮬레이터 제거 확인 후 일회성 harness·binary·cache·raw 로그가 있던 소유 임시 root를 제거했고 부재를 확인했다. 실제 관찰 결과와 제한은 이 문서와 계획에 보존했다.