요약: 서버에서 앱스플라이어로 이벤트를 보내 앱 외부에서 발생하는 모바일 이벤트를 측정합니다.
서버 간 모바일 이벤트 연동 API
iOS 앱의 경우 iOS 14부터는 OS(운영 체제) 파라미터를 전송해야 합니다.
앱스플라이어 플랫폼은 앱스플라이어 SDK와 API로 전송된 모바일 앱 이벤트를 기록하고 어트리뷰션 합니다. S2S API를 이용하여 앱 밖에서 발생하는 이벤트를 받아볼 수 있습니다. 예를 들어, 웹 인터페이스를 사용하여 사용자가 구독을 갱신합니다. 이 구독 갱신 이벤트가 S2S 이벤트로 기록되면, 앱스플라이어 플랫폼 내 대시보드, 로데이터 리포트, 애널리틱스 기능에서 모두 확인할 수 있습니다. PBA 웹 이벤트는 PBA용 S2S 웹 이벤트를 참조하십시오.
앱스플라이어 생성 S2S 이벤트
- S2S 메시지로 보낸 값
- 일부 앱스플라이어 인스톨 어트리뷰션 값 (예: 인스톨 시각, 미디어 소스)
API 사용법
아래 정보를 참고하여 API 호출을 설정하십시오.
S2S API 설명
API 엔드포인트 |
|
HTTP 메서드 | POST |
허용된 콘텐츠 타입 | application/json |
권한관리 |
|
응답 메시지 수신 허용 서버 등록 |
서버에 방화벽을 설정한 경우 응답 메시지를 받으려면 도메인 appsflyer.com을 허용해야 합니다. |
JSON 페이로드(payload) 제한 |
JSON 페이로드(payload) 용량: 최대 1KB |
콜 수 제한 |
POST 제한 용량: 분당 60,000 POST 제한 용량을 늘리시려면, 담당 고객성공매니저에 연락바랍니다. |
코딩 지시사항 |
|
URL로 인코딩하기 |
예약 문자(reserved characters)로 퍼센트 인코딩을 합니다. (https://tools.ietf.org/html/rfc3986#section-2.1) 이 인코딩은 메서드 URL 형성 이전에 수행합니다. |
TLS |
TLS 1.2 이상을 사용합니다. 암호(cipher)가 지원됩니다. |
페이로드(payload) 파라미터
- 페이로드(payload) 파라미터는 하나 혹은 하나 이상의 디바이스 ID(OS에 따라 다름)로 구성됩니다.
-
디바이스 ID를 전송할 수 없다면?
- 사용자가 광고 추적 제한(LAT, Limited Ad Tracking) 기능을 켜거나, iOS14를 사용하고 앱 추적 투명성(ATT, App Tracking Transparency)에서 IDFA 사용에 동의하지 않는 경우와 같이 통제할 수 없는 이유로 기기 ID를 전송할 수 없을 수도 있습니다. IDFV를 사용할 수 있으면 전송합니다.
- 광고 ID/기기 식별자를 전송하지 않으면 다음이 발생할 수 있습니다.
- 포스트백 문제: 미디어 소스는 장치 식별자가 없는 포스트백을 수신하며, 따라서 미디어 소스에서는 이를 사용자와 연결할 수 없습니다.
- 잠재 고객 분할 및 규칙 실패. 잠재 고객 규칙 집합은 식별자를 필요로 합니다. 규칙 집합에서 사용하는 ID 유형에 따라 기기 ID 또는 고객 사용자 ID를 보냅니다.
운영체제 | 식별자 이름 | 설명 |
---|---|---|
iOS
|
idfa |
사용가능시, 디바이스의 IDFA가 나타납니다. 형식: 문자열(string) 예: |
IDFV |
사용가능시, 디바이스의 IDFV가 나타납니다. 형식: 문자열(string) |
|
Android |
advertising_id |
GAID (advertising ID) 사용가능시, 디바이스의 GAID (광고 ID)가 나타납니다. 형식: 문자열(string) 예: |
oaid |
형식: 문자열(string) 예: |
|
amazon_aid |
형식: 문자열(string) |
|
IMEI |
형식: 문자열(string) 예: |
파라미터 | 필수 | 설명 | |||||||||
---|---|---|---|---|---|---|---|---|---|---|---|
appsflyer_id |
예 |
앱 최초 실행시, 앱스플라이어가 발급하는 고유 식별자
|
|||||||||
CUSTOMER_USER_ID |
아니요 |
Customer user ID, 앱 소유주가 설정한 고유한 사용자 ID입니다.
|
|||||||||
att |
아니요 |
중요! 집약형 프라이버시 강화 설정에 따라 |
|||||||||
ip |
아니요 |
이벤트가 발생한 모바일 기기 IP 주소
|
|||||||||
사용 중단 |
|
||||||||||
eventName |
예 |
이벤트 이름을 지정하십시오. 이벤트 이름은 마케터의 요구사항에 따라야 합니다.
|
|||||||||
eventValue |
예 |
값이 없는 이벤트를 전송할 경우,
|
|||||||||
app_version_name |
아니요 |
앱 버전 혹은 앱 식별자(ID)
|
|||||||||
app_store |
아니요 |
안드로이드 앱의 AF_STORE와 동일 앱이 다운로드된 스토어
|
|||||||||
eventTime |
아니요 |
UTC 기준 이벤트 발생 시각
일일 마감
예
|
|||||||||
eventCurrency |
아니요 |
ISO 4217 규정 3자리 문자코드 및 BCN (Bitcoin)
|
|||||||||
bundleIdentifier |
번호* |
고유 앱 식별자. 로데이터에서 파라미터는 번들 ID에 덧붙입니다. [모범 사례] 항상 이 파라미터를 덧붙입니다. 이것은 많은 광고 네트워크에서 캠페인 최적화를 위해 필요합니다.
|
|||||||||
sharing_filter |
아니요 |
sharing_filter 파라미터는 포스트백/API를 통해서 연동 파트너 및 연동된 제 3자와의 S2S 이벤트 공유를 차단합니다. 이 필터는 GDPR과 CCPA 같은 개인정보보호 요건을 준수하기 위해, 혹은 기타 비즈니스 로직에 따라 사용자 (개인정보공유) 옵트아웃을 구현할 때 사용하십시오. sharing_filter는 다음과 같은 옵션이 있습니다.
파트너 ID 목록이 필요하시면 담당 고객 성공 매니저나 hello@appsflyer.com 으로 연락주십시오. |
|||||||||
custom_dimension |
아니요 |
앱스플라이어의 향후 사용을 위해 예약됩니다. |
|||||||||
app_type |
아니요 |
iOS 앱의 경우. 허용 값: app_clip에서 사용자 이벤트가 발생하면 파라미터를 전송합니다. 다른 모든 경우에는 파라미터를 전송하지 않습니다. |
|||||||||
custom_data |
아니요 |
사용자정의 데이터를 앱스플라이어 플랫폼으로 보냅니다. SDK에서 로데이터에서: 형식: JSON, 다음 예제에 설명되어 있습니다. 예:
|
|||||||||
os |
아니요** |
기기 운영 체제 버전. 이 파라미터를 모든 플랫폼에 대해 필수 사항으로 간주합니다. 형식: 문자열(string) 예: 중요! 2021년 7월 1일부터 iOS 앱의 경우 이 파라미터를 전송하지 않으면 iOS 14.5를 실행하는 기기에서 데이터가 전송된 것으로 간주합니다. |
|||||||||
aie |
아니요 |
이 플래그를 사용하여 사용자가 광고주 ID 공유를 선택했는지 여부를 표시합니다. 안드로이드(모든 버전) 또는 iOS 14 이전 버전을 실행하는 기기에 이 필드를 사용합니다. 일러두기! iOS 14.5 이상에서는 att 파라미터를 사용합니다. 이 필드를 다음과 같이 입력합니다.
|
|||||||||
* 많은 광고 네트워크의 최적화에 필요합니다. ** 데이터를 올바로 처리하려면 이 파라미터를 전송해야 합니다. 이전 버전과의 호환성을 위해 이 기능을 강제하지 않으므로 필수 항목으로 표시되지 않습니다. |
curl 예시
curl --location --request POST 'https://api2.appsflyer.com/inappevent/<app_id_placeholder>' \
--header 'authentication: <dev_key_placeholder>
' \
--header 'Content-Type: application/json' \
--data-raw '{
"appsflyer_id": "9999999999999-9999999999999999999",
"advertising_id": "aaaaaaaa-aaaa-aaaa-aaaa-aaaaaaaaaaaa",
"customer_user_id" : "example_customer_id_123",
"ip": "199.0.2.1",
"app_version_name" : "example_version_name",
"eventTime" : "2020-02-25 12:00.000",
"eventName": "af_purchase",
"eventCurrency": "ZAR",
"os" : "14.6",
"att" : 3,
"eventValue":
"{
\"af_revenue\": \"1006\",
\"af_content_type\": \"wallets\",
\"af_content_id\": \"15854\",
\"af_quantity\" :\"1\"
}"
}
'
응답 코드
응답 코드 | 메시지 | 처리 방법 |
---|---|---|
200 | OK |
메시지를 수신하면 최소 데이터 검증 작업이 수행됩니다. 그래서 앱스플라이어에 이벤트가 완전히 다 기록되지 않더라도 OK 응답을 받을 수 있습니다. 이벤트를 디버깅하려면
|
400 | 인증 실패 | 인증 키가 올바른지 확인하십시오. |
400 | appsflyer_id 는 필수 필드입니다. |
|
401 | Unauthorized | authentication(인증) 헤더에 제공된 키가 해당 앱에 대한 <dev_key>가 아닙니다. |
400 | Bad request |
요청(request)이 유효성 검증 기준 중 하나라도 어긋나는 경우 |
400 | 페이로드(payload)가 누락되었거나 파싱(parsing)되지 않았습니다. |
|
500 | 내부 서버 오류 | JSON이 문자열()이고 올바른 형식인지 확인하십시오. |
테스트
유의사항
- 테스트를 할 때, 논오가닉 인스톨의 앱스플라이어 ID를 사용하여 테스트 이벤트 어트리뷰션이 실시간으로 이루어지도록 하십시오. 오가닉 이벤트 어트리뷰션은 몇 시간 지연됩니다.
- 일부 이벤트 필드는 해당 앱 유저의 인스톨 어트리뷰션 이벤트를 이용하여 자동 생성됩니다. 예: 인스톨 시간, 미디어 소스
테스트 기기로 논오가닉 인스톨 어트리뷰션하기
- S2S 메시지를 테스트하기 위한 사용자정의 어트리뷰션 링크를 준비합니다. 링크의 미디어 소스 파라미터를 s2s_test로 설정하고 링크의 광고 ID(GAID, IDFA, 등)를 어트리뷰션 링크 스니펫 예제에 보여준 바와 같이 설정합니다.
- 테스트 기기를 등록합니다.
- 테스트할 앱을 테스트 기기에서 삭제합니다.
- 어트리뷰션 링크를 테스트 기기에 보냅니다.
- 그 링크를 클릭합니다.
- 앱을 설치하고 실행합니다.
- 앱스플라이어 대시보드에서 인스톨이 어트리뷰션되었는지 확인합니다.
- S2S 메시지에 사용할 앱스플라이어 ID를 가져옵니다.
S2S 테스트 메시지 전송하기
- 할당된 앱스플라이어 ID를 이용하여 S2S 메시지를 준비합니다. 아래 S2S 메시지 전송 코드 예시를 참고하십시오.
- 메시지를 전송합니다.
- 다음 방식 중 하나로 발송된 메시지가 앱스플라이어에 어떻게 기록되는지 확인합니다.
- 인앱 이벤트 로데이터 리포트를 다운로드합니다.이벤트 전송 후에 로데이터 보고서에 표시될 때까지 15분 정도 걸립니다.
- 푸시 API ( Postman과 Webhook 사이트와 같은 툴 사용을 고려하십시오.)
- 다음 항목을 확인합니다.
- S2S 메시지로 전송된 값이 리포트에 올바르게 생성되었는지 확인합니다. Event date, Event currency, Event revenue그리고 Event value 필드를 특히 주의해서 확인합니다.
- 어트리뷰션 소스와 인스톨 시간은 앱스플라이어에서 자동으로 생성됩니다.
- SDK 버전 같이 SDK가 제공하는 값은 표시되지 않습니다.
어트리뷰션 링크 예제
Android
https://app.appsflyer.com/<app_id>?pid=s2s_test&c=test&advertising_id=<GAID>
iOS
https://app.appsflyer.com/<app_id>?pid=s2s_test&c=test&idfa=<IDFA>
S2S 메시지 전송 코드 예시
/* using the okhttp package
install from maven https://mvnrepository.com/artifact/com.squareup.okhttp3/okhttp */
import okhttp3.*;
import java.io.IOException;
public class SendRequest {
public static void main(String[] args) {
OkHttpClient client = new OkHttpClient();
MediaType mediaType = MediaType.parse("application/json");
RequestBody body = RequestBody.create(mediaType, " +
"{\r\n\t\"appsflyer_id\": \"<APPS_FLYER_ID>\"," +
"\r\n\t\"customer_user_id\": \"123456\",\r\n\t\"eventName\": \"af_purchase\",\r\n\t\" +
"eventValue\": \"{\\\"af_revenue\\\":\\\"6\\\" ,\\\"af_content_id\\\":\\\"15854\\\"}\",\r\n\t\" +
"af_currency\": \"USD\",\r\n\t\" +
"eventTime\": \"2018-08-10 4:17:00.000\",\r\n\t\");
Request request = new Request.Builder()
.url("https://api2.appsflyer.com/inappevent/<APP_ID>")
.post(body)
.addHeader("Content-Type", "application/json")
.addHeader("authentication", "<YOUR_DEV_KEY>")
.build();
try {
Response response = client.newCall(request).execute();
System.out.println(response.code());
System.out.println(response.body().string());
} catch (IOException e) {
e.printStackTrace();
}
}
}
''' using the requests python package, install using pip install requests '''
import requests
url = "https://api2.appsflyer.com/inappevent/[Insert app ID here]"
payload = "{\r\n \"appsflyer_id\": \"9999999999999999999999\",\r\n\t\"IDFA\":\"999999999999999999999999\",\r\n\t\"customer_user_id\" : \"14mar\",\r\n\t\"ip\": \"10.0.0.1\",\r\n\t\"app_version_name\" : \"example_version_name\",\r\n\t\"eventTime\" : \"2020-04-25 08:59:01.23\",\r\n\t\"eventName\": \"gaf_purchase\",\r\n\t\"eventCurrency\": \"ZAR\",\r\n\t\"eventValue\": \r\n\t\"{\r\n\t\t\\\"af_revenue\\\": \\\"1000\\\",\r\n\t\t\\\"af_content_type\\\": \\\"wallets\\\",\r\n\t\t\\\"af_content_id\\\": \\\"15854\\\",\r\n\t\t\\\"af_quantity\\\" :\\\"1\\\"\r\n }\"\r\n}"
headers = {
'authentication': '[Insert dev key]',
'Content-Type': 'application/json'
}
response = requests.request("POST", url, headers=headers, data = payload)
print(response.text.encode('utf8'))
/* using the request npm package, install using npm install request */
var request = require("request");
var options = { method: 'POST',
url: 'https://api2.appsflyer.com/inappevent/<APP_ID>',
headers:
{
"authentication": '<YOUR_DEV_KEY>',
'Content-Type': 'application/json'
},
body:
{ appsflyer_id: '<APPS_FLYER_ID>',
customer_user_id: '123456',
eventName: 'node_js',
eventValue: '{"node_js":"6" ,"af_content_id":"15854"}',
eventCurrency: 'USD',
ip: '1.0.0.0',
eventTime: '2018-07-09 4:17:00.000'
},
json: true };
request(options, function (error, response, body) {
if (error) throw new Error(error);
console.log(body);
});
/* using the RestSharp package, install using NuGet */
using System;
using RestSharp;
namespace CS
{
class Event
{
static void Main(string[] args)
{
var client = new RestClient("https://api2.appsflyer.com/inappevent/<APP_ID>");
var request = new RestRequest(Method.POST);
request.AddHeader("authentication", "<YOUR_DEV_KEY>");
request.AddHeader("Content-Type", "application/json");
var body = "{\"appsflyer_id\": \"<APPS_FLYER_ID>\"," +
"\"customer_user_id\": \"123456\"," +
"\"eventName\": \"af_purchase\"," +
"\"eventValue\": \"{\\\"af_revenue\\\":\\\"6\\\" ,\\\"af_content_id\\\":\\\"15854\\\"}\"," +
"\"eventCurrency\": \"USD\"," +
"\"eventTime\": \"2018-07-08 4:17:00.000\"
}";
request.AddParameter("undefined", body, ParameterType.RequestBody);
IRestResponse response = client.Execute(request);
// handle response by reading response.StatusCode
Console.WriteLine(response.Content);
}
}
}
$purchase_event = array(
'appsflyer_id' => <APPS_FLYER_DEVICE_ID>,
'idfa' => <IDFA>,
'eventCurrency' => <PURCHASE_CURRENCY>,
'ip' => <DEVICE_ID_ADDRESS>,
'eventTime' => date("Y-m-d H:i:s.000", time())
);
$purchase_event['eventName'] = 'af_purchase';
$purchase_event['eventValue'] = json_encode(array('af_revenue' => <PURCHASE_REVENUE>,
'af_price' => <PURCHASE_PRICE>,
'af_order_id' => <PURCHASE_ORDER_ID>,
'af_currency' => <PURCHASE_CURRENCY>,
'af_content_type' => <PURCHASE_TYPE>,
'af_quantity' => <PURCHASE_QUANTITY>,
'af_content' => <PRODUCT_NAME>,
'af_content_id' => <PRODUCT_ID>),
JSON_UNESCAPED_UNICODE);
$data_string = json_encode($purchase_event);
$ch = curl_init('https://api2.appsflyer.com/inappevent/<YOUR_APP_ID>');
curl_setopt($ch, CURLOPT_CUSTOMREQUEST, "POST");
curl_setopt($ch, CURLOPT_HEADER, true);
curl_setopt($ch, CURLOPT_POSTFIELDS, $data_string);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_HTTPHEADER, array(
'Content-Type: application/json',
'authentication: <YOUR_APPS_FLYER_DEV_TOKEN>',
'Content-Length: ' . strlen($data_string))
);
$result = curl_exec($ch);
$curl = curl_init();
광고 ID/디바이스 ID 전송 중요
- 광고 ID/디바이스 ID는 페이스북과 구글 애즈 같은 SRN(Self Reporting Network)에 포스트백을 전송하기 위한 필수 요소입니다. 이 ID를 보낼 수 없으면, 포스트백을 전송할 수 없는 점을 고려하십시오.
- 앱스플라이어 ID만 전송하더라도, 인앱 이벤트가 기록되며 정확히 어트리뷰션됩니다.
S2S 인앱 이벤트 파라미터
오가닉과 논오가닉 차이
앱스플라이어에서 S2S 인앱 이벤트를 처리할 때, 앱스플라이어 ID를 이용하여 어트리뷰션 필드 값이 자동으로 채워져, 입앱 이벤트 이전에 발생한 연관 인스톨을 확인합니다.
이는 논오가닉 S2S 인앱 이벤트 어트리뷰션에 사용되는 일부 데이터는 오가닉 S2S 인앱 이벤트 어트리뷰션에 사용되지 않음을 의미합니다.
예:
논오가닉 S2S 인앱 이벤트와 오가닉 S2S 인앱 이벤트의 로데이터를 비교하면, 오가닉 이벤트에 없는 데이터가 논오가닉 이벤트에 있는 것을 알 수 있습니다.
논오가닉 인앱 이벤트는 미디어 소스, 캠페인, 어트리뷰션 터치 유형 및 어트리뷰션 터치 시간에 대한 정보를 포함하고 있습니다.
반면에 오가닉 인앱 이벤트는 오가닉 설치 이후 발생합니다. 오가닉 인스톨에는 캠페인, 미디어 소스, 어트리뷰션 터치 유형 및 인스톨 시간에 관련된 데이터가 없습니다.
앱스플라이어 ID - CUID(Customer User ID) 매핑
파라미터 값을 얻는 백엔드 로직이 필요합니다. 앱스플라이어 ID를 얻는 방법은 다음과 같습니다.
- 앱스플라이어 ID는 필수이며, 이벤트를 어트리뷰션 하기 위해 사용됩니다.
- 앲스플라이어 ID는 앱 사용자가 모바일 앱을 처음 설치할 때 발급됩니다.
- 귀사의 CUID를 앱스플라이어 ID와 매핑하기 위해서는 CUID를 해당 앱에 설정해야 합니다.
어떤 사용자가 어떤 이벤트를 수행했는지 간단히 파악하기 위해, 아래 순서대로 매핑 작업을 완료하십시오.
- 앱을 설치한 사용자에 대해 CUID(Customer User ID)를 설정하십시오.
- 앱스플라이어 로데이터 리포트에는 CUID와 앱스플라이어 ID가 모두 표시됩니다. 로데이터 리포트를 받으려면 데이터 전송 툴이나 앱스플라이어 Push API를 사용하십시오.
- 로데이터 리포트를 이용하여 CUID와 앱스플라이어 ID를 매칭하십시오.
- 앱스플라이어 ID는 (안드로이드/iOS) 앱에 연동된 SDK에서 확인할 수 있습니다.
- 귀사의 내부 시스템에서 앱스플라이어 ID를 CUID와 매핑하십시오. (추후 사용을 위해 중요)
앱스플라이어 ID와 CUID를 매핑하면, 사용자를 사용자가 수행한 이벤트와 매칭할 수 있습니다. 그리고 다른 값(event value, event currency, event time 등)을 가져온 다음, 서버 간 연동된 인앱 이벤트를 전송합니다.
Request 본문 예
{
"appsflyer_id": "1415211453000-6513894",
"advertising_id": "38412345-8cf0-aa78-b23e-10b96e40000d",
"eventName": "af_purchase",
"eventValue":
"{
\"af_revenue\": \"6\",
\"af_currency\" \"USD"\",
\"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"
}
이 경우, 앱스플라이어는 콘텐츠 유형과 같은 추가적인 속성 뿐만 아니라 수익(revenue)을 포함한 구매 이벤트를 나타내는 S2S 인앱 이벤트를 수신합니다.
앱스플라이어 ID 가져오기
appsflyer_id
는 서버간 이벤트 메시지에서 필수 파라미터 입니다. 앱스플라이어는 이 파라미터를 이용하여 발생 이벤트에 대해 원래 기기와 어트리뷰션한 미디어 소스의 성과를 측정합니다. 앱스플라이어 ID 확인 방법:
팁
S2S 메시지를 테스트할 때, 로데이터를 확인하려면 미디어 소스, "s2s_test"를 찾으십시오. 이것은 테스트 기기를 나타내며, 이 기기의 앱스플라이어 디바이스 ID가 필요한 ID입니다.
마이너스 수익 전송하기
수익(revenue) 값이 음수인 이벤트가 전송될 수 있습니다. 예를 들어, 구매가 취소되었습니다. af_revenue
파라미터는 구매 취소를 기록하기 위해 마이너스 값을 가질 수 있습니다.
af_quantity
를 사용하는 경우, 귀사의 시스템 로직에 따라 마이너스 값을 표기할 수 있습니다. 앱스플라이어는 af_quantity
를 사용하지 않습니다.
마이너스 수익 예시
{
"eventName": "cancel_purchase",
"eventValue":
"{
\"af_revenue\": \"-6\",
\"af_content_type\": \"wallets\",
\"af_content_id\": \"15854\",
\"af_quantity\" :\"1\"
}",
"eventCurrency": "USD",
}
문제 해결
이벤트가 대시보드에 보이지 않습니다.
- 엔드포인트: 엔드포인트 설정이 올바른지 확인하십시오.
- 페이로드(payload)에 필수 파라미터가 포함되어 있는지 확인하십시오. 여기를 참조하세요.
- 이벤트를 발송하기 위해 사용하는 앱스플라이어 ID가 실제 appsflyer_id이며 특정 앱에 실제로 설치되었는지 확인하십시오. 테스트 ID는 이 문서에 제공되지 않습니다. 여기를 참조하세요.
- 한 S2S 요청(request)에서 복수의 이벤트를 지원하지 않습니다. 각 이벤트는 한 요청에 한 개씩 전송되어야 합니다.
- 개요 대시보드에 표시된 기간은 앱 인스톨 일자(LTV) 기준이며 이벤트 발생일과는 관련이 없습니다.
- 기간(날짜 기준)을 올바르게 선택했는지 확인하십시오.
- 대시보드의 기간이 이벤트 발생일자가 아니라 기기(appsflyer_id)의 앱 설치 날짜와 일치하는지 확인하십시오.
- 단, 이벤트 로데이터 리포트의 기간은 인스톨 발생일이 아니라 이벤트 발생일 기준입니다.
이벤트에 수익(revenue)이 없습니다.
S2S 이벤트를 전송했지만 수익이 기록되지 않았다면 전송한 JSON이 문자열(string)인지 확인하십시오. 가장 중요한 부분은 JSON 안에 있는 이벤트 값 파라미터입니다. 다음 예시와 같이 문자열(string) 형식이어야 합니다.
"{\"af_revenue\":\"6\" ,\"af_content_type\":\"wallets\"}"
문자열로 되어 있지 않으면, 이벤트 값이 올바로 처리되지 않고, 수익이 기록되지 않습니다.
수익 값은 어떤 식으로든 포맷되지 않아야 합니다. 소수점은 포함할 수 있습니다. 통화 기호나 코드 혹은 구분 기호인 ,
를 포함하지 마세요. 수익(revenue) 앞에 -
기호를 붙일 수 있습니다.
- 유효한 값:
123
,-123.45
,123.456
- 잘못된 값:
1,234.56
,1,234
S2S 이벤트 필드 값이 다 보이지는 않습니다.
로데이터 필드는 S2S 호출로 전송된 값을 사용하여 생성됩니다. 그 중 일부 필드는 인스톨 이벤트를 이용하여 생성됩니다. 앱스플라이어 SDK를 사용하여 보고된 인앱 이벤트에서 유사하지만 동일하지 않은 동작이 관찰됩니다. SDK 리포팅 데이터와 S2S 이벤트 데이터 사이에 몇 가지 다른 점이 있습니다. 다음 필드는 S2S 이벤트에서 자동 생성되지 않습니다.
- wifi
- operator
- language
- Device Type
- Device Category
- App Version:
app_version_name
를 사용할 수 있습니다. - App Name