서버 간 이벤트 API

소개

이 API를 사용하면 앱의 외부 또는 내부에서 발생하였으나 AppsFlyer SDK를 통해서는 전송할 수 없는 이벤트를 전송할 수 있습니다. 예를 들면, 웹과 모바일 인터페이스 양쪽의 인터페이스가 있는 경우에 AppsFlyer에서 양쪽 미디어의 이벤트를 모두 기록할 수 있습니다.

 참고

콘텐츠 형식은 application/json으로 설정해야 합니다.

URL:https://api2.appsflyer.com/inappevent/{app_id}

안드로이드 예:https://api2.appsflyer.com/inappevent/com.appsflyer.myapp

iOS 예: https://api2.appsflyer.com/inappevent/id123456789

iOS의 앱 ID가 "id"로 시작되는 것에 특히 유의하세요. 이렇게 하지 않으면, 요청은 HTTPS 200 OK로 종료되지만 이벤트가 등록되지 않게 됩니다.

 중요!

JSON 페이로드의 최대 크기는 1K를 초과하지 않아야 합니다.

JSON 페이로드는 문자열로 넘겨야하고 이벤트 값은 문자열이어야 합니다.

JSON 페이로드가 "af_events_api" :"true" 파라미터를 포함하는지 확인해야 합니다.
이 파라미터는 이벤트가 리치 이벤트 구조로 되어 여러 파트너로 이벤트 값을 자동 매핑할 수 있도록 보장합니다.

다음 예를 참고하세요.

메서드: POST

헤더 - "authentication"= {dev-key}

dev key는 대시보드 >> App Settings >> Dev Key에서 확인할 수 있습니다.

iOSAndroid
{
  "appsflyer_id": {AppsFlyer Device ID }, // e.g. 1415211453000-6513894
  "idfa":{idfa},
  "customer_user_id": {customer_user_id}, // Customer User ID optional parameter
  "bundle_id":{bundle_id},
  "eventName": {The event name}, // e.g. "af_purchase"
  "eventValue": {A JSON containing a rich in-app event value - must be stringfied},
  "{

    \"af_revenue\":\"6\",
    \"af_content_type\":\"wallets\",
    \"af_content_id\":\"15854\"

  }",
  "eventCurrency": {Event currency}, // e.g "USD"
  "ip": {device IP},
  "eventTime": {Event timestamp in UTC +0}, // e.g "2014-05-15 12:17:00.000"
  "af_events_api" :"true"
}

 참고

모든 예약된 문자(https://tools.ietf.org/html/rfc3986#section-2.1)는 URI가 구성되기 전에 퍼센트 인코딩해야 합니다.

파라미터

  1. 필수 파라미터: appsflyer_id (AppsFlyer Device id), eventName, eventValue and af_events_api
  2. 권장 파라미터:iOS는 idfa,안드로이드는 advertising_id
    외부 파트너와 오가닉 사용자의 인앱이벤트를 매핑하려면 이 파라미터는 필수입니다. 오디언스와 같은 몇몇 기능은 사용자를 세분화하고 네트워크를 업데이트하기 위해 기기 ID에 의존합니다.
  3. 옵션 - eventValue는 값을 비워둘 수 있습니다. 예: "eventValue":"", (공백 입력 필요 없음)
  4. 옵션 - IP 주소(ip)는 (이벤트가 발생할 때) 모바일 기기의 IP이어야 합니다.
  5. 옵션 - 고객 사용자 ID 필드(customer_user_id)는 로데이터 보고서에서 고객 사용자 ID 필드와 매핑되는 사용자 식별 파라미터입니다. 고객 사용자 ID SDK API는 이 값을 인앱이벤트를 생성하는 모든 SDK에 자동으로 첨부합니다. S2S 이벤트에서도 같은 기능을 이용하기 위해서는 이 필드가 포함되었는지 확인해야 합니다.

파라미터를 위한 데이터 준비

위에서 언급된 파라미터에 대한 특정한 값을 얻으려면 백엔드 논리가 필요합니다. 아래에서 이러한 값을 얻기 위한 권장 순서를 볼 수 있습니다.

AppsFlyer ID와 고객 사용자 ID 매핑

AppsFlyer ID는 서버간 인앱이벤트 전송 시 필수 파라미터입니다. 어떤 사용자가 어떤 이벤트를 수행했는지 간단하게 파악하기 위해서는 아래 순서대로 실행합니다.

  1. 사용자가 앱을 설치할 때 고객 사용자 ID 설정
  2. 설치에 대한 로데이터를 데이터 내보내기 또는 풀 API를 통해서 다운로드
  3. 내부 시스템의 사용자 ID와 로데이터 보고서의 고객 사용자 ID를 매칭시켜 AppsFlyer ID 가져오기
  4. 내부의 고객 사용자 ID를 AppsFlyer ID와 매핑하기(이후 사용 시 중요)

AppsFlyer ID와 내부 고객 사용자 ID를 매핑하면 간단하게 어떤 사용자가 어떤 이벤트를 수행했는지 알 수 있습니다. AppsFlyer ID와 다른 값(이벤트 값, 이벤트 통화, 이벤트 시간 등)을 가져온 후, 서버간 인앱이벤트를 전송합니다.

이벤트 타이밍

서버간 이벤트는 실시간으로 전송하거나 이벤트 타임스탬프와 함께 전송할 수 있습니다.

(UTC 표준 시간대에서) 이벤트 발생 시간을 지정하기 위해서 eventTime파라미터를 선택적으로 사용할 수 있습니다. 만약 메시지에 이 파라미터가 포함되지 않으면, AppsFlyer는 수신한 HTTPS 메시지의 타임스탬프를 사용합니다.

eventTime 형식: "yyyy-MM-dd HH:mm:ss.SSS" (예: "2014-05-15 12:17:00.000")

타임스탬프와 함께 이벤트를 전송할 때, 이벤트를 실제 타임스탬프(실제로 발생한 시각)로 기록하려면, 다음날 02:00 AM(UTC) 까지 AppsFlyer로 전송해야 합니다.

2:00 AM까지 전송되지 않은 지나간 타임스탬프의 이벤트는 전송된 시간으로 기록됩니다.

2 AM UTC +0 이전에 타임스탬프와 함께 전송된 이벤트

이벤트 발생: 2 May @ 22:00

AppsFlyer 서버로 이벤트 전송: 3 May @ 01:00

이벤트가 발생한 실제 시간(2 May @ 22:00)으로 AppsFlyer 플랫폼에 기록됩니다.

2 AM UTC +0 이후에 타임스탬프와 함께 전송된 이벤트

이벤트 발생: 2 May @ 22:00

AppsFlyer 서버로 이벤트 전송: 4 May @ 09:00

이벤트가 발생한 시간이 아닌 AppsFlyer 서버로 전송된 시간(4 May @ 09:00)으로 AppsFlyer 플랫폼에 기록됩니다.

미래의 타임스탬프와 함께 전송된 이벤트

미래의 타임스탬프와 함께 전송된 이벤트는 페이로드에 있는 이벤트 타임스탬프가 아닌 AppsFlyer에 전송된 시간으로 기록됩니다.

이벤트 타이밍 - 시각화된 타임라인

Server-to-Server-Events.PNG

 참고

S2S 요청의 최대 개수는 분당 60K 또는 초당 1K입니다. 다른 요구 사항이 있는 경우에는 담당 AppsFlyer Customer Success 매니저에게 연락하세요.

서비스 반환 코드

200
OK AppsFlyer 시스템이 요청을 처리한 경우
401
unauthorized 인증 헤더에 포함된 키가 해당 앱의 dev key가 아닌 경우
400
Bad request request가 최소 하나 이상의 검증에서 실패한 경우
500
Internal server error 서버 오류

서버가 방화벽으로 보호되고 있는 경우에 반환 메시지를 수신하기 위해서는 AWS IP address Ranges에서 들어오는 응답을 허용 목록에 포함시켜야 합니다.

Request 본문 예

{
  "appsflyer_id": "1415211453000-6513894",
	"advertising_id": "38412345-8cf0-aa78-b23e-10b96e40000d",
	"eventName": "af_purchase",
	"eventValue": 
	"{
		\"af_revenue\": \"6\",
		\"af_content_type\": \"wallets\",
		\"af_content_id\": \"15854\",
		\"af_quantity\" :\"1\"
   }",
	"eventCurrency": "USD",
	"ip": "1.2.3.4",
	"eventTime": "2014-05-15 12:17:00.000",
	"af_events_api" :"true"
}


이 경우 AppsFlyer는 콘텐츠 유형과 같은 추가적인 속성 뿐만 아니라 수익에 해당하는 구매 이벤트를 포함한 S2S 인앱이벤트를 수신합니다.

특별한 경우

마이너스 수익 전송하기

구매 취소나 환불과 같은 마이너스 수익에 대한 이벤트를 전송하려는 경우 수익 파라미터에 마이너스 값을 지정할 수 있습니다. 예를 들면, 다음과 같습니다.

{
  "appsflyer_id": "1415211453000-6513894",
	"advertising_id": "38412345-8cf0-aa78-b23e-10b96e40000d",
	"eventName": "cancel_purchase",
	"eventValue": 
	"{
		\"af_revenue\": \"-6\",
		\"af_content_type\": \"wallets\",
		\"af_content_id\": \"15854\",
		\"af_quantity\" :\"1\"
   }",
	"eventCurrency": "USD",
	"ip": "1.2.3.4",
	"eventTime": "2014-05-15 12:17:00.000",
	"af_events_api" :"true"
}

이벤트 값이 없는 이벤트 전송하기

이벤트 값이 없는 이벤트를 전송하려면 이벤트 값으로 다음과 같이 빈 문자열을 넘깁니다. "event_value":""

광고주의 설정에 따라, 고급 타겟팅, 최적화, 오디언스 생성을 위해서 AppsFlyer가 리치 인앱이벤트를 미디어소스로 전송할 수 있습니다.

AppsFlyer Device ID 가져오기

appsflyer_id는 서버간 이벤트 메시지에서 필수 파라미터입니다. 이 파라미터는 AppsFlyer에서 이벤트를 원래 기기 및 어트리뷰션한 미디어 소스의 성과 측정을 위해서 사용합니다.

이 ID를 받기 위한 몇 가지 방법이 있습니다.

  1. AppsFlyer SDK API를 사용하여 모바일 기기에서 받기(안드로이드/iOS)
  2. Push 또는 Pull API를 통해 받기(Push API또는Pull API에 대한 자세한 내용은 링크를 클릭합니다)
  3. 로데이터 설치 보고서 가져오기

 

로데이터나 Push/Pull API를 사용하여 S2S 메시지를 테스트할 때는 기록에서 미디어소스 "s2s_test"를 확인하세요. 이것은 테스트 기기를 나타내며, 이 기기의 AppsFlyer Device ID가 필요한 ID입니다.

오가닉과 논오가닉 차이

S2S 인앱이벤트를 전송할 때, AppsFlyer는 자동으로 이벤트를 추가 데이터와 연결합니다. 추가 데이터는 인앱이벤트보다 먼저 발생한 설치 이벤트로부터 받습니다.

이것은 AppsFlyer가 논오가닉 S2S 인앱이벤트와 연결하는 일부 데이터가 오가닉 S2S 인앱이벤트와 연결되지 않는다는 것을 의미합니다.

 

예를 들어, 논오가닉 S2S 인앱이벤트와 오가닉 S2S 인앱이벤트의 로데이터를 비교하면, 오가닉 이벤트에 없는 데이터가 논오가닉 이벤트에 있는 것을 알 수 있습니다.

논오가닉 인앱이벤트는 미디어 소스, 캠페인, 어트리뷰션 터치 유형 및 어트리뷰션 터치 시간에 대한 정보를 포함하고 있습니다.

반면에 오가닉 인앱이벤트는 오가닉 설치를 따릅니다. 오가닉 설치는 캠페인, 미디어 소스 또는 어트리뷰션 터치 유형 및 시간에 관련된 데이터가 없습니다.

도움이 되었습니까?
12명 중 4명이 도움이 되었다고 했습니다.