UGS Release Notes

How to access the latest package features

Please follow the installation instructions to upgrade your packages. If you don't see a package's latest version available in the Editor, make sure you update to the latest LTS or Tech Stream release.

Some new features are pre-releases; these are identified with the pre tag. Learn more about working with Pre-release packages.

February 2023

Cloud Code 2.2.4

  • Fixed: Fixed corrupted npm libraries used for services.
  • Fixed: Missing logs in some failure cases are now handled.
  • Fixed: Added more verbose logging for diagnostics behind a preprocessor directive.

Analytics Dashboard

  • Added: Simplify Analytics Event Management - Expand creation modal to include parameters.

Analytics 4.3.0

  • Added: CustomData(string eventName) method for recording events that don't have any parameters.
  • Changed: The AnalyticsContainer object is now spawned during UnityServices.InitializeAsync.
  • Fixed: Issue where a single corrupt event could prevent all subsequent events from being sent.
  • Fixed: NullReferenceException when passing null instead of a Dictionary of parameters to CustomData for an event that doesn't have any parameters.
  • Fixed: NullReferenceException when passing null for the currency code to ConvertCurrencyToMinorUnits; it now throws an ArgumentNullException if the currency code is either null or empty.
  • Fixed: Compiler error on 2020.1 Editor versions.
  • Fixed: Documentation comment on IAnalyticsService.Flush method to clarify behavior and usage.

Game Overrides

  • Added: Game Overrides users can now set a description on their overrides to explain purpose and intended outcome of the override.
  • Fixed: Pagination is no longer persisted when switching between Game Overrides and Push Notifications, which in some cases led to an error page being displayed.

Cloud Content Delivery 2.2.2

  • Added: SetTimeout to CcdManagement to allow configuring timeouts for API calls.
  • Added: GetEntriesAsync(EntryOptions, string, int) which should be the preferred method of getting entries.
  • Added: ListEnvironmentsByProjectAsync and GetEnvironmentByNameAsync method.
  • Added: MockHttpRequest for writing unit tests.
  • Added: Unit tests for EnvironmentsApi.
  • Changed: InternalUploadAsync changed to use a signed URL to upload content.
  • Changed: CreateEntryAsync, CreateOrUpdateEntryByPathAsync, UpdateEntryAsync and UpdateEntryByPathAsync changed to request a signed URL if an upload is needed based on IsUpToDate.
  • Changed: SetDefaultEnvironmentIfNotExists changed to use ListEnvironmentsByProjectAsync.
  • Changed: Added new TryCatchRequest to allow skipping SetDefaultEnvironmentIfNotExists for routes without an Environment.
  • Changed: Moved updates of accessToken and projectId from CcdManagement.Instance to an Action that can be removed for testing.
  • Fixed: Fix issue with GetReleaseDiff and GetReleaseDiffEntries sending empty release num query params.
  • Fixed: Fix issue with GetOrgAsync and GetOrgUsageAsync sending badly formatted body in request.

Core SDK 1.7.1

  • Fixed: ActionScheduler doesn't generate GC allocation (used to be 40 bytes) each frame anymore.
  • Fixed: Added a link.xml generator to make sure all required service assemblies are properly preserved in build with code stripping enabled. Only services providing a IServiceComponent are listed in this link file.
  • Fixed: Failed telemetry request no longer log errors when they fail, unless ENABLE_UNITY_SERVICES_CORE_TELEMETRY_LOGGING is enabled as scripting define.
  • Fixed: All ActionScheduler registered during play mode are now properly unregistered when exiting playmode.

In-App Purchasing 4.6.0

  • Added: Added a new restore transaction callback RestoreTransactions(Action<bool, string> callback) to obtain the error string when RestoreTransactions is not successful (IAppleExtensions and IGooglePlayStoreExtensions).
  • Added: Added a new initialize failed callback IStoreListener.OnInitializeFailed(InitializationFailureReason, string) to obtain the error string when OnInitializeFailed is invoked.
  • Added: Added a new setup failed callback IStoreCallback.OnSetupFailed(InitializationFailureReason, string) to obtain the error string when OnSetupFailed is invoked.
  • Added: Added a new FetchAdditionalProducts. The failCallback contains an error string. IStoreController.FetchAdditionalProducts(HashSet<ProductDefinition>, Action, Action<InitializationFailureReason, string>).
  • Added: Apple - Product.appleOriginalTransactionId : Returns the original transaction ID. This field is only available when the purchase was made in the active session.
  • Added: Apple - Product.appleProductIsRestored : Indicates whether the product has been restored.
  • Added: GooglePlay - IGooglePlayConfiguration.SetFetchPurchasesExcludeDeferred(bool exclude) has been added to revert to the previous behaviour. This is not recommended and should only be used if Deferred purchases are handled in your IStoreListener.ProcessPurchase.
  • Added: GooglePlay - IGooglePlayStoreExtensions.GetPurchaseState(Product product) has been added to obtain the GooglePurchaseState of a product.
  • Added: GooglePlay - Added missing values to GoogleBillingResponseCode in order to output it in PurchaseFailureDescription's message when available.
  • Added: Codeless - Added to the IAP Button the option to add a script for the On Transactions Restored: void OnTransactionsRestored(bool success, string? error).
  • Changed: The old OnInitializeFailed OnInitializeFailed(InitializationFailureReason error) was marked Obsolete.
  • Changed: The old OnSetupFailed OnSetupFailed(InitializationFailureReason reason) was marked Obsolete.
  • Changed: The old FetchAdditionalProducts FetchAdditionalProducts(HashSet<ProductDefinition> additionalProducts, Action successCallback, Action<InitializationFailureReason> failCallback) was marked Obsolete.
  • Changed: The old restore transaction callback RestoreTransactions(Action<bool> callback) was marked Obsolete (IAppleExtensions and IGooglePlayStoreExtensions).
  • Changed: Apple - Transactions received from Apple that are invalid (where the product is not entitled) no longer output the Finishing transaction log. This only affects transactions that never reached the ProcessPurchase.
  • Changed: GooglePlay - The enum GooglePurchaseState now recognizes 4 as Deferred.
  • Fixed: Analytics - A ServicesInitializationException introduced in Analytics 4.3.0 is now handled properly.
  • Fixed: Analytics - Fixed an issue where transactions events were invalidated when there was no localization data for a product.
  • Fixed: GooglePlay - Fixed a NullReferenceException when querying sku details while the BillingClient is not ready.
  • Fixed: GooglePlay - Fixed Application Not Responding (ANR) when foregrounding the application while disconnected from the Google Play Store.
  • Fixed: GooglePlay - Limited the occurence of PurchasingUnavailable errors when retrieving products while in a disconnected state to once per connection.
  • Fixed: GooglePlay - Deferred purchases are, by default, no longer sent to IStoreListener.ProcessPurchase when fetching purchases. This avoids the possibility of granting products that were not paid for. These purchases are only processed when they become Purchased. This can be reverted with IGooglePlayConfiguration.SetFetchPurchasesExcludeDeferred(bool exclude) to not exclude them, but Deferred purchases must be handled in IStoreListener.ProcessPurchase.

Lobby 1.1.0-pre.3

  • Added: LobbyEvents now provides a Version for comparison.

  • Added: CreateOrJoinLobby function to allow for a single call to create or join.

  • Added: PlayerProfile field to Player class.

  • Added: LobbyEvents functionality introduced to provide live change updates for lobbies.

  • Fixed: Removed guards that were preventing Lobby Events APIs from being exposed completely.

January 2023

Authentication 2.4.0

  • Added: Apple Game Center Support:
    • SignInWithAppleGameCenterAsync, LinkWithAppleGameCenterAsync, UnlinkAppleGameCenterAsync
    • Apple Game Center Authentication API Support
  • Added: Player Account Deletion API.

Cloud Code 2.2.1

  • Fixed: Duplicate file in the deployment window now appear as a warning instead of an error.
  • Fixed: Rate limiting triggered in some cases.

Remote Config 3.3.1

  • Added: Updated deployment API implementation for Config As Code.
  • Fixed: An issue where deployment failures did not include the message detail.

DeploymentBETA 1.0.0-pre.7

  • Added: New UI addition for the deployment window: Enhanced status observability.
  • Added: New UI addition for the deployment window: Asset selection with checkboxes.
  • Fixed: Deployment Status being saved across Editor sessions.
  • Fixed: Issue with rate-limiting on deployments.

In-App Purchasing 4.5.2

  • Fixed: Removed unused exception variable causing a compiler warning CS0168.
  • Fixed: Telemetry - Calls to telemetry reporting were occasionally tripping a NullReferenceException, IndexOutOfRangeException or KeyNotFoundException, for some users. These exceptions are now caught safely and logged. These failures are also mitigated by moving all Telemetry calls to the main thread. Issue noticed in IAP 4.4.1, but may be older.
  • Fixed: Apple - Optimized memory usage when processing transactions to prevent out of memory crash when processing transactions on launch.
  • Fixed: Batch Mode - Calls to UnityPurchasingEditor.TargetAndroidStore to select UDP now successfully check UDP package installation and log an error instead of throwing a blocking popup when executed as part of a Batch Mode command.
  • Fixed: Analytics - Removed escape characters for receipt JSON which was causing parsing issues in the backend.
  • Fixed: GooglePlay - Fixed a bug causing a crash when retrying to finish a transaction while disconnected.

Cloud Save

  • Changed: Removed 16KB slot size limit, users now have 5MB to work with in total across all slots.
  • Changed: Increased maximum slot count from 200 to 2000.

Push NotificationsBETA 3.0.0-pre.1

  • Added: Product dashboard link is now present in the package settings panel.
  • Changed: Renamed package settings (Android) so that they match Firebase setting names.
  • Changed: Removed some classes from the public API that weren't meant to be used directly.
  • Changed: Removed deprecated PushNotifications class and obsolete PushNotificationSettings properties.
  • Fixed: notificationOpened events are now also sent when launching a fully closed app from a notification.
  • Released into Open Beta.

Analytics

  • Added: Support for legacy analytics custom events in UGS Analytics to avoid the need to make changes to game code.

December 2022

Relay 1.0.5

  • Added: Using this version of Relay with UTP 2.0.0-pre.3 and NGO 1.2.0 enables using Relay on webGL.
  • Added: Update SimpleRelay sample.
  • Changed: Replaced InteractiveRelayUtp sample with SimpleRelayUtp.
  • Changed: Update QoS dependency to 1.1.0.
  • Changed: Update UTP dependency to 1.3.0.

Core SDK 1.7.0

  • Changed: Editor AccessTokens now caches the Gateway JWT per session and refreshes it as needed. It can now be used directly without needing to cache the results.
  • Fixed: Improved thread safety for scheduler component. IActionScheduler is now safely callable from any thread.
  • Fixed: Improved thread safety for telemetry components. IMetrics and IDisagnostics are now safely callable from any thread.

November 2022

Authentication 2.3.1

  • Added: Meta Quest (Oculus) Support:
    • SignInWithOculusAsync, LinkWithOculusAsync, UnlinkOculusAsync
    • Meta Quest Authentication API Support
  • Added: GetGooglePlayGamesId() to PlayerInfo.

Cloud Code 2.1.1

  • Added: Integration with the Deployment package for config-as-code which allows to edit and configure CloudCode scripts directly from the Editor.
  • Fixed: Void type now allowed as return type for CloudCode scripts.
  • Fixed: Removed requirement for function arguments when calling an endpoint. Now, it's possible to provide either null or omit them.

Core SDK 1.6.0

  • Added: UnityServices.ExternalUserId which can be used to pass a user identifier from a third party provider to Unity Gaming Services.
  • Added: All IInitializablePackage initialization time is now measured by Services Core.
  • Changed: CoreRegistryInitializer now throws a ServicesInitializationException instead of an explicit NullReferenceException when the dependency tree is null.
  • Changed: ActionScheduler updated to be thread safe.
  • Changed: Services configuration file isn't temporarily added to the StreamingAssets folder during builds on Unity 2021.3 and up.
  • Changed: Services initialization without a linked project ID now fail (throw UnityProjectNotLinkedException).
  • Fixed: Persisting telemetry no longer logs errors, unless ENABLE_UNITY_SERVICES_CORE_TELEMETRY_LOGGING is enabled as scripting define. Diagnostics are sent when persisting telemetry produces an error.
  • Fixed: Core no longer fails initialization when it fails to find a stripped service package.
  • Fixed: Services Core failing to find all IInitializablePackage if an unity package implements it multiple times.
  • Fixed: A case where null configuration values were causing serialization issues.
  • Fixed: Issue with stripping when authentication APIs are not used.

Deployment 1.0.0-pre.4

  • Added: Deployment Window now allows management of deployments for Cloud Code and Remote-Config.
  • Added: First pre-release version of the package.

Economy 3.0.0

  • Added: CustomDataDeserializable has been added to configuration items and is of type IDeserializable.
  • Added: Missing XmlDoc to public interfaces: IEconomyConfigurationApiClient, IEconomyPlayerBalancesApiClient, IEconomyPlayerInventoryApiClient and IEconomyPurchasesApiClientApi.
  • Removed: remote-config-runtime dependency.

Remote Config 3.2.2

  • Added: Implemented file-based-authoring for RC Editor.
  • Added: Added documentation for caching mechanism.
  • Added: Released versioning, it is now possible to view and restore older versions of a games’ configuration through the dashboard as well as the admin API.

In-App Purchasing 4.5.1

  • Fixed: GooglePlay - Fixed deferred purchases being processed when the app is foregrounded. Issue introduced in Unity IAP 4.5.0.
  • Fixed: GooglePlay - Fixed a NullReferenceException in DequeueQueryProducts happening when launching the app. Issue introduced in Unity IAP 4.2.0.
  • Fixed: Analytics - Fixed a NullReferenceException when reporting failed transactions of purchase unavailable products. Issue introduced in Unity IAP 4.2.0.
  • Fixed: Analytics - Legacy Analytics no longer reports events in custom UGS environments, which would cause misreported live sales figures. Issue introduced in Unity IAP 4.2.0.

October 2022

Authentication 2.2.0

  • Added: Bring Your Own Identity v1 - OpenID Connect Support:
    • SignInWithOpenIdConnectAsync, LinkWithOpenIdConnectAsync, UnlinkOpenIdConnectAsync
    • OpenID Connect Authentication API Support
  • Added: WebGL Support.

Core SDK 1.4.3

  • Changed: Telemetry logs now use the ENABLE_UNITY_SERVICES_CORE_TELEMETRY_LOGGING define instead of ENABLE_UNITY_SERVICES_CORE_VERBOSE_LOGGING.
  • Fixed: Added diagnostic message length limit and telemetry count limit, so telemetry payload isn't rejected by telemetry service.

In-App Purchasing 4.5.0

  • Added: Apple - Add support for Family Sharing.
    • API IAppleConfiguration.SetEntitlementsRevokedListener(Action<List<Product>> called when entitlement to a products are revoked. The Action is called with the list of revoked products. See documentation "Store Guides" > "iOS & Mac App Stores" for a sample usage.
    • API - Product metadata is now available in AppleProductMetadata from ProductMetadata.GetAppleProductMetadata() via IStoreController.products.
    • API AppleProductMetadata.isFamilyShareable indicated if the product is family shareable.
    • Apple App Store - 11 Family Sharing sample that showcases how to use Unity IAP to manage family shared purchases.
  • Fixed: GooglePlay - Processing out-of-app purchases such as Promo codes no longer requires the app to be restarted. The purchase is processed the next time the app is foregrounded. Technical limitation: In the case of promo codes, if the app is opened while the code is redeemed, you might receive an additional call to IStoreListener.OnPurchaseFailed with PurchaseFailureReason.Unknown. This can be safely ignored.
  • Fixed: GooglePlay - Fixed a NullReferenceException that would rarely occur when retrieving products due to a concurrency issue introduced in Unity IAP 4.2.0.

September 2022

Analytics 4.2.0

  • Added: SessionID property that returns the GUID value currently being used to populate the sessionID parameter of all events.
  • Changed: Reduced frequency of gameRunning event to reduce excess traffic (this doesn't affect the quality of your data).
  • Fixed: SDK initialisation failing silently on WebGL due to problem with privacy consent flow.
  • Fixed: SDK event batching for upload failing silently on WebGL.

In-App Purchasing 4.4.1

  • Added: GooglePlay - Google Play Billing Library version 4.0.0.
    • The Multi-quantity feature is not yet supported by the IAP package and will come in a future update. Do not enable Multi-quantity in the Google Play Console.
    • Add support for the IMMEDIATE_AND_CHARGE_FULL_PRICE proration mode. Use GooglePlayProrationMode.ImmediateAndChargeFullPrice for easy access.
    • The "skuDetails" in the receipt json is now an array of the old structure, not just one object. It only has one element in most cases, so if this is being parsed in your app, treat it like an array and get the first element by default.
  • Fixed: GooglePlay - Fixed NullReferenceException and ArgumentException that would rarely occur due to a concurrency issue introduced in Unity IAP 4.2.0.
  • Fixed: Amazon - Set android:export to true to support Android API level 31+.
  • Fixed: GooglePlay - Fix IGooglePlayConfiguration.SetDeferredPurchaseListener and IGooglePlayConfiguration.SetDeferredProrationUpgradeDowngradeSubscriptionListener callbacks sometimes not being called from the main thread.
  • Fixed: GooglePlay - When configuring IGooglePlayConfiguration.SetQueryProductDetailsFailedListener(Action<int> retryCount), the action is invoked with retryCount starting at 1 instead of 0.
  • Fixed: GooglePlay - Added a validation when upgrading/downgrading a subscription that calls IStoreListener.OnPurchaseFailed with PurchaseFailureReason.ProductUnavailable when the old transaction ID is empty or null. This can occur when attempting to upgrade/downgrade a subscription that the user doesn't own.

August 2022

Analytics 4.1.0

  • Added: Added a method to access the user ID used by Analytics at runtime.
  • Fixed: Events are now recorded with timestamps including milliseconds.
  • Fixed: XML documentation is available for more model objects.
  • Fixed: A better error message is displayed when the project ID is missing.

Lobby 1.0.3

  • Fixed: A bug where ArgumentNullException would throw on LobbyConflict (HTTP 409) resolution.
  • Fixed: An issue where a CommonErrorCode was being reported instead of a LobbyExceptionReason, invalidating some switch cases.

In-App Purchasing 4.3.0

  • Added: GooglePlay - API IGooglePlayConfiguration.SetQueryProductDetailsFailedListener(Action<int>) called when Unity IAP fails to query product details. The Action is called on each query product details failure with the retry count. See documentation Store Guides > Google Play for a sample usage.

July 2022

Authentication 2.1.1

  • Added: Google Play Games Support:
    • SignInWithGooglePlayGames, LinkWithGooglePlayGames, UnlinkGooglePlayGames
    • Google Player Games Authentication API Support

Cloud Code 2.0.1

  • Fixed: Missing XmlDoc on public ICloudCodeService interface.

Cloud Save 2.0.1

  • Added: Missing XmlDoc to public ICloudSaveDataClient interface and CloudSaveService static class.

Core SDK 1.4.2

  • Added: Log a JSON containing the common configuration shared among all services for debugging purposes when using ENABLE_UNITY_SERVICES_CORE_VERBOSE_LOGGING as a scripting define.
  • Added: Log warning when building a project with core package included and without linking the project in project settings.
  • Changed: Log error instead of warning when core initialize with no cloud project ID.
  • Fixed: NullReferenceException while telemetry was provided an empty file, fixed by introducing a null check.
  • Fixed: DirectoryNotFoundException happened inconsistently on Switch, fixed by resolving racing condition issue.

Remote Config 3.1.3

  • Added: Using ENABLE_CLOUD_SERVICES_ANALYTICS flag for platforms using Analytics within 2.x namespace.
  • Added: Whitelisting platforms for getting userId from Analytics package within 2.x namespace.
  • Added: Allowing projectId and userId params to be in the payload for consoles.

In-App Purchasing 4.2.1

  • Added: Feature to automatically initialize Unity Gaming Services through the catalog UI. Please see the documentation for more details.
  • Changed: The In-App Purchasing package now requires Unity Gaming Services to have been initialized before it can be used. For the time being IAP will continue working as usual, but will log a warning if Unity Gaming Services has not been initialized. In future releases of this package, initializing Unity Gaming Services will be mandatory. Please see the documentation for more details.
  • Fixed: Downgrade com.unity.services.core from 1.4.1 to 1.3.1 due to a new bug found in 1.4.1.