Khái quát: Gửi các sự kiện từ máy chủ của bạn tới AppsFlyer để đo lường các sự kiện trên thiết bị di động xảy ra bên ngoài ứng dụng.
API sự kiện máy chủ đến máy chủ cho thiết bị di động
Đối với các ứng dụng iOS, bắt đầu từ iOS 14, bạn phải gửi thông số OS (hệ điều hành).
Nền tảng AppsFlyer sẽ phân bổ và ghi nhận các sự kiện trong ứng dụng di động mà AppsFlyer SDK và API đã gửi lên. Hãy sử dụng API S2S để báo cáo những sự kiện diễn ra ngoài phạm vi ứng dụng; ví dụ: người dùng gia hạn gói đăng ký thông qua giao diện web. Sau khi được ghi nhận, các sự kiện S2S sẽ xuất hiện trên toàn nền tảng, bao gồm bảng điều khiển, dữ liệu thô và dữ liệu phân tích. Để biết những sự kiện web cho PBA, hãy xem S2S Web cho PBA.
AppsFlyer sẽ điền vào các sự kiện S2S với:
- Những giá trị gửi trong thông báo S2S
- Một số giá trị phân bổ lượt cài đặt AppsFlyer, chẳng hạn như thời gian cài đặt, nguồn truyền thông.
Hướng dẫn sử dụng API
Tạo lệnh gọi API bằng thông tin có trong các phần sau.
Thông tin về API S2S
Điểm cuối API |
|
Phương thức HTTP | POST |
Loại nội dung được chấp nhận | application/json |
Ủy quyền |
|
Đưa máy chủ vào danh sách cho phép để nhận thông báo phản hồi |
Nếu máy chủ được bố trí sau tường lửa, thì bạn phải đưa miền appsflyer.com vào danh sách cho phép để có thể nhận được thông báo phản hồi. |
Giới hạn tải trọng JSON |
Kích cỡ tải trọng JSON: tối đa 1KB |
Giới hạn tỷ lệ |
Khối lượng giới hạn đối với POST: 60.000 POST/phút. Để tăng ngưỡng giới hạn này, hãy liên hệ với CSM. |
Hướng dẫn mã hóa |
|
Mã hóa URL |
Mã hóa (tỉ lệ phần trăm) các ký tự dùng để mã hóa (https://tools.ietf.org/html/rfc3986#section-2.1) trước khi tạo URL phương thức. |
TLS |
Sử dụng TLS 1.2 trở lên. Các thuật toán mã hóa được hỗ trợ |
Các thông số về tải trọng
- Thông số tải trọng bao gồm một hoặc nhiều mã định danh thiết bị (tùy thuộc vào hệ điều hành).
-
Điều gì sẽ xảy ra nếu tôi không thể gửi mã định danh thiết bị?
- Bạn có thể không gửi được mã định danh vì một lý do ngoài tầm kiểm soát của mình, chẳng hạn như do người dùng đã giới hạn theo dõi quảng cáo (LAT) hoặc sử dụng iOS 14 và không đồng ý ATT. Nếu có sẵn IDFV, hãy gửi đi.
- Nếu không gửi ID quảng cáo/mã định danh của thiết bị, có thể xảy ra những vấn đề sau:
- Vấn đề đăng lại: Nguồn truyền thông sẽ nhận được đăng lại nhưng không có mã định danh của thiết bị; do đó, nguồn truyền thông không thể liên kết đăng lại với người dùng.
- Phân chia đối tượng và quy tắc không thành công. Bộ quy tắc đối tượng yêu cầu mã định danh. Cách tốt nhất luôn là gửi ID thiết bị hoặc customer user ID theo loại ID mà bộ quy tắc của bạn sử dụng cho mọi sự kiện S2S. Tuy nhiên, nếu mã định danh AppsFlyer đã được gửi qua các phương tiện khác (SDK hoặc sự kiện S2S trước đây), các sự kiện trong ứng dụng mới sẽ được khớp với đúng người dùng ngay cả khi không có mã định danh nào được gửi cùng với sự kiện.
Mã định danh của thiết bị
Hệ điều hành | Tên mã định danh | Mô tả |
---|---|---|
iOS
|
idfa |
Hãy điền bằng IDFA thiết bị, nếu có thể. Định dạng: Chuỗi Ví dụ: |
idfv |
Hãy điền bằng IDFA thiết bị, nếu có thể. Định dạng: Chuỗi |
|
Android |
advertising_id |
Hãy điền bằng GAID thiết bị (ID quảng cáo), nếu có thể Định dạng: Chuỗi Ví dụ: |
oaid |
Định dạng: Chuỗi Ví dụ: |
|
amazon_aid |
Định dạng: Chuỗi |
|
imei |
Định dạng: Chuỗi Ví dụ: |
Tham số | Bắt buộc | Mô tả | |||||||||
---|---|---|---|---|---|---|---|---|---|---|---|
appsflyer_id |
Có |
Là mã định danh duy nhất do AppsFlyer tạo khi ứng dụng khởi chạy lần đầu.
|
|||||||||
customer_user_id |
Không |
Customer user ID, là mã định danh người dùng duy nhất do chủ sở hữu ứng dụng thiết đặt.
|
|||||||||
att |
Không |
Trạng thái cấp quyền ATTrackingManager của iOS
Lưu ý! Chúng tôi khuyến nghị bạn nên điền |
|||||||||
ip |
Không |
Địa chỉ IP của thiết bị di động trong khi xảy ra sự kiện.
|
|||||||||
Ngưng hỗ trợ |
|
||||||||||
Tên của sự kiện |
Có |
Xác định rõ tên sự kiện. Đảm bảo rằng tên sự kiện tuân thủ đúng các yêu cầu của nhà tiếp thị.
|
|||||||||
Giá trị của sự kiện |
Có |
Nếu bạn gửi một sự kiện không có giá trị, thì hãy gửi:
|
|||||||||
app_version_name |
Không |
Mã định danh hoặc phiên bản ứng dụng của bạn.
|
|||||||||
app_store |
Không |
Tương đương với AF_STORE trong ứng dụng Android. Cửa hàng mà ứng dụng đã được tải xuống.
|
|||||||||
Thời gian sự kiện |
Không |
Thời gian xảy ra sự kiện theo múi giờ UTC.
Cuối ngày:
Ví dụ:
|
|||||||||
eventCurrency |
Không |
Mã tiền tệ sử dụng mã 3 ký tự ISO 4217 và BCN (Bitcoin)
|
|||||||||
bundleIdentifier |
Không* |
Mã định danh ứng dụng duy nhất. Trong dữ liệu thô, thông số sẽ điền ID gói. [Phương pháp hay nhất] Luôn điền thông số này. Nhiều mạng quảng cáo yêu cầu thông số này để tối ưu hóa chiến dịch.
|
|||||||||
sharing_filter |
Không |
Bộ lọc chia sẻ chặn việc chia sẻ các sự kiện S2S thông qua đăng lại/API với các đối tác tích hợp và hoạt động tích hợp của bên thứ ba khác. Sử dụng bộ lọc để đáp ứng các yêu cầu theo quy định như GDPR và CCPA, để tuân thủ cơ chế lựa chọn không tham gia của người dùng và vì các lý do về logic kinh doanh khác. sharing_filter có các tùy chọn sau:
Để biết danh sách id đối tác, hãy liên hệ với bộ phận hỗ trợ CSM hoặc AppsFlyer của bạn. |
|||||||||
custom_dimension |
Không |
Dành riêng cho AppsFlyer sử dụng trong tương lai |
|||||||||
app_type |
Không |
Đối với ứng dụng iOS. Giá trị được phép: Nếu sự kiện người dùng diễn ra trong app_clip, hãy gửi thông số. Trong tất cả các trường hợp khác, đừng gửi thông số. |
|||||||||
custom_data |
Không |
Gửi dữ liệu tùy chỉnh đến nền tảng AppsFlyer. Tương tự như gửi dữ liệu từ SDK bằng Trong dữ liệu thô: điền trường Định dạng: JSON, được minh họa trong ví dụ sau. Ví dụ:
|
|||||||||
os |
Không** |
Phiên bản hệ điều hành của thiết bị. Coi thông số này là bắt buộc đối với tất cả các nền tảng. Định dạng: Chuỗi Ví dụ: Lưu ý! Kể từ ngày 1 tháng 7 năm 2021, đối với các ứng dụng iOS, nếu bạn không gửi thông số này, thì chúng tôi sẽ cho rằng dữ liệu đến từ một thiết bị chạy iOS 14.5. |
|||||||||
aie |
Không |
Sử dụng cờ hiệu này để cho biết người dùng có lựa chọn không chia sẻ ID nhà quảng cáo của họ hay không. Sử dụng trường này cho các thiết bị chạy Android (tất cả các phiên bản) hoặc phiên bản iOS 14 trở về trước. Lưu ý! Đối với phiên bản iOS 14.5 trở lên, hãy sử dụng thông số att. Điền vào trường này như sau:
|
|||||||||
* Nhiều mạng quảng cáo cần đến nhằm mục đích tối ưu hóa ** Để kích hoạt tính năng xử lý dữ liệu chính xác, bạn phải gửi thông số này. Vì lý do tương thích ngược, chúng tôi không thực thi điều này, vì vậy tùy chọn này không được đánh dấu là bắt buộc. |
Ví dụ về 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\"
}"
}
'
Mã phản hồi
Mã Phản hồi | Thông báo | Cách xử lý |
---|---|---|
200 | OK |
Sau khi nhận được thông báo, hệ thống sẽ thực hiện quy trình xác thực dữ liệu tối thiểu. Như vậy, bạn có thể nhận được phản hồi là OK ngay cả khi hệ thống chưa thực sự ghi nhận sự kiện vào AppsFlyer. Để gỡ lỗi cho sự kiện:
|
400 | Không thể xác thực | Đảm bảo rằng mã khóa xác thực đã chính xác. |
400 | appsflyer_id là trường bắt buộc |
|
401 | Không được phép | Khi mã khóa được cung cấp trong tiêu đề xác thực không phải là mã khóa <dev_key> cho ứng dụng này. |
403 | Cấm | Khi ID ứng dụng trong URL không chính xác. |
400 | Lỗi yêu cầu |
Khi yêu cầu không đáp ứng ít nhất một trong các tiêu chí về xác thực. |
400 | Tải trọng bị thiếu hoặc không phân tách được |
|
500 | Lỗi Máy chủ Nội bộ | Xác minh rằng JSON đã được tạo chuỗi() và định dạng chính xác. |
Thử nghiệm
Cân nhắc:
- Nếu muốn thử nghiệm, hãy sử dụng ID AppsFlyer của lượt cài đặt không tự nhiên để sự kiện thử nghiệm tiến hành phân bổ trong thời gian thực. Các sự kiện tự nhiên trễ một vài giờ khi phân bổ.
- Hệ thống sử dụng sự kiện phân bổ lượt cài đặt của người dùng để điền dữ liệu vào một số trường sự kiện. Ví dụ, thời gian cài đặt và nguồn truyền thông.
Để phân bổ thiết bị thử nghiệm là lượt cài đặt không tự nhiên:
- Tạo đường dẫn phân bổ tùy chỉnh để thử nghiệm các thông báo S2S. Đặt thông số nguồn truyền thông trên liên kết thành s2s_test và cài đặt id quảng cáo (GAID, IDFA, v.v.) trên đường dẫn như được minh họa trong các đoạn mã của đường dẫn phân bổ ví dụ.
- Đăng ký thiết bị thử nghiệm
- Gỡ cài đặt ứng dụng khỏi thiết bị thử nghiệm.
- Gửi liên kết tới thiết bị thử nghiệm.
- Nhấp vào liên kết.
- Cài đặt, sau đó khởi chạy ứng dụng.
- Trong bảng điều khiển, hãy kiểm tra xem lượt cài đặt đã được phân bổ chưa.
- Tìm nạp ID AppsFlyer để sử dụng trong thông báo S2S của bạn.
Để gửi thông báo thử nghiệm S2S:
- Sử dụng ID AppsFlyer được phân bổ để tạo thông báo S2S. Xem nội dung dưới đây để biết các ví dụ về mã.
- Gửi thông báo.
- Thực hiện một trong những thao tác sau để xem cách hệ thống ghi nhận thông báo trong AppsFlyer:
- Tải về báo cáo dữ liệu thô của các sự kiện trong ứng dụng. Chờ tối đa 15 phút sau khi gửi sự kiện để sự kiện xuất hiện trong báo cáo dữ liệu thô.
- API Push (Hãy cân nhắc đến việc sử dụng các công cụ như trang Postman và Webhook).
- Kiểm tra và xác nhận:
- Các giá trị được gửi trong thông báo S2S đã được điền chính xác trong báo cáo. Đặc biệt lưu ý đến các trường Ngày sự kiện, Tiền tệ sự kiện, Doanh thu sự kiện và Giá trị sự kiện.
- Nguồn phân bổ và thời gian cài đặt sẽ do AppsFlyer điền.
- Hệ thống sẽ không điền những giá trị được chính SDK cung cấp, chẳng hạn như phiên bản SDK.
Đường dẫn phân bổ ví dụ
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>
Mã mẫu khi gửi thông báo 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();
}
}
}
''' sử dụng các yêu cầu gói python, cài đặt bằng yêu cầu cài đặt pip '''
import requests
url = "https://api2.appsflyer.com/inappevent/[Insert app ID here]"
payload = "{\n\"appsflyer_id\": \"9999999999999999999999\",\n\"eventName\": \"test_purchase_cancel\",\n\"eventCurrency\": \"KRW\",\n\"eventValue\": \"{\\\"af_revenue\\\": \\\"-33000\\\"}\"\n}\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();
AppsFlyer Script chạy trên Github
Việc gửi ID quảng cáo/mã định danh thiết bị là rất quan trọng
- ID quảng cáo/mã định danh thiết bị là bắt buộc để đảm bảo đăng lại đến các SRN như Facebook và Google Ads. Nếu bạn không thể gửi ID, thì lưu ý rằng bạn cũng không thể gửi đăng lại.
- Nếu bạn chỉ gửi ID AppsFlyer, các sự kiện trong ứng dụng sẽ được ghi nhận và phân bổ một cách chính xác.
Điền các thông số
Sự khác biệt giữa Tự nhiên và Không tự nhiên
Khi AppsFlyer xử lý các sự kiện trong ứng dụng S2S, hệ thống sẽ sử dụng ID AppsFlyer để điền vào các trường phân bổ nhằm xác định sự kiện cài đặt được liên kết đứng trước các sự kiện trong ứng dụng.
Điều này có nghĩa rằng một số dữ liệu mà AppsFlyer liên kết với các sự kiện trong ứng dụng S2S không tự nhiên thì không được liên kết với các sự kiện trong ứng dụng S2S tự nhiên.
Ví dụ
Ví dụ, nếu bạn so sánh báo cáo dữ liệu thô của các sự kiện trong ứng dụng S2S tự nhiên và không tự nhiên, các sự kiện không tự nhiên có chứa dữ liệu mà các sự kiện trong ứng dụng tự nhiên không có.
Các sự kiện trong ứng dụng không tự nhiên có chứa dữ liệu về nguồn truyền thông, chiến dịch, loại tương tác và thời gian tương tác được phân bổ.
Mặt khác, các sự kiện trong ứng dụng tự nhiên sẽ theo sau lượt cài đặt tự nhiên. Lượt cài đặt tự nhiên không có dữ liệu liên quan đến chiến dịch, các nguồn truyền thông hoặc loại tương tác được phân bổ và thời gian cài đặt.
Ánh xạ ID AppsFlyer với customer user ID (CUID)
Phải có Backend logic để hệ thống lấy giá trị và điền thông số. Phần dưới đây mô tả cách thức bạn có thể lấy ID AppsFlyer:
- ID AppsFlyer là thông tin bắt buộc và được dùng để phân bổ sự kiện.
- Hệ thống tạo ra ID này khi người dùng cài đặt ứng dụng di động lần đầu.
- Để có thể ánh xạ CUID tới ID AppsFlyer, bạn cần đặt CUID trong ứng dụng.
Để giúp bạn dễ dàng biết được người dùng nào đã thực hiện sự kiện nào, hãy triển khai luồng bên dưới:
- Thiết lập customer user ID khi người dùng cài đặt ứng dụng.
- Báo cáo dữ liệu thô của AppsFlyer bao gồm CUID và ID AppsFlyer. Sử dụng một trong các công cụ phân phối dữ liệu để lấy dữ liệu này hoặc API Push AppsFlyer.
- Sử dụng báo cáo dữ liệu thô để so khớp CUID với ID AppsFlyer.
- ID AppsFlyer có trong SDK được tích hợp sẵn trong ứng dụng của bạn (Android/iOS).
- Ánh xạ ID AppsFlyer với customer user ID trong hệ thống nội bộ của bạn (một thao tác quan trọng phục vụ mục đích sử dụng sau này).
Sau khi bạn ánh xạ ID AppsFlyer với CUID, bạn có thể so khớp người dùng với những sự kiện được thực hiện. Sau đó, bạn có thể lấy các giá trị khác (giá trị sự kiện, tiền tệ sự kiện, thời gian sự kiện, v.v.) và gửi sự kiện trong ứng dụng máy chủ đến máy chủ.
Ví dụ về nội dung yêu cầu
{
"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"
}
Trong trường hợp này, AppsFlyer nhận được một sự kiện trong ứng dụng S2S, đại diện cho sự kiện mua hàng có doanh thu, cũng như các thuộc tính bổ sung, chẳng hạn như loại nội dung, v.v.
Đang tìm nạp ID AppsFlyer
appsflyer_id
là thông số bắt buộc trong các thông báo sự kiện máy chủ đến máy chủ. AppsFlyer sử dụng thông số này để phân bổ sự kiện tới thiết bị ban đầu và nguồn truyền thông được phân bổ. Bạn có thể lấy ID bằng một trong các phương thức sau:
- Thông qua thiết bị di động bằng cách thực hiện lệnh gọi API SDK AppsFlyer: Android, iOS.
- Thông qua nền tảng AppsFlyer, sử dụng một trong các cách thức sau: API Pull, API Push, Xuất thông tin cài đặt dữ liệu thô.
Lời khuyên
Khi thử nghiệm các thông báo S2S, nếu bạn đang sử dụng dữ liệu thô, hãy tìm bản ghi có nguồn truyền thông "s2s_test". Đây là thiết bị thử nghiệm của bạn và ID Thiết bị AppsFlyer là ID bạn cần.
Gửi doanh thu âm
Hệ thống có thể gửi các sự kiện có giá trị doanh thu âm. Ví dụ: nếu hủy lệnh mua. Thông số af_revenue
có thể mang các giá trị âm để ghi nhận sự kiện này.
Nếu bạn điền af_quantity
, bạn có thể muốn điền một giá trị âm vào trường đó, tùy thuộc vào logic hệ thống của bạn. AppsFlyer không sử dụng af_quantity
.
Ví dụ về doanh thu âm
{
"eventName": "cancel_purchase",
"eventValue":
"{
\"af_revenue\": \"-6\",
\"af_content_type\": \"wallets\",
\"af_content_id\": \"15854\",
\"af_quantity\" :\"1\"
}",
"eventCurrency": "USD",
}
Xử lý sự cố
Các sự kiện không hiển thị trong bảng điều khiển
- Điểm cuối: Xác minh rằng điểm cuối được sử dụng là điểm cuối chính xác.
- Xác minh rằng tải trọng chứa các thông số bắt buộc. Xem tại đây.
- Kiểm tra xem ID AppsFlyer mà bạn sử dụng để khởi chạy sự kiện có phải là một appsflyer_id thực sự hay không, có thực sự được cài đặt trên ứng dụng cụ thể không. Không phải một ID thử nghiệm được cung cấp trong tài liệu. Xem tại đây.
- Các sự kiện S2S không hỗ trợ nhiều sự kiện trong một yêu cầu S2S. Phải gửi riêng từng sự kiện.
- Các sự kiện có thể được gửi bằng phương thức không đồng bộ để thời gian phản hồi tốt hơn.
- Trong bảng điều khiển tổng quan, phạm vi ngày liên quan đến ngày cài đặt ứng dụng (LTV), chứ không phải ngày sự kiện.
- Đảm bảo rằng bạn chọn đúng phạm vi ngày.
- Đảm bảo rằng phạm vi ngày trong bảng điều khiển tương ứng với ngày cài đặt trên thiết bị (appsflyer_id), chứ không phải ngày sự kiện.
- Báo cáo dữ liệu thô về sự kiện cho biết: phạm vi ngày liên quan đến ngày sự kiện, chứ không phải ngày cài đặt.
Các sự kiện không chứa giá trị doanh thu
Nếu bạn gửi sự kiện S2S nhưng hệ thống chưa ghi nhận doanh thu, hãy đảm bảo rằng hệ thống đã tạo chuỗi cho JSON mà bạn gửi. Phần quan trọng nhất là thông số giá trị sự kiện trong JSON. Phải tạo chuỗi như minh họa trong ví dụ bên dưới.
"{\"af_revenue\":\"6\" ,\"af_content_type\":\"wallets\"}"
Nếu không được tạo chuỗi, thì giá trị sự kiện sẽ không được xử lý theo đúng cách và doanh thu sẽ không được ghi nhận.
Tuyệt đối không được định dạng các giá trị doanh thu. Chúng có thể chứa dấu thập phân. Không bao gồm mã hoặc ký hiệu tiền tệ, cũng như dấu phân cách ,
. Giá trị doanh thu có thể bắt đầu bằng tiền tố -
- Ví dụ về các giá trị hợp lệ:
123
,-123.45
,123.456
- Ví dụ về các giá trị không hợp lệ:
1,234.56
,1,234
Trong sự kiện S2S, không phải tất cả các trường đều được hệ thống điền
Hệ thống điền vào các trường dữ liệu thô bằng cách sử dụng giá trị được gửi trong lệnh gọi S2S và điền vào các trường khác bằng thông tin từ sự kiện cài đặt. Hệ thống sử dụng SDK AppsFlyer để quan sát hành vi tương tự, chứ không giống hệt nhau cho các sự kiện trong ứng dụng. Có một vài điểm khác biệt, cụ thể đó là các trường sau không được hệ thống điền dữ liệu cho các sự kiện S2S:
- wifi
- người điều hành
- ngôn ngữ
- Loại thiết bị
- Danh mục thiết bị
- Phiên bản Ứng dụng: Bạn có thể sử dụng
app_version_name
- Tên ứng dụng