Saltar al contenido
Documentación
En esta página

Perfiles de publicación

Un servicio describe qué niveles acepta con un archivo PublishProfile: licencias, orígenes de los recursos, campos obligatorios, límites de tamaño. Añadir un servicio significa escribir un archivo, no editar el analizador

Un perfil son datos

Un perfil de publicación (PublishProfile) es un modelo que se serializa como cualquier otra raíz, con su propia generación

Un nivel puede ir a Steam Workshop, al servidor oficial, a un servidor de la comunidad o al catálogo de una compilación para tiendas. Cada lugar responde a las mismas preguntas a su manera. Las respuestas cambian con los años, y el código no

Lo que decide un perfil:

CampoSignificado
ProfileKeyqué servicio es, se repite en cada informe
AllowedLicenseslos valores de TypicalLicenseType que acepta el servicio
AllowedUriTypescómo se pueden obtener los recursos. Una lista vacía significa de cualquier forma
AllowUnknownLicense, AllowPermissionInsteadsi basta con una licencia desconocida o con un permiso por escrito
RequireResourceMeta, RequireResourceUrl, RequireAttribution, RequireAgeRating, RequireLevelAuthors, RequireHashesqué hay que rellenar
MaxResourceBytes, MaxDataFileBytes, MaxTotalByteslímites de tamaño, 0 significa sin límite
Sources, UnknownSourceTrustuna lista de sitios y la valoración para un sitio que no está en ella

Qué licencias son aceptables lo decide solo el perfil. Parece una propiedad de la licencia, pero en realidad es una propiedad del servicio que recibe el nivel

Cuatro perfiles integrados

FábricaProfileKeyPara qué
CreateOpen()localun nivel en tu dispositivo. No se exige nada
CreateStandard()standardun servidor público
CreateWorkshop()workshopSteam Workshop. Pasa cualquier variante de CC BY, y la falta de documentos solo genera advertencias
CreateStrict()strictuna compilación para tiendas, más estricta que standard
Quéstandardstrict
licenciasCC0 1.0, CC BY 4.0 y 3.0, CC BY-NC 4.0 y 3.0, SIL OFL 1.1, MIT, Apache 2.0, the Unlicensecomo en standard
de dónde vienen los recursosde la carpeta del nivel, del juego o por enlace directosin enlaces
atribución y hashes-obligatorios
límite por recurso64 MiB32 MiB
límite por archivo de datos32 MiB16 MiB
límite por nivel256 MiB128 MiB
Recomendación

No añadas una fábrica para tu servicio. Toma uno de los cuatro perfiles, cambia los campos que necesites y distribúyelo como archivo JSON

Por qué estas licencias y tamaños

  • las licencias de la familia GPL están excluidas de standard. Una obra GPL distribuida a través de la App Store entra en conflicto con las condiciones de Apple
  • CC BY-SA está excluida: ShareAlike obligaría a cambiar la licencia del propio nivel
  • CC BY-ND está excluida: NoDerivatives prohíbe la edición sobre la que se construye el juego
  • los tamaños estrictos son lo que un teléfono puede descargar por una red móvil

De dónde vino un recurso

El campo de licencia dice lo que afirma el autor. SourceTrust dice cuánto vale esa afirmación según el sitio del que vino el recurso:

ValoraciónResultadoEjemplos
ApprovedpublicarKenney, ccMixter, Incompetech
PartiallyApprovedpublicar, conviene revisar el registroPixabay, SoundImage
RequiresLicenseCheckcontrastar la licencia con la página realOpenGameArt, Free Music Archive, Wikimedia Commons
RequiresResourceCheckidentificar primero la propia obraRawpixel, itch.io
NotAllowedrechazarYouTube, SoundCloud, Spotify
Unknownno hay registro, decide UnknownSourceTrust-

TrustedSourceCatalog.CreateDefault() devuelve 25 sitios. Es una lista de partida. Se espera que cada operador la cambie. Por eso nada puede dar por hecho que un registro esté ahí

Una lista Sources vacía desactiva la valoración de orígenes

Las plataformas de streaming figuran como NotAllowed en lugar de quedar fuera de la lista. Un sitio ausente se valora mediante UnknownSourceTrust, y en standard y strict esa valoración pide una comprobación en lugar de rechazar

El catálogo y Política de licencias de los niveles de usuarios describen lo mismo y se editan juntos

Qué hacer con la respuesta

La llamada es ValidationFacade.ValidateForPublish. Más - Validación

PublishReadinessReport tiene:

  • HasErrors - incidencias del grupo Error
  • NeedsManualReview - incidencias del grupo Warning
  • IsReady

El perfil no decide qué pasa después. El cliente bloquea la subida si hay errores. El servidor pone el nivel en una cola de revisión en lugar de publicarlo

La misma comprobación desde el lado del autor - Preparación para publicar