174 lines
5.3 KiB
Lua
174 lines
5.3 KiB
Lua
--[[
|
|
// Analytics.lua
|
|
|
|
// Fetches analytics data for console platform
|
|
]]
|
|
local CoreGui = game:GetService("CoreGui")
|
|
local GuiRoot = CoreGui:FindFirstChild("RobloxGui")
|
|
local Modules = GuiRoot:FindFirstChild("Modules")
|
|
local ShellModules = Modules:FindFirstChild("Shell")
|
|
|
|
local Utility = require(ShellModules:FindFirstChild('Utility'))
|
|
|
|
--[[ Services ]]--
|
|
local AnalyticsService = nil
|
|
pcall(function() AnalyticsService = game:GetService('AnalyticsService') end)
|
|
local UserInputService = game:GetService('UserInputService')
|
|
|
|
local Analytics = {}
|
|
|
|
--[[ Helper Functions ]]--
|
|
local function setRBXEvent(eventName, additionalArgs)
|
|
local target, eventContext = nil, nil
|
|
local success, result = pcall(function()
|
|
if UserInputService:GetPlatform() == Enum.Platform.XBoxOne then
|
|
target = "console"
|
|
eventContext = "XboxOne"
|
|
eventName = eventName or ""
|
|
additionalArgs = additionalArgs or {}
|
|
AnalyticsService:SetRBXEvent(target, eventContext, eventName, additionalArgs)
|
|
end
|
|
end)
|
|
|
|
if not success then
|
|
Utility.DebugLog("setRBXEvent() failed because", result, "Input: target:", target, " eventContext:", eventContext, " eventName:", eventName)
|
|
end
|
|
|
|
return success
|
|
end
|
|
|
|
local function setRBXEventStream(eventName, additionalArgs)
|
|
local target, eventContext = nil, nil
|
|
local success, result = pcall(function()
|
|
if UserInputService:GetPlatform() == Enum.Platform.XBoxOne then
|
|
target = "console"
|
|
eventContext = "XboxOne"
|
|
eventName = eventName or ""
|
|
additionalArgs = additionalArgs or {}
|
|
AnalyticsService:SetRBXEventStream(target, eventContext, eventName, additionalArgs)
|
|
end
|
|
end)
|
|
|
|
if not success then
|
|
Utility.DebugLog("setRBXEventStream() failed because", result, "Input: target:", target, " eventContext:", eventContext, " eventName:", eventName)
|
|
end
|
|
|
|
return success
|
|
end
|
|
|
|
local function releaseRBXEventStream(eventName)
|
|
local target = nil
|
|
local success, result = pcall(function()
|
|
if UserInputService:GetPlatform() == Enum.Platform.XBoxOne then
|
|
target = "console"
|
|
AnalyticsService:ReleaseRBXEventStream(target)
|
|
end
|
|
end)
|
|
|
|
if not success then
|
|
Utility.DebugLog("releaseRBXEventStream() failed because", result, "Input: target:", target)
|
|
end
|
|
|
|
return success
|
|
end
|
|
|
|
local function updateHeartbeatObject(additionalArgs)
|
|
local success, result = pcall(function()
|
|
AnalyticsService:UpdateHeartbeatObject(additionalArgs)
|
|
end)
|
|
|
|
if not success then
|
|
Utility.DebugLog("UpdateHeartbeatObject() failed because ", result, "Input: args:", additionalArgs)
|
|
end
|
|
|
|
return success
|
|
end
|
|
|
|
local function reportCounter(counterName, amount)
|
|
local success, result = pcall(function()
|
|
if UserInputService:GetPlatform() == Enum.Platform.XBoxOne then
|
|
counterName = counterName or ""
|
|
counterName = "Xbox-"..tostring(counterName)
|
|
amount = amount or 1
|
|
AnalyticsService:ReportCounter(counterName, amount)
|
|
end
|
|
end)
|
|
|
|
if not success then
|
|
Utility.DebugLog("reportCounter() failed because", result, "Input: counterName:", counterName, "amount:", amount)
|
|
end
|
|
|
|
return success
|
|
end
|
|
|
|
--[[ Public API ]]--
|
|
function Analytics.SetRBXEvent(eventName, additionalArgs)
|
|
setRBXEvent(eventName, additionalArgs)
|
|
end
|
|
|
|
-- Non-real time
|
|
function Analytics.SetRBXEventStream(eventName, additionalArgs)
|
|
setRBXEventStream(eventName, additionalArgs)
|
|
end
|
|
|
|
function Analytics.UpdateHeartbeatObject(additionalArgs)
|
|
updateHeartbeatObject(additionalArgs)
|
|
end
|
|
|
|
-- Real time
|
|
function Analytics.ReportCounter(counterName, amount)
|
|
reportCounter(counterName, amount)
|
|
end
|
|
|
|
|
|
local WidgetNames = {
|
|
--Widget Name
|
|
["WidgetId"] = "WidgetName";
|
|
["AppHubId"] = "AppHub";
|
|
["AvatarEditorScreenId"] = "AvatarEditorScreen";
|
|
["AvatarPaneId"] = "AvatarPane";
|
|
["AvatarTileId"] = "AvatarTile";
|
|
["BadgeOverlayId"] = "BadgeOverlay";
|
|
["BaseCarouselScreenId"] = "BaseCarouselScreen";
|
|
["BaseOverlayId"] = "BaseOverlay";
|
|
["BaseTileId"] = "BaseTile";
|
|
["ConfirmPromptId"] = "ConfirmPrompt";
|
|
["DisableCrossplayOverlayId"] = "DisableCrossplayOverlay";
|
|
["EnableCrossplayOverlayId"] = "EnableCrossplayOverlay";
|
|
["EngagementScreenId"] = "EngagementScreen";
|
|
["ErrorOverlayId"] = "ErrorOverlay";
|
|
["GameDetailId"] = "GameDetail";
|
|
["GameGenreScreenId"] = "GameGenreScreen";
|
|
["GamesPaneId"] = "GamesPane";
|
|
["GameSearchScreenId"] = "GameSearchScreen";
|
|
["HomePaneId"] = "HomePane";
|
|
["ImageOverlayId"] = "ImageOverlay";
|
|
["LinkAccountScreenId"] = "LinkAccountScreen"; --AKA "Sign In Screen"
|
|
["NoActionOverlayId"] = "NoActionOverlay";
|
|
["OutfitTileId"] = "OutfitTile";
|
|
["OverscanScreenId"] = "OverscanScreen";
|
|
["PurchasePackagePromptId"] = "PurchasePackagePrompt";
|
|
["ReportOverlayId"] = "ReportOverlay";
|
|
["RobuxBalanceOverlayId"] = "RobuxBalanceOverlay";
|
|
["SetAccountCredentialsScreenId"] = "SetAccountCredentialsScreen"; --AKA "Sign Up Screen" and "Microwave Screen" (User sees it as two different screens)
|
|
["SettingsScreenId"] = "SettingsScreen";
|
|
["SideBarId"] = "SideBar";
|
|
["SignInScreenId"] = "SignInScreen"; --AKA "Choice Screen"
|
|
["SocialPaneId"] = "SocialPane";
|
|
["StorePaneId"] = "StorePane";
|
|
["TabDockId"] = "TabDock";
|
|
["UnlinkAccountOverlayId"] = "UnlinkAccountOverlay";
|
|
["UnlinkAccountScreenId"] = "UnlinkAccountScreen";
|
|
}
|
|
|
|
function Analytics.WidgetNames(stringKey)
|
|
local result = WidgetNames and WidgetNames[stringKey]
|
|
if not result then
|
|
Utility.DebugLog("Analytics.WidgetNames: Could not find widget name for:" , stringKey)
|
|
result = stringKey
|
|
end
|
|
return result
|
|
end
|
|
|
|
return Analytics
|