3. Log tự định nghĩa
Nhận thấy những hàm log cơ bản là không đủ để đáp ứng tất cả những yêu cầu của người dùng, chúng tôi cung cấp phương pháp giúp người dùng có thể tự thiết kế bản tin log lên server.
TL;DR : phi thẳng tới ví dụ :)))
1. Thiết kế bản ghi
Các bản ghi dữ liệu của người dùng, để tiện xử lý và thống kê, cần được phân loại vào dựa theo event, với các bản ghi của mỗi event có cấu trúc tương đồng với nhau. Với C#, các event được coi là tương đồng với class, và cấu trúc được định nghĩa bởi các trường của class.
Để khai báo 1 event log, ta tạo ra 1 class kế thừa từ 1 trong 2 class:
PlainFlexLog: class log gốc, không cung cấp bất kỳ thông tin thêm nào ngoài các trường trong class.
BaseFalconLog: class log cơ bản, cung cấp các thông tin thêm cơ bản của người chơi, bao gồm:
abTesting: lấy tự động theo FalconAbTesting, tham khảo thêm tại đây
accountId: nếu không có gì đặc biệt thì mặc định lấy theo deviceId
appVersion
deviceId
gameId, gameName
installDay: lưu ở local, sẽ bị reset nếu xóa đi cài lại
level: được cập nhật theo levelLog, hoặc người dùng tự cài đặt giá trị
platform
retentionDay: tính theo installDay
clientCreateDate: thời gian tạo log object, theo epoch time millis
apiId: tổng số Object của event hiện tại đã từng tạo(tính cả log hiện tại)
country : tự động thu thập ip và country người gửi ở phía server
Trong class vừa tạo, ta khai báo các trường thông tin thêm cần thiết. Sau đó, khi cần log, ta tạo new Object của event đó rồi gọi hàm send().
Chú ý:
class nên có attribute [Serializable] và các trường cần được để public.
Việc tạo event không được thực hiện với các hàm của attribute [RuntimeInitializeOnLoadMethod] do các giá trị nền của SDK được khởi tạo ở đây.
Giá trị về abTesting sẽ được lấy ngay tại thời điểm tạo object log (tức có thể không phải là giá trị mới nhất lấy từ server), nên nếu giá trị abTesting có quan trọng với việc thống kê, hãy check FalconConfig.UpdateFromNet trước khi tạo log. Tham khảo về abTesting tại đây.
Tuyệt đối không tạo trường có tên createdDate hoặc các tên tương tự cụm từ này do server có insert 1 trường tên như vậy để quản lý bản ghi. Nếu muốn gán timestamp vào bản ghi xin hãy điền vào trường clientCreateDatecó sẵn trong log. Nếu bản ghi vi phạm điều này sẽ tự động bị loại bỏ.
2. Về kiểu của trường dữ liệu
Một trường của log có thể có các kiểu dữ liệu sau:
Number
Sô nguyên: byte, short, int, long, bigInt
Số thực: float, double, bigDecimal
DateTime
Boolean
String
Object (cần là Serializable): Object khi lên db sẽ bị trải phẳng, ngăn cách bởi ký tự '$'
Khi một bản ghi được gửi lên server, toàn bộ meta về các kiểu của trường dữ liệu trong bản ghi sẽ được lưu lại để xử lý các bản ghi sau, vì vậy các bản ghi sau có kiểu dữ liệu lệch với bản ghi trước sẽ bị coi là không hợp lệ và loại bỏ (Các kiểu dữ liệu số sẽ được tự động chuyển đổi lẫn cho nhau, nên không phải lo về trường hợp như int không chấp nhận float :v) . Vì vậy nếu như muốn đổi kiểu dữ liệu của trường( do test, yêu cầu thực tế, ...) thì chúng tôi không thể hỗ trợ phần này và tốt nhất là bạn nên đổi tên trường và coi nó như 1 trường mới ._.|||||
3. VD
Yêu cầu: Với mỗi người chơi khi cài game, ta cần log event xem người chơi cài là organic hay inorganic. Log event này cần cung cấp các thông tin bao gồm loại người chơi(organic/inorganic), deviceId, playerMediationId, thời gian cài, appVersion,... Thông tin này có thể được cung cấp từ phía hệ thống của Unity, cùng với mediation mà game đang sử dụng, và mediation cần được init trước khi gọi hàm.
3.1. Khai báo class
Class kế thừa BaseFalconLog sẽ cung cấp rất nhiều thông tin tự động như deviceId, thời gian cài, ... Và chỉ còn 2 thông tin là playerMediationId, playerType cần ta chủ động thu thập từ phía Mediation.
3.2. Sử dụng trong code
Last updated