2. RemoteConfig và AB Testing
Sdk Core bản 3.0.4 cung cấp nhiều trường filter config hơn, nhiều tính năng hơn, đồng thời cách hoạt động cũng có phần khác, xem chi tiết tại mục 4
Last updated
Sdk Core bản 3.0.4 cung cấp nhiều trường filter config hơn, nhiều tính năng hơn, đồng thời cách hoạt động cũng có phần khác, xem chi tiết tại mục 4
Last updated
Để khởi tạo các Config sử dụng, người dùng cần phải tạo một lớp kế thừa abstract class FalconConfig, sau đó khai báo các attributes tượng trưng cho các remoteConfig đã khai báo từ server (có thể khai báo luôn các giá trị khởi tạo).
Trong ảnh trên, có thể thấy, ta khai báo các remoteConfig "config1" (int) và "config2"(String).
Chú ý:
Tên các remoteConfig, ở phía client khai báo trong class và khởi tạo phía server, phải tuyệt đối giống nhau.
Các remoteConfig cần có access modifier public
.
Kiểu dữ liệu của các remoteConfig phải phù hợp (khai báo ở server là string thì client cũng phải là string, khai báo ở server là int thì client phải là int/long/..., etc), nếu giá trị được gửi tới client không phù hợp, khiến client không thể xử lý thì client sẽ bỏ giá trị này, không lưu lại.
Các config chỉ được có kiểu dữ liệu nguyên thủy (string, float, DateTime, Boolean), không thể gán giá trị phức tạp như Object, Array, List, ...
Việc khởi tạo các giá trị được thực hiện khi gọi FalconMain.Init()
, đồng thời việc kết nối tới server để nhận giá trị mới nhất cần thời gian xử lý vì vậy cần kiểm tra giá trị FalconConfig.UpdateFromNet.
Khi chạy, phía SDK sẽ:
Nếu là lần chạy đầu tiên, lập tức sử dụng các giá trị khởi tạo (bên trên config1 = 5 và config2 = "ahihi do ngok").
SDK sẽ ngay lập tức gửi yêu cầu lên server để lấy về các giá trị remoteConfig mới nhất (trong khoảng thời gian này các remoteConfig sẽ có giá trị là các giá trị khởi tạo). Khi server trả về thành công, các remoteConfig sẽ được reset giá trị (có thể kiểm tra giá trị UpdatedFromNet
trong config để biết config đã được cập nhật chưa).
Sau khi nhận được giá trị mới từ server, SDK sẽ lưu các giá trị mới lại và sử dụng giá trị này thay cho giá trị khởi tạo vào các lần chạy tiếp theo.
Lấy instance của remote config bằng cách sử dụng hàm sau:
VD: RealConfig config = FalconConfig.Instance<RealConfig>();
Cho biết các remoteConfig đã được cập nhật thành công từ server chưa, gồm 4 trạng thái cơ bản:
NotStarted
: chưa bắt đầu thực hiện
Processing
: đã bắt đầu thực hiện và đang xử lý
Succeed
: đã xử lý thành công
Failed
: xử lý thất bại
VD:
Trả về id của ABTesting campain đang chạy.
VD:
Các giá trị của config được truy cập như các thuộc tính thông thường của class:
VD:
Là EventHandler được gọi khi giá trị RemoteConfig được cập nhật về từ server thành công. Việc khởi tạo FalconConfig được gọi từ FalconMain.Init trước khi Scene đầu tiên load (chi tiết xem tại mục FalconMain.Init) nên nếu muốn gán event cần sử dụng Attribute RuntimeInitializeOnLoadMethod
với các RuntimeInitializeLoadType
trước BeforeSceneLoad
.
Các trường Filter cũ:
platform
FDeviceInfoRepo.Platform
android/ios/....
appversion
FDeviceInfoRepo.AppVersion
phiên bản hiện tại của người chơi
deviceName
FDeviceInfoRepo.DeviceName
tên thiết bị VD: "desktop-nrqdcnnrqdcn7"
firstLogin
FPlayerInfoRepo.FirstLogInMillis
Sdk gửi lên là timeMillis, trên server xử lý sẽ tự động chuyển sang date
level
FPlayerInfoRepo.MaxPassedLevel
Level tối đa mà người chơi đã vượt qua. Được cập nhật tự động nếu log level của Falcon Analytic
firstLoginDate
Được server chuyển từ firstLogin
Date theo UTC
country
Được xác định bên phía server
Theo country code ISO 3163166, gồm 2 ký tự viết hoa
(trường numberOfVideos đã bị loại bỏ)
Các trường Filter mới trong bản Core 3.0.4 gồm có:
deviceId
FDeviceInfoRepo.DeviceId
ID thiết bị VD: 969eff3f753e627ef1882beb94dd3d1c07095aac
deviceOs
FDeviceInfoRepo.DeviceOs
điều hành thiết bị VD: windows 11 (10.0.22631) 64bit
installVersion
FPlayerInfoRepo.InstallVersion
phiên bản người chơi cài game
accountId
FPlayerInfoRepo.AccountID
adLtv
FPlayerInfoRepo.Ad.AdLtv
Tổng LTV có được từ việc xem quảng cáo của người chơi, theo mệnh giá USD Được tổng hợp tự động nếu dùng AdLog có nhập adLtv của Falcon Analytic
interAdCount
FPlayerInfoRepo.Ad.AdCountOf(AdType.Interstitial)
Số lần người chơi xem quảng cáo inter Được tổng hợp tự động nếu dùng AdLog của Falcon Analytic
rewardAdCount
FPlayerInfoRepo.Ad.AdCountOf(AdType.Reward)
Số lần người chơi xem quảng cáo reward Được tổng hợp tự động nếu dùng AdLog của Falcon Analytic
inAppCount
FPlayerInfoRepo.InApp.InAppCount
Số lần người chơi thực hiện nạp inApp Được tổng hợp tự động nếu dùng InApp log của Falcon Analytic
inAppMax
FPlayerInfoRepo.InApp.InAppLtIv.max
Giá trị nạp inApp lớn nhất mà người chơi từng nạp, theo mệnh giá local Được tổng hợp tự động nếu dùng InApp log của Falcon Analytic
inAppMaxUsd
Được xác định bên phía server
Chuyển inAppMax từ mệnh giá Local sang USD
inAppTotal
FPlayerInfoRepo.InApp.InAppLtv.toal
Tổng nạp của người chơi, theo mệnh giá local Được tổng hợp tự động nếu dùng InApp log của Falcon Analytic
inAppTotalUsd
Được xác định bên phía server
Chuyển inAppTotal từ mệnh giá Local sang USD
inAppCurrency
FPlayerInfoRepo.InApp.InAppLtv.isoCurrencyCode
Mệnh giá nạp ở local của người chơi
retentionDay
FTime.DateSinceEpoch(FTime.CurrentTimeMillis()) - FTime.DateSinceEpoch(FPlayerInfoRepo.FirstLogInMillis)
Các trường Filter support nếu dùng FalconAnalytic 3.0.7 hoặc hơn:
firebaseToken
FalconFirebase.firebaseToken
token của Firebase, nếu game có sử dụng Firebase
advertisingId
FalconAdvertisingId.falconAdvertisingId
ID của cáo của thiết bị
Các giá trị của class kế thừa FalconConfig giờ được gán bằng việc sử dụng Json, việc này giúp cho về sau có thể gán giá trị 1 collection, array, object,... cho các trường trong class (bao giờ xong cái tính năng gán các giá trị phức tạp này chúng tôi sẽ thông báo và mở tính năng trên web, các bạn đỡ phải cập nhật SDK :>>>>>).
Tuy nhiên cũng vì thế mà class kế thừa FalconConfig, để gán giá trị tối ưu trong các trường hợp ( đặc biệt là với việc build IL2CPP) nên có các điều kiện sau:
Nếu muốn gán giá trị cho trường static thì cần có attribute [JsonProperty]
Các trường được gán giá trị cần để public (class có attribute [Serializable] càng tốt)
Các trường trong class có giá trị hợp lý với giá trị được khai báo ở server(cả 2 đều phải cùng là số/ cùng là string/ cùng là bool/...)