Skip to main content

AGS 3.78.0 Release Notes

Last updated on November 11, 2024

Release date: October 15th, 2024

AccelByte Gaming Services (AGS) Game SDK latest version

Extend SDK (previously known as Server SDK) latest version

AccelByte Multiplayer Servers (AMS) CLI latest version

  • AMS CLI: 0.245.24

Deprecated and removed features

Removal of the Logs tab in Lookup Users

  • The Logs tab in the Live Service Utilities > Lookup Users menu of the Admin Portal has been removed.
    • Admin activities within the Admin Portal will now be tracked in the Audit Logs menu. Refer to View audit logs.

Scheduled field in Challenge Goal response modal

  • In AGS version 3.80, the Scheduled field in the Challenge Goal response modal will be deprecated. The field was originally intended to enable a set start time and end time for a goal. The field is an object that has startTime, endTime, and order fields. This was working when the goal only had one schedule, but after goal repetition was introduced, a repeated goal would have multiple schedules when the goal was active. Thus, using the schedule field with object type is no longer viable, as it can't show multiple schedules. We plan to introduce new endpoints to return a list of schedules for a goal, instead of only an object.

Unity SDK

  • Deprecated the Api.TurnManager.GetClosestTurnServer interface, which will be removed in AGS version 3.81. To enhance your experience when fetching TURN servers, we recommend transitioning to the GetClosestTurnServer() method from the result of Api.TurnManager.GetTurnServers. This change will streamline your workflow and improve overall performance. For more information, refer to the Configure P2P in Unity SDK guide.

  • The MatchmakingV1 service Api.SessionBrowser and MMv1 Lobby events are deprecated for AGS version 3.78 and will be removed on AGS version 3.81. To enhance you experience, please migrate to the new interfaces and events listed below:

    • Affected interface: Api.SessionBrowser > Api.Session
    • Affected Lobby events:
      • MatchmakingCompleted > SessionV2InvitedUserToGameSession
      • ReadyForMatchConfirmed > SessionV2PartyMemberChanged
      • MatchmakingRejected > MatchmakingV2MatchmakingCanceled
      • RematchmakingNotif > MatchmakingV2MatchmakingStarted
  • Deprecated Api.GetPresenceBroadcastEvent on AGS version 3.78 and this interface will be removed on AGS version 3.81. To enhance the process, we moved the Presence event feature to ClientRegistry.GetPresenceBroadcastEvent.

  • Deprecated Api.GetMiscellaneous().GetCountryGroups on AGS version 3.78 and this interface will be removed on AGS version 3.81. To enhance the process, please use Api.GetUser().GetCountryGroupV3.

Highlights

  • A new Security tab has been added to the details page of users in the Admin Portal to deactivate a user's multi-factor authentication (MFA). In cases where a user is locked out of their account due to losing access to the MFA, admins can manually disable that user's MFA via the Admin Portal. To go to the details page of a user in the Admin Portal, go to Live Service Utilities > Lookup Users.

    • Endpoint and required permission: IAM/AdminDisableUserMFAV4
    • Required permission for the endpoint: ADMIN:NAMESPACE:{namespace}:USER:{userId} [DELETE]
  • A new Profile Edit Restrictions menu has been added to the Admin Portal to configure specific restrictions for users from modifying their profiles. Admins may now set up a configuration in the Admin Portal to allow users unlimited changes, limited changes, or no changes to their profiles once the account creation process is done. To access the menu, go to Admin Tasks > Account & Profile Setup > Profile Edit Restrictions.

  • A new Login Allowlist menu has been added to the Admin Portal to configure a login allowlist/whitelist based on roles. Admins may enable or disable a login allowlist configuration via the Admin Portal. Enabling the login allowlist would allow admins to set up specific roles that are allowed to log in. To access this feature in the Admin Portal, go to Live Service Utilities > Login Allowlist.

  • Introduced support for Google and Apple subscriptions, specifically:

    • Binding of Google and Apple subscriptions to AGS Users.
    • Listening and updating for notification and subscription statuses in real time.
    • Support for game server checks of a player's Apple or Google subscription status.
    • Support for querying a player's Apple or Google subscriptions in the Admin Portal.
    • Support for querying a player's Apple or Google subscriptions from the game's client side.
    • Support for manual syncing of a player's Apple or Google subscription status via the Admin Portal.
    • Support for querying Apple or Google notifications.
    • Added ThirdPartySubscriptionStateChange event, which is used to listen for third-party subscription events.
    • Added SDK support for IAP Subscription Sync:
      • Unreal Engine: Added a new function to support the mobile subscription using the existing function: FOnlineEntitlementsAccelByte::SyncPlatformPurchase.
      • Unity: Added new functions to support mobile subscriptions:
        • Google: Api.GetEntitlement().SyncMobilePlatformSubscriptionGoogle
        • Apple: Api.GetEntitlement().SyncMobilePlatformSubscriptionApple. To synchronize subscriptions for Apple, use the Apple Store Server Notifications V2 endpoint for the Admin Portal configuration.
    • Added SDK support for IAP Subscription Query and added new functions to query purchased subscriptions:
      • Unreal Engine: FOnlineEntitlementsAccelByte::QueryPlatformSubscription
      • Unity: Api.GetEntitlement().QueryUserSubscription For more information, refer to the Third-party subscriptions guide.
  • A new 3rd-Party Order Fulfillment menu has been added to the Admin Portal to support the lookup of order fulfillments done via third-party commerce platforms (e.g., Nexon Commerce). To access this menu in the Admin Portal, go to Commerce > Fulfillments > 3rd-Party Order Fulfillment. Queries can be done by providing either a Transaction ID or a User ID.

  • Introduced the AMS Cost Usage dashboard, a new metric in the existing Grafana Cloud Dashboard to monitor cost usage. The dashboard can be found in your organization's Grafana account, under Dashboards > Overview.

  • The Session Override feature allows you to customize the logic of AGS Session through a dedicated gRPC server. This feature enables developers to implement tailored session management strategies, enhancing flexibility and control over game sessions. To access this feature, go to Multiplayer > Matchmaking > Session Configuration. Create a template and check Use Custom Session Function.

  • Challenge Goals Assignment Customization: Game admins can now customize the assignment of goals to players by using AGS Extend. Admins just need to create the goals within the specific challenge configuration and let the Extend app assign goals to the players. To access this feature in the Admin Portal: go to Engagement > Challenges > Customization. For more details, refer to the Goals assignment customization and the Extend Challenge goals assignment customization articles.

  • Statistics Access Level and Statistics Visibility: Introduced a visibility option for statistics configurations. This option allows the game admin to store user statistics that are not discoverable by the player, so they can store sensitive user statistics data that can only be retrieved by the game server.

    • The available options are:
      • Show All: Both Public and Admin (Server) endpoints can retrieve the stat code.
      • Server Only: Only Admin (Server) endpoints can retrieve the stat code, making it private regardless of the Statistic Access Level (FKA Visibility, see below).
    • With this update, the Visibility field in statistics configurations is being renamed to Statistic Access Level, and the new field will use Statistic Visibility.
    • To access this feature, go to Progression & Inventory > Statistics > Configurations. Click Add Configuration to add a new Stat Code and configure the Statistic Visibility, or click any existing Stat Code with INIT status to update the Statistics Visibility.
    • Endpoints and required permissions:
  • Stop and Accelerate Challenges: Introduced the ability for game admins to stop or accelerate a challenge. This added control ensures that challenges remain dynamic and responsive to unforeseen events or special circumstances.

    • To access this feature, go to Engagement > Challenges > Configurations. Click any existing Challenge with the TIED status. Click the Accelerate or Stop button to update the challenge conclusion.
    • Endpoints and required permissions:
  • Clone Challenge Goal: Add the ability for game admins to clone goals by copying configurations from existing ones, streamlining the goal creation process.

    • To access this feature in the Admin Portal, go to Engagement > Challenges > Configurations.
      • Click Create Challenge, fill in the Challenge Configuration, and click Next.
      • Click Create Goals. In the Create Goal modal, select Clone Existing.
      • Click into the Challenge input field and find and select your source challenge that contains the goal you want cloned.
      • Click into the Goal input field and find and select your desired goal. The configuration from the selected goal will be used for the new configuration.
      • (Optional) Adjust the goal code, requirements, rewards, or other fields as needed.
  • [Unreal Engine] We are introducing a new, robust, thread-safe, async-friendly API access pattern to guarantee object lifetime management.

    GameTelemetry, PredefinedEvent and GameStandardEvent have been updated to support this new pattern. To avoid any build-breaks, a mitigation is included under-the-hood to provide temporary continuity. This mitigation is immediately marked as deprecated and will be removed in a future release.

    We recommend that you update your code as soon as possible, and replace any usage of ApiClient->GameTelemetry with ApiClient->GetGameTelemetryApi().Pin()

  • [Unreal Engine] The Dedicated Server heartbeat is now always-on, defaulting to 15 seconds. Heartbeat frequency can be adjusted with the heartbeat parameter when starting a Dedicated Server (e.g., -heartbeat=20). The value is in seconds. The minimum acceptable value is 15 seconds. Passing in a lower value will default to 15 seconds.

  • [Unreal Engine] Added a new function, CloudSave::BulkGetCurrentPlayerPublicRecordKeys, to allow the current user to query their cloud save keys.

  • [Unreal Engine] Added a new function, Challenge::GetPreviousChallengeProgresses, to allow users to query their previous challenge progress and expose the Challenge API Blueprint.

  • [Unreal Engine] Added Unreal Trace CPU Profiler on the following poller functions in the SDK:

    • GameTelemetry::PeriodicTelemetry()

    • HeartBeat::SendHeartBeatEvent()

    • PresenceBroadcastEvent::PeriodicHeartbeat()

    • Qos::PingRegionsSetLatencies()

    • Credentials::PollRefreshToken()

    • FHttpRetryScheduler::PollRetry()

    • FAccelByteMessagingSystem::PollMessages()

    • ServerCredentials::PollRefreshToken()

    • ServerAMS::PeriodicHeartbeat()

    • ServerDSM::ServerHeartbeat()

    • ServerGameTelemetry::PeriodicTelemetry()

      To use the Unreal Trace CPU Profiler, uncomment //PublicDefinitions.Add("ACCELBYTE_ACTIVATE_PROFILER"); in AccelByteUe4Sdk.Build.cs on line 19.

  • [Unreal Engine] Added new WebSocket reconnection strategies that can be configured per service and per close code.

    • These strategies will apply to all WebSocket services, including Lobby, Chat, AMS, and DSHub. The new strategies are BALANCED, AGGRESSIVE, and LIMITLESS.
    • The default strategies are set as follows: Game Client is set to BALANCED, and Dedicated Server is set to LIMITLESS. The configurations can be updated within the game integration level code. For information on integration guidelines, refer to the Websocket Reconnection Strategy article.
  • [Unreal Engine] Added new functions to listen for the OnPartyCreated notification:

    • SDK: Lobby::AddV2PartyCreatedNotifDelegate();
    • OSS: FOnlineSessionV2AccelByte::AddOnPartySessionCreatedDelegate_Handle();
  • [Unreal Engine] Logging errors and early-outs are now prioritized and the ensure check is reserved for critical failures only.

  • Added support for new isHiddenPublic field in Retrieve User Eligibilities from Agreement service. Models:

    • Unreal Engine: FAccelByteModelsRetrieveUserEligibilitiesResponse
      • Impacted interfaces:
        • OSS: FOnlineAgreementAccelByte::QueryEligibleAgreements
        • SDK: Agreement::QueryLegalEligibilities
    • Unity: RetrieveUserEligibilitiesResponse
      • Impacted interface: Api.GetAgreement().QueryLegalEligibilities
  • [Unity] Fixed Matchmaking, Quality of Service (QoS), and Analytics service issues on the WebGL platform.

  • [Unity] Added a new interface, Api.GetEntitlement().GetUserEntitlementHistory, to retrieve the user's entitlement history.

  • [Unity] Exposed the AGS Chat endpoints to get and set the current user chat configuration:

    • Api.GetChat().GetUserChatConfiguration
    • Api.GetChat().SetUserChatConfiguration
  • Extend Image Vulnerability Scanning: To make sure only Extend apps that are free from critical vulnerabilities run in AGS and the customer is aware of which version of their Extend app contains vulnerabilities, this feature will be executed every time an image is deployed or pushed to the ECR. We also introduced a cron job to scan all Extend apps in the CSM database every week. If a critical vulnerability is found, any subscriber will be notified through email. To receive email alerts for when critical vulnerabilities are found in an Extend app, subscribe to the app. Users can also see the scanning results in the Image History page inside the Extend app.

  • Extend Image Promotion: Enabled the ability to promote one or many of the Extend app images into another Extend app in another namespace, either in the same environment or a different environment. To access the feature in the Admin Portal:

    • Go to Development Utilities > Configuration Migration in the Admin Portal.
    • Click Migrate and you will be redirected to the Migrate Namespace.
    • Fill out all the necessary details, i.e., Config Name, Source Environment, et al.
    • Choose Extend as the service to be migrated.
    • Check Extend App Images.
    • Complete the next steps to finish the image migration.

Breaking changes

Extend

Starting with AGS 3.80, the request maximum size for the Extend service extension has been limited to 4.5 Mb.

Unity SDK

  • Removed support for querying inventory items by quantity in the Inventory service. Items will now be returned by default if their quantity is one or more. This change impacts the following interfaces:

    • AccelByte.Api.Inventory.GetUserInventoryAllItems
    • AccelByte.ServerServerInventory.GetUserInventoryAllItems
    note

    Adding the quantity parameter will no longer influence the API results.

  • The following sort option functions have been removed and will fall back to the default sort option, CreatedAt:

    • Quantity
    • QuantityAsc
    • QuantityDesc
    note

    Setting these deprecated enums will no longer impact the API results.

  • The quantity field and the sorting options by quantity will be removed in AGS version 3.81.

TypeScript SDK

info

For information about migrating from AGS TypeScript Version 3, refer to the Migration Guide.

  • SDK initialization: SDK now needs to be initialized with two fields: coreConfig and axiosConfig. This distinction clarifies which configurations apply to each component.
  • Return response: API function calls are now returning, data, headers, and status, instead of just the data.
  • Events and Interceptors: The AGS TypeScript SDK no longer has the ability to provide event listeners (e.g., onSessionRenewed). This capability is replaced by interceptors. Axios interceptors are now attached to the axiosInstance in the SDK instead of the global axios object.
  • Interceptors: The AGS TypeScript SDK now offers custom interceptors to replace certain events or options
  • API Class Arguments: The ApiArgs (the second *API argument) has been replaced by partial coreConfig and axiosConfig to make it consistent with the options passed in the initializer.
  • Admin Class Endpoints: Admin endpoints that have the "Admin" tag in Swagger will only generate one "Admin" keyword. The AdminPlayerRecordAdmin has been replaced by PlayerRecordAdmin.
  • (Extend Functionality) Token Repository: Set the accessToken and refreshToken and update the Axios request headers to use Bearer authentication.
  • refreshTokens method: The refreshTokens method is now replaced by setToken({ accessToken, refreshToken }) with the same behavior.

Minor changes and improvements

Admin Portal

  • Process improvements for the game namespace creation.
  • Changes made to the user role permissions via the Default User Role Override menu in the Admin Portal are now highlighted for an admin to review before saving and applying the changes.
  • Right-clicking on the View button of an item in the Store draft now includes an Open link in a new tab option.
  • A placeholder Empty Display Name will now be shown in any display name field of a user that doesn't have a display name.
  • The Purchased Contents action name, located in the User Management menu's Linked Account tab, is reworded to Purchased DLCs. The pop-up menu from the action also has a new table format, where it now lists the DLC names and their purchase time.
  • The Currency Code field, located in the Add Currency modal from the Currencies menu, now supports a limit of 20 characters (increased from 5 characters).
  • The Mandatory Email Verification field, located in the Feature Flags menu, is now always shown by default (previously it was hidden behind an experimental flag).
  • Users with a View-only role are no longer able to tick or untick the Mandatory Update field for a legal document.
  • Adjusted the wording on the Leaderboards details page.
  • Added a dropdown for available Achievement codes when setting up Achievements as Challenge goal requirements.
  • Several adjustments were made to the Session & Party History page:
    • Adjusted all data with time format to be displayed in UTC and the local browser timezone
    • Adjusted Session ID as the default search filter in Session History > Sessions
    • Adjusted Party ID as the default search filter in Session History > Parties
    • Changed the label User ID to Member ID in the search filter
  • Updated the JSON example in the default template when creating or editing a match ruleset.

GDPR

Login Queue

  • The following endpoints will can be called using client credentials:
    • GET /login-queue/v1/admin/namespaces/{namespace}/status
    • PUT /login-queue/v1/admin/namespaces/{namespace}/empty
    • PUT /login-queue/v1/admin/namespaces/{namespace}/config
    • GET /login-queue/v1/admin/namespaces/{namespace}/config

Cloud Save

  • Improved the Cloud Save service to support events emission for a Cloud Save Player Record and Admin Player Record whenever they're created, updated, or deleted. For details on the available events, refer to the API events documentation.

Inventory

  • Improved the internal logic to prevent double processing of items from the AGS Commerce service.

Social

  • Updated the OpenJDK being used by the service to version 21.

Session History

  • Added support for multiple match pools in the X-ray overview section.
  • Changed PartyID to TicketID in the request body for endpoints POST /sessionhistory/v2/admin/namespaces/{namespace}/xray/tickets and POST /sessionhistory/v2/admin/namespaces/{namespace}/xray/tickets/bulk.

Matchmaking

  • Added a new public endpoint to get the number of players in a match queue: GET /match2/v1/public/namespaces/{namespace}/match-pools/{pool}/metrics/player
  • Fixed the matchmaking issue where the new ticket wouldn't match with the old ticket that has high skill discrepancies.
  • Fixed the matchmaking issue where the player wouldn't get matched with a player from another region.
  • Excluded specific session IDs while matchmaking by adding excludedSessions on the create match ticket request body.
  • The feature flag value of leader_matchmaking_cancelled_notification now returns in the response header when the user creates a match ticket.

Lobby

  • Improved the Lobby notification sequence for multiple users.
  • Added cleanup of user data in AGS Lobby when a user account has been deleted.

Turn Manager

  • Added timeout configuration for TURN server, so that the server can be removed whether the CCU is 0 or the timeout has been exceeded after deleting the server from the Admin Portal.

Login Website

  • Improved the language selector UI on mobile by adding a backdrop to the dropdown.

App Editor

  • Improved the capability of the hamburger menu widget or menu-bar widget for the Player Portal's header and footer customization feature.

AMS

  • Enabled pagination on the Dedicated Server List page.
  • Added Session ID field on the Dedicated Server List page.

Game SDK

  • [Unreal Engine] Created SharedPtr for Lobby and Chat, developers need to move from using ApiClient->Chat to use ApiClient->GetChatApi().Pin()

  • [Unreal Engine] Changed any this on lambda capture inside Chat and Lobby to WeakPtr

  • [Unreal Engine] Changed TSharedPtr<FAccelByteModelsTelemetryBody> to TSharedPtr<FAccelByteModelsTelemetryBody, ESPMode::ThreadSafe>

  • [Unreal Engine] Added the missing enum CUSTOM to the EAccelByteModelsChallengeAssignmentRule

  • [Unreal Engine] Changed the lambda in Item::GetItemMappings() to capture by value.

  • [Unreal Engine] Added an additional function to the Challenge API, Challenge::GetChallengeProgress, to query the challenge progress with the GoalCode as an optional parameter.

  • [Unreal Engine] Added a new flag, bSendMetricAutomatically, to the network utilities configuration to disable the automatic sending of Quality of Service (QoS) metrics, including the Turn Server Ping and Connected Metrics.

  • [Unreal Engine] Removed the default constructor for FAccelByteTimeManager.

  • [Unreal Engine] Added support for an equals sign when specifying arguments on config injection.

  • [Unreal Engine] The local session storage will now only be updated when receiving the OnSessionStorageChanged notification.

  • [Unreal Engine] This improvement affects the query user entitlement SDK function. The EntitlementName parameter from the QueryUserEntitlements was URL-encoded twice.

    To improve the query result, we ensure the query should URL-encode the EntitlementName once.

    File: ..\Plugins\AccelByte\AccelByteUe4Sdk\Source\AccelByteUe4Sdk\Private\Api\AccelByteEntitlementApi.cpp Affected parameter: EntitlementName

    Function:

    FAccelByteTaskWPtr QueryUserEntitlements(FString const& EntitlementName
    , FString const& ItemId
    , int32 Offset
    , int32 Limit
    , THandler<FAccelByteModelsEntitlementPagingSlicedResult> const& OnSuccess
    , FErrorHandler const& OnError
    , EAccelByteEntitlementClass EntitlementClass = EAccelByteEntitlementClass::NONE
    , EAccelByteAppType AppType = EAccelByteAppType::NONE
    , TArray<FString> const& Features = {});
    note
    • For developers implementing the AccelByte OSS: There is no required adjustment.
    • For developers implementing the AccelByte SDK directly: If you pass an empty string to the EntitlementName, no adjustment is required. However, if there's a call to the function and it passes a non-empty value to the EntitlementName parameter, the returned response from the backend will be more accurate and return the requested name.
  • [Unity] Added a new Lobby notification, MatchmakingV2MatchCanceled, when the party leader has deleted the matchmaking ticket.

  • [Unity] Added Api.GetEntitlement().SyncSteamInventory to sync Steam inventory items.

  • [Unity] Added AMS support for Api.GetQos().GetAllServerLatencies()

Extend

  • Enabled access to Grafana Cloud once the game developer unlocks AGS Shared Cloud by entering their credit card.

Bug Fixes

Admin Portal

  • Fixed "Replay Tour Guide" feature incorrectly displaying on unrelated screens.
  • Fixed the sidebar issue that overlaps the main pages for some screen resolutions.

Achievement

  • Updating the Base Policy, Policy Version, or Localized Policy Version in the Admin Portal now properly updates the updatedAt value.

IAM

  • When a headless account is upgraded to a full account using the same username that the headless account is already using, the account upgrade will now succeed.

Session

  • previousStatus is now cleared after players have left or dropped from a game session.

Session History

  • Fixed the negative value returning on the Matchmaking X-Ray worker details.
  • Fixed the total active sessions being unable to queried with match pools.
  • Fixed the issue where the partyID field is filled with a match ticket ID when getting matchmaking ticket details by ticket ID.

Matchmaking

  • Fixed the issue where the matchmaking creates an unbalanced team match in some cases.
  • Fixed the issue where the Matchmaking X-Ray feature returns a negative value in Match Time.
  • Fixed the HTTP error 404 displayed when accepting partial backfill with the parameter stop:true.
  • Added the gRPC function to get the TicketID from the core matchmaking.

Login Website

  • Fixed an issue where the customer support links are not redirecting the player to the desired location that is being set from the App Editor.

Player Portal

  • Fixed an issue where the legal updates info banner are misleading (using wrong document name) in Legal page

Analytics

  • Fixed the warehouse default value issue in Snowflake integration.
  • Fixed the restarting of the game telemetry worker due to a changing payload.
  • Fixed the Kafka reconnection issue in the game telemetry worker.
  • Fixed the deletion consumer group issue in Analytics connector V2.
  • Fixed the committing message failed issue in Analytics connector V2.

AMS

  • Fixed account limit issue for Shared Cloud trial users.
  • Fixed log streaming not working when a dedicated server is in the "creating" state.

Game SDK

  • [Unreal Engine] Quality of Service (QoS) destructor now unsubscribes from EAccelByteMessagingTopic::LobbyConnected instead of EAccelByteMessagingTopic::QosRegionLatenciesUpdated.
  • [Unreal Engine] Correctly returns bIsOnline and bIsPlayingGame when querying presence.
  • [Unreal Engine] Correctly updates FOnlineUserPresenceStatus.
  • [Unreal Engine] Subsequent calls to Simultaneous Login after successfully logging in will no longer re-trigger login flow.
  • [Unity] Improved the stability of latency calculation on the WebGL platform.
  • [Unity] Updated the response model for the Server.Challenge.RandomizeChallengeGoals.
  • [Unity] Enabled retry for the HTTP request when receiving ErrorCode 20071 SessionVersionMismatch response.