GSM Analytics
Cung cấp các tính năng để phân tích các chỉ số của game, thông qua các method trong class GSMAnalytics
Developer cần sử dụng các hàm có chức năng tương ứng để gửi thông tin về server, từ đó server sẽ phân tích dữ liệu, thông thường dữ liệu được phân tích vào ngày hôm sau. Các dữ liệu đã được phân tích xem tại admin.cscmobicorp.com
Nếu Developer thiết lập GSMObject với enviroment là Development thì sẽ xem dữ liệu phân tích tại: admindev.cscmobicorp.com
Hiện tại SDK cung cấp các hàm gọi thống kê sau:
LevelLog: Thống kê số lượng user, độ khó, thời gian chơi của một level
LevelLog Mini Game: Thống kê số lượng user, độ khó, thời gian chơi của một level
TaskQuestLog: Thống kê số lượng user trong 1 Task/quest
ResourceLog: Thống kê số lượng tài nguyên kiếm được/sử dụng của user trong một level
AdsLog: Thống kê xem chỉ số user xem ad ở vị trí nào trong một level.
AdImpressionLog: Thống kê các chỉ số Impression, DEU ... của quảng cáo trong level.
FunnelLog: Thống kê các biểu đồ phễu, để biết tỉ lệ user trong các phễu lọc như thế nào.
CounterLog: Dùng để thống kê đếm số lần, hoặc tổng giá trị cho 1 tham số nào đó cần log
CustomeLog: Dùng để gửi lên 1 loại event bất kỳ theo game định nghĩa (Không khuyến khích, chỉ khi nào có sự chỉ định và thống nhất từ người quản trị dự án, và admin của GSM SDK)
1. Yêu cầu
Các game cần định nghĩa được các level sẽ tăng dần trong game, để từ đó biểu đồ dễ dàng nhìn ra được các chỉ số của user trong từng mốc level.
Nếu các game không có level, thì mặc định level=0 sẽ gửi lên server.
2. Level Log
Gọi mỗi khi user chơi ở 1 level,
Đo lường trạng thái start/win/lose/quit của từng level.
Các tham số
currentLevel
(Required)
: Level hiện tại đang chơi, là chữ viết liền không dấu, và chỉ nên chứa số ví dụ: "15", hoặc "1_1_1" hoặc "1_1"levelStatus
(Required)
: Các trạng thái hiện tại của level (start, win, lose, quit)duration
(Optional)
: Thời gian user bắt đầu start level cho đến khi win, lose, hoặc quit(Tính theo giây)
group
(Optional)
: Tên nhóm, phục vụ cho A/B test, hoặc các level có state khác nhau.. Ví dụ tệp userA, userB, state0, state1...userType
(Optional)
: Loại usersubGroup
(Optional)
: Tên nhóm, tương tự group nhưng ở quy mô nhỏ hơn
Hoặc: SDK sẽ tự động tính duration.
Các tham số
currentLevel
(Required)
: Level hiện tại đang chơi, là chữ viết liền không dấu, và chỉ nên chứa số ví dụ: "15", hoặc "1_1_1" hoặc "1_1" Nếu level dạng "1_1_1": tức có ngăn cách bằng thì tối đa chỉ có 3 cấp. Ví dụ: "1_1_1_1" sẽ là sai và hệ thống sẽ không thể sắp xếp được.levelStatus
(Required)
: Các trạng thái hiện tại của level (start, win, lose, quit)group
(Optional)
: Tên nhóm, phục vụ cho A/B test, hoặc các level có state khác nhau.. Ví dụ tệp userA, userB, state0, state1...userType
(Optional)
: Loại usersubGroup
(Optional)
: Tên nhóm, tương tự group nhưng ở quy mô nhỏ hơn
Code mẫu:
Logic cơ bản:
Khi bắt đầu vào chơi ở một level thì
levelStatus
= start : Gửi log lên server và đánh dấu thời gian bắt đầu chơi ở level, để tính duration.Tính duration: chỉ tính các thời gian khi user đang trong game, còn game bị dừng hoặc hoặc dừng để xem quảng cáo thì không tính.
Khi chiến thắng một level thì: chốt thời gian duration từ lúc start và gửi lên server với
levelStatus
= win (Nếu game không có logic win level thì bỏ qua). Đồng thời reset lại duration về 0.Khi thua một level thì: chốt thời gian duration từ lúc start và gửi lên server với
levelStatus
= lose (Nếu game không có logic lose level thì bỏ qua). Đồng thời reset lại duration về 0Khi user chủ động quít khỏi một level thì: chốt thời gian duration từ lúc start và gửi lên server với
levelStatus
= quit(Nếu game không có logic quit level thì bỏ qua). Đồng thời reset lại duration về 0
Lưu ý:
Nếu user chơi lại các level đã vượt qua rồi thì sẽ không gửi log lên gì cả.
3. Level Log cho Mini Game
Mục đích dùng để log dữ liệu level trong từng mini game trong 1 game chủ đạo.
Level này không liên quan đến level trong tiến trình của game chủ đạo
Các tham số
miniGameName
(Required)
: Tên của mini game, viết liền không dấu, và chỉ nên chứa số ví dụ: "15", hoặc "1_1_1" hoặc "1_1" Nếu level dạng "1_1_1": tức có ngăn cách bằng thì tối đa chỉ có 3 cấp. Ví dụ: "1_1_1_1" sẽ là sai và hệ thống sẽ không thể sắp xếp được.currentLevel
(Required)
: Level hiện tại đang chơi, là chữ viết liền không dấu, và chỉ nên chứa số ví dụ: "15", hoặc "1_1_1" hoặc "1_1"levelStatus
(Required)
: Các trạng thái hiện tại của level (start, win, lose, quit)duration
(Optional)
: Thời gian user bắt đầu start level cho đến khi win, lose, hoặc quit(Tính theo giây)
group
(Optional)
: Tên nhóm, phục vụ cho A/B test, hoặc các level có state khác nhau.. Ví dụ tệp userA, userB, state0, state1...userType
(Optional)
: Loại usersubGroup
(Optional)
: Tên nhóm, tương tự group nhưng ở quy mô nhỏ hơnmainLevel
(Optional)
: Là level hiện tại của trong tiến trình chính
Hoặc: SDK sẽ tự động tính duration.
Các tham số
miniGameName
(Required)
: Tên của mini game, viết liền không dấu, và chỉ nên chứa số ví dụ: "15", hoặc "1_1_1" hoặc "1_1" Nếu level dạng "1_1_1": tức có ngăn cách bằng thì tối đa chỉ có 3 cấp. Ví dụ: "1_1_1_1" sẽ là sai và hệ thống sẽ không thể sắp xếp được.currentLevel
(Required)
: Level hiện tại đang chơi, là chữ viết liền không dấu, và chỉ nên chứa số ví dụ: "15", hoặc "1_1_1" hoặc "1_1"levelStatus
(Required)
: Các trạng thái hiện tại của level (start, win, lose, quit)group
(Optional)
: Tên nhóm, phục vụ cho A/B test, hoặc các level có state khác nhau.. Ví dụ tệp userA, userB, state0, state1...userType
(Optional)
: Loại usersubGroup
(Optional)
: Tên nhóm, tương tự group nhưng ở quy mô nhỏ hơnmainLevel
(Optional)
: Là level hiện tại của trong tiến trình chính
Code mẫu:
Logic cơ bản:
Khi bắt đầu vào chơi ở một level thì
levelStatus
= start : Gửi log lên server và đánh dấu thời gian bắt đầu chơi ở level, để tính duration.Tính duration: chỉ tính các thời gian khi user đang trong game, còn game bị dừng hoặc hoặc dừng để xem quảng cáo thì không tính.
Khi chiến thắng một level thì: chốt thời gian duration từ lúc start và gửi lên server với
levelStatus
= win (Nếu game không có logic win level thì bỏ qua). Đồng thời reset lại duration về 0.Khi thua một level thì: chốt thời gian duration từ lúc start và gửi lên server với
levelStatus
= lose (Nếu game không có logic lose level thì bỏ qua). Đồng thời reset lại duration về 0Khi user chủ động quít khỏi một level thì: chốt thời gian duration từ lúc start và gửi lên server với
levelStatus
= quit(Nếu game không có logic quit level thì bỏ qua). Đồng thời reset lại duration về 0
Lưu ý:
Nếu user chơi lại các level đã vượt qua rồi thì sẽ không gửi log lên gì cả.
4. Task Quest Log
Gọi mỗi khi user thực hiện 1 task/quest nào đó
Các tham số
targetLevel
(Required)
: Là level tiếp theo của level cao nhất đã vượt qua, chỉ viết liền không dấu, và chỉ nên chứa số ví dụ: "15", hoặc "1_1_1" hoặc "1_1" Nếu level dạng "1_1_1": tức có ngăn cách bằng thì tối đa chỉ có 3 cấp. Ví dụ: "1_1_1_1" sẽ là sai và hệ thống sẽ không thể sắp xếp được.taskName
(Required)
: Là tên của Task/Quest, nên có tiền tố ở đầu là số, để dễ dàng sắp xếp thứ tự task.taskPriority
(Required)
: Là thứ tự của task, để sắp xếp task theo thứ tự tăng dần, nếu các task cùng priority thì sẽ dựa vào taskName để sắp xếp. (Mặc định taskPriority=0).status
(Required)
: Là trạng thái của task/quest (start, done).duration
(Optional)
: Là thời gian user sử dụng tính từ lúc start đến done một Task/Quest(Tính theo giây)
group
(Optional)
: Tên nhóm, phục vụ cho A/B test, hoặc các level có state khác nhau.. Ví dụ tệp userA, userB, state0, state1...userType
(Optional)
: Loại usersubGroup
(Optional)
: Tên nhóm, tương tự group nhưng ở quy mô nhỏ hơn
Hoặc: SDK tự động tính duration
Gọi mỗi khi user thực hiện 1 task/quest nào đó
Các tham số
targetLevel
(Required)
: Là level tiếp theo của level cao nhất đã vượt qua, chỉ viết liền không dấu, và chỉ nên chứa số ví dụ: "15", hoặc "1_1_1" hoặc "1_1" Nếu level dạng "1_1_1": tức có ngăn cách bằng thì tối đa chỉ có 3 cấp. Ví dụ: "1_1_1_1" sẽ là sai và hệ thống sẽ không thể sắp xếp được.taskName
(Required)
: Là tên của Task/Quest, nên có tiền tố ở đầu là số, để dễ dàng sắp xếp thứ tự task.taskPriority
(Required)
: Là thứ tự của task, để sắp xếp task theo thứ tự tăng dần, nếu các task cùng priority thì sẽ dựa vào taskName để sắp xếp. (Mặc định taskPriority=0).status
(Required)
: Là trạng thái của task/quest (start, candone, done).group
(Optional)
: Tên nhóm, phục vụ cho A/B test, hoặc các level có state khác nhau.. Ví dụ tệp userA, userB, state0, state1...userType
(Optional)
: Loại usersubGroup
(Optional)
: Tên nhóm, tương tự group nhưng ở quy mô nhỏ hơn
Code mẫu:
5. Resource Log
Gọi mỗi khi user nhận được/sử dụng tài nguyên trong game.
Các tham số
targetLevel
(Required)
: Là level tiếp theo của level cao nhất đã vượt qua, chỉ viết liền không dấu, và chỉ nên chứa số ví dụ: "15", hoặc "1_1_1" hoặc "1_1" Nếu level dạng "1_1_1": tức có ngăn cách bằng thì tối đa chỉ có 3 cấp. Ví dụ: "1_1_1_1" sẽ là sai và hệ thống sẽ không thể sắp xếp được.flowType
(Required)
: User nhận/sử dụng tài nguyên (FlowType.earn - nhận, FlowType.spend - sử dụng).currency
(Required)
: Tên loại tài nguyên user nhận/sử dụng (gem, gold, coin...)source
(Optional)
: Nguồn nhận/sử dụng tài nguyên(khái quát). Nếu không có thì để rỗng.sourceDetail
(Required)
: Nguồn nhận/sử dụng tài nguyên (chi tiết)amount
(Required)
: Số lượng tài nguyên mà user nhận/sử dụnggroup
(Optional)
: Tên nhóm, phục vụ cho A/B test, hoặc các level có state khác nhau.. Ví dụ tệp userA, userB, state0, state1...userType
(Optional)
: Loại usersubGroup
(Optional)
: Tên nhóm, tương tự group nhưng ở quy mô nhỏ hơn
Code mẫu:
6. Ads Log
Dùng để Log khi user xem thành công, thường phục vụ cho loại Ad Reward
Các tham số
targetLevel
(Required)
: Là level tiếp theo của level cao nhất đã vượt qua, chỉ viết liền không dấu, và chỉ nên chứa số ví dụ: "15", hoặc "1_1_1" hoặc "1_1" Nếu level dạng "1_1_1": tức có ngăn cách bằng thì tối đa chỉ có 3 cấp. Ví dụ: "1_1_1_1" sẽ là sai và hệ thống sẽ không thể sắp xếp được.adType
(Required)
: Loại Ad (AdType.videoReward, AdType.interstitial, AdType.interstitialReward, AdType.banner, AdType.native, AdType.appOpenAd, AdType.collapsibleBanner, AdType.MREC, AdType.offerWall)adWhere
(Required)
: Địa điểm xem ad (xem trong shop, xem ở trong level để hồi sinh ...)group
(Optional)
: Tên nhóm, phục vụ cho A/B test, hoặc các level có state khác nhau.. Ví dụ tệp userA, userB, state0, state1...userType
(Optional)
: Loại useractionType
(Optional)
: Để biết user hành động gì với Ad: Show, Click hoặc ViewsubGroup
(Optional)
: Tên nhóm, tương tự group nhưng ở quy mô nhỏ hơn
Code mẫu:
7. AdImpression Log
Khi user hoàn thành 1 quảng cáo thì sẽ gửi thông tin này lên hệ thống GSM
Lưu ý: nên dùng CSCPlugin để đẩy AdImpressionLog cho cả Firebase, Adjust và GSM: Xem hướng dẫn
Hoặc:
Các tham số
targetLevel
(Required)
: Là level tiếp theo của level cao nhất đã vượt qua, chỉ viết liền không dấu, và chỉ nên chứa số ví dụ: "15", hoặc "1_1_1" hoặc "1_1" Nếu level dạng "1_1_1": tức có ngăn cách bằng thì tối đa chỉ có 3 cấp. Ví dụ: "1_1_1_1" sẽ là sai và hệ thống sẽ không thể sắp xếp được.adPlatform
(Required)
: Là nền tảng cung cấp Ad (Ironsouce, AppLovin...)adSource
(Required)
: Là nhà cung cấp Ad (facebook,admob,vungle...)adType
(Required)
: Là loại định dạng advalue
(Required)
: Là số tiền ad mang lại (tính theo USD)group
(Optional)
: Tên nhóm, phục vụ cho A/B test, hoặc các level có state khác nhau.. Ví dụ tệp userA, userB, state0, state1...userType
(Optional)
: Loại usersubGroup
(Optional)
: Tên nhóm, tương tự group nhưng ở quy mô nhỏ hơn
Code mẫu AppLovin (MAX SDK):
Code mẫu IronSource SDK:
8. Funnel Log
Là log để vẽ biểu đồ phễu lọc, xem tỉ lệ các user chơi qua từng phễu sẽ là bao nhiêu
Các tham số
funnelName
(Required)
: Tên biểu đồ phễu.priority
(Required)
:Thứ tự của các actionactionName
(Required)
: Tên các hành động, hoặc bước mà user thực hiện trong 1 biểu đồ phễu, và phải là tên duy nhất không được trùng nhaugroup
(Optional)
: Tên nhóm, phục vụ cho A/B test, hoặc các level có state khác nhau.. Ví dụ tệp userA, userB, state0, state1...subGroup
(Optional)
: Tên nhóm, tương tự group nhưng ở quy mô nhỏ hơnuserType
(Optional)
: Loại user
Code mẫu:
Yêu cầu bắt buộc phải có funnel: LOADING
Mục đích: Để biết được tỉ lệ Drop từ lúc game bắt đầu tải các resource, cho đến khi vào được màn hình để user chơi game.
Chính vì vậy, việc này phải có sự kết hợp giữa Developer và Game Designer, hai người thống nhất luồng đi của game, để khi nhìn vào Funnel thì nắm rõ được user Drop ở đâu, và có thể dự đoán được nguyên nhân.
Gợi ý Logic funnel LOADING
LOADING
0
0.1_Start_BootStrap
Khi bắt đầu vào Game, và ở Scene BootStrap
LOADING
0
0.2_End_BootStrap
Khi kết thúc Scene BootStrap
LOADING
1
1.1_Start_Splash
Khi bắt đầu vào Scene Splash
LOADING
1
1.2_End_Splash
Khi kết thúc Scene Splash
LOADING
2
2.1_Start_Loading
Khi kết thúc Scene Loading
LOADING
2
2.2_End_Loading
Khi kết thúc Scene Loading
LOADING
3
3.1_Start_GamePlay
Khi bắt đầu vào GamePlay
Trên đây là gợi ý các tên gọi của ActionName, tùy theo Logic của game, mà có thể có độ chi tiết giữa các quá trình Start và End. Ví dụ: Giữa quá trình Start BootStrap, và End BootStrap, thì có thể có quá trình: 0.1.1_Start_Load_Firebase, 0.1.2_End_Load_Firebase
9. Counter Log
Mục đích để đếm số lần hoặc 1 giá trị số của 1 tham số nào đó.
Ví dụ: Dùng để gửi lên thời gian chơi ở màn hình 1.
Ví dụ: Dùng để gửi lên số lần click vào nút shoping
Các tham số
counters
(Required)
: Danh sách các tham số và giá trị số cần log.counterType
(Required)
: Tên loại counter để theo dõigroup
(Optional)
: Tên nhóm, phục vụ cho A/B test, hoặc các level có state khác nhau.. Ví dụ tệp userA, userB, state0, state1...subGroup
(Optional)
: Tên nhóm, tương tự group nhưng ở quy mô nhỏ hơnuserType
(Optional)
: Loại usermainLevel
(Optional)
: Là giá trị level ở hiện tại mà user đang chơi.
Code mẫu:
Phía game có thể gom hết các giá trị sau đó gửi 1 lần, hoặc cứ khi có 1 tham số nào cần log thì gửi lên cũng được.
Khuyến nghị nên gom lại sau đó gửi 1 lần để đỡ tải cho server
10. Custome Log
Mục đích để gửi 1 loại event tùy biến lên server.
Nếu gửi tên event là gì thì cần báo cho người quản trị GSM SDK để có thể làm hệ thống phân tích theo event
Các tham số
eventName
(Required)
: Tên event, chữ thường, viết liền không dấu. (Cần nằm ngoài danh sách các tên sau: level_log, level_log_for_mini_game, task_quest_log, ad_impression_log, ads_log, resource_log, session_time_log, funnel_log, counter_log, notification_local_click)parameters
(Required)
: Mảng tên các tham số và giá trị tương ứng
Code mẫu:
Last updated