Appearance
Appearance
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.MetaButton
component 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.MetaMessage
s, 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.StringId
s containing dots or hyphens, the parsing stops at whitespace instead of ignoring whitespaces. In the unlikely case a project has whitespace in StringId
s 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.StringId
s, 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
.