Appearance
Release 19
July 22nd, 2022
Appearance
July 22nd, 2022



Major improvement: Upgrade to MySQL 8.x and Aurora RDS 3, enabling instantaneous table schema updates. Support for MySQL 5.7 is now deprecated.
Major improvement: LiveOps Dashboard TypeScript migration. Conversion of the LiveOps Dashboard integration API and internal libraries in TypeScript, significantly improving the development experience for custom dashboard components.
ArgumentNullException to be thrown from inside HttpListener when used by the MetaplaySystemHttpServer a few times from our internal test suites. mainStore or Cypress tests!Options.yaml files have been cleaned from most of the SDK-required options and should now mainly contain game-specific values. Authentication has been renamed to AdminApi to better reflect its purpose. MetaplayFeatureFlags that are passed to the MetaplayCoreOptions constructor. com.unity.newtonsoft-json v3.0.2). MetaplayCore or MetaSerialization for operations involving the Metaplay SDK within the Unity editor. When the MetaplaySDK package is present in the project, the MetaplaySerializerBuild.InitForEditor() hook will do the necessary initialization automatically. 
MetaOverviewList wrapper component allows you to easily add game-specific data to the overview lists.
MetaButtoncomponent with the safetyLock property set to true.


DevOverwritePlayerStateRequest development-only request to reset the current player state.Assets/link.xml files has been replaced with reading the sdk-side link.xml file during the game build./Variant column as a comma-separated list, to reduce the need for duplicating information for variants as separate rows.[MetaDescription()] attribute has been generalized and is now used in more features to show human-readable descriptions in the dashboard.MetaMessages, the MetaRequest/MetaResponse pair. The new primitive makes it convenient to implement server queries from the client. Currently the transport only supports targeting the session actor, in the future the mechanism can be extended to support queries to server-side entities as well. The client-side API for issuing requests can be found as IMessageDispatcher.SendRequestAsync().MetaplayGameCenterPlugin has been added to help fetching both legacy and team-scoped player verification tokens.Infrastructure and Helm chart compatibilities for this release:
infra-modules version 0.1.6 or later for infrastructuremetaplay-gameserver Helm chart version 0.4.0 or later for deploymentinfra-modules version 0.2.2 or later for infrastructuremetaplay-gameserver Helm chart version 0.4.1 or later for deploymentMetaplaySDK.InitSerialization() is now private and calls to it from project editor code should be removed.MetaplayCoreOptions.ProjectName that replaces the old EnvironmentOptions.ApplicationName.ServerMainBase.RunServerAsync() or BotClientMain.RunBotsAsync() instead of the old methods (those are now protected to avoid accidental usage). The EFCore detection logic was also moved into ServerMainBase, so it no longer needs to be done in the userland ServerMain.METAPLAY_ENVIRONMENT_FAMILY must now be specified when running the server in a container. Helm chart v0.4.0 sets this.Environment:ExitOnUnknownOptions, and is intended for catching errors during local development. In cloud environments, it is disabled by default, and should be kept that way to allow the server and infra to be briefly out of date with each other during backend updates.IMetaplayClientSocialAuthenticationDelegate receives information if failure due to a temporary issue and the potential error message.ConflictResolutionId which it must pass in into MetaplayClient.SocialAuthManager.ResolveConflict.GuildActor.CreateGuildDiscoveryInfo now returns a pair of public and server-only info without using GuildDiscoveryGuildData.GuildModelConstants and GuildActor[Base] into a GuildRequirementsValidator integration which the game may override with a custom implementation.AdminApiPermissionRegistryAttribute to AdminApiPermissionGroupAttribute.http://localhost:5552 instead of old http://localhost:5550/api/cdnEmulator. Must change all usage to new url. The dedicated server listens to connections from all networks.IMetaplayLocalizationDelegate.AllowAppStartWithoutLocalizations is removed and is now controlled by MetaplayFeatureFlags.EnableLocalizations given during init.StringIds containing dots or hyphens, the parsing stops at whitespace instead of ignoring whitespaces. In the unlikely case a project has whitespace in StringIds in configs, they'll need to be adjusted.IMetaplayCoreOptionsProvider, replacing the older mechanism using the MetaplayCoreOptionsProvider attribute.MetaplayFeatureFlags to MetaplayCoreOptions constructor. Specify EnableLocalizations based on whether the project uses the Metaplay localization feature and EnableGuilds if the Metaplay guilds feature is used.SessionActorBase has _state.GameState renamed into _gameState. Session is established if _phase == ActorPhase.InSession (instead of _state != null).METAPLAY_ENABLE_FIREBASE_ANALYTICS is defined, all members in all Analytics Events must be scalar types, or explicitly ignored with [FirebaseAnalyticsIgnore]. Previously non-scalar types were automatically ignored.PlayerContext.Update or GuildContext.Update. The updates are handled automatically.MetaSerializableFlags.AllowNoMembers is removed. The types must instead be marked with [MetaAllowNoSerializedMembers]. This allows consistent usage with [MetaSerializableDerived] types.ParseLegacyVersion1PoolPage implementation for one-time data migration. Reference implementation is available in idler sample project.IMetaplayClientConnectionDelegate.CreateOfflineTransport() is now CreateOfflineServer(). Offline server instance is moved from MetaplayConnection.Delegate.OfflineServer into MetaplayConnection.OfflineServer.[MetaSerializable] base class, the subclass needs to specify either [MetaSerializable] (if the class isn't intended to be serialized via the base class) or [MetaSerializableDerived(...)]. Previously, the subclass would inherit the [MetaSerializable] from the base class.PlayerActorBase has been moved to separate PlayerActorGuildComponent. Integrations need to be updated accordingly by moving PlayerActor guild-related overrides into a game-specific PlayerActorGuildComponent derived class.BotClient actor should no longer implement IPlayerModelClientListenerCore directly as it is already no-op implemented in the base class.meta: { sidebarOrder: number } prop to be placed in a specific position -> migrate old integration files.uiUtils.ts -> migrate existing game-specific components.MetaplayFeatureFlags that can be used to enable/disable features across the client and the server. Initially, localization feature can be controlled via the EnableLocalizations member and the guilds feature via EnableGuilds. The feature flags must be passed to MetaplayCoreOptions.MetaTime now supports date-time syntax, such as 2022-05-20 12:34:56.789.ChecksumGranularity PerActionSingleTickPerFrame limits the number of tick checksums to at most one tick per frame which reduces the performance impact when resuming from pause. This used by default.IGameConfigData<>-implementing class defines a static property called ConfigNullSentinelKey. This reserves a key for representing null references in serialized data.MetaplayGameCenterPlugin helper for retrieving the Apple GameCenter authentication tokens.PlayerActorBase.OnPlayerIncidentRecorded() for game-specific data gathering of player incidents.MetaplayFeatureEnabledConditionAttribute attributes.sidebarOrder to easily inject new routes into specific positions from integration code.MetaOverviewList component to display overview card data.uiUtils.ts and TypeScript. This fixes unnecessary and noisy HMR warnings when in local development mode.DuplicateInAppPurchaseHistory list instead of the unbounded InAppPurchaseHistory to avoid bloating the PlayerModel in case of repeated purchase restorations.ClientConnection:EnableWireCompression.PlayerModel size limit (until session start fails) has been increased from 1MB to 5MB. The size limit is no longer enforced on the client-side, and can thus now be adjusted with just a server update.StringIds, they're now allowed to contain dots (.) and hyphens (-) after the first character. Previously, only dots were allowed, and only as separators between normal identifiers.Client/Unity/Editor/GoogleApis libraries were upgraded to core apis v1.57.0 and sheets v4.1.57.0 for compatibility with Newtonsoft.Json v13.x.EntityAskError base class used for controlled exceptions from EntityAsk handlers has been renamed to EntityAskRefusal to clearly differentiate it from entity-terminating errors.[MetaSerializable] interface, classes inheriting that base class can now be serialized via the base class as the static type.[MetaSerializable] attribute on multiple interface types in the same inheritance hierarchy, as long as they all specify the same MetaSerializableFlags.