GameSnacks 要求

此文档中使用了以下字词(遵循 RFC 2119 规范):

  • 必须不得 - 表示所有游戏都必须遵循的硬性要求。
  • 应该不应 - 表示推荐满足的要求,虽然不是硬性要求,但在决定如何对向用户显示的游戏进行排序或过滤时可能会参考这类要求。例如,如果用户的屏幕方向是横向的,GameSnacks 可能只会推荐支持此宽高比的游戏。
  • 可以 - 表示建议满足的要求,此类要求不是硬性要求,除非用户明确要求,否则不会参考此类要求过滤游戏。例如,未来的功能有可能允许用户查看支持游戏手柄输入的游戏列表。

以下要求适用于游戏及其资源:

游戏结构

游戏以文件包的形式上传,其中包括游戏本身的代码和运行时资源、用于在 GameSnacks 目录中展示游戏的营销资源,以及一个 game.json 文件(用来存储描述游戏的元数据和枚举文件包中的所有资源)。

game.json

包含游戏元数据的配置文件。

  • 游戏中必须有一个包含所有必需字段的 game.json 文件。
  • 此文件必须位于游戏的根目录下。

HTML 入口点

这是用于加载游戏的 HTML 文档。

  • 入口点必须是一个有效的 HTML 文件。
  • 此文件必须包含最多一个 head 元素和一个 body 元素。

    • 这两个元素(如果存在)都必须有开始标记和结束标记。
    • 这些元素之外的内容及这些元素的属性会被忽略。

      您不直接设置 body 元素的属性,而可以使用:

文件

文件包中的所有文件(包括游戏及其相关营销资源)都必须符合以下要求:

  • 所有文件都必须小于 10 MiB。
  • 必须仅使用相对路径来引用文件。
  • 对于路径,必须只使用 / 作为目录分隔符。
  • 对于文件名称,必须只使用非保留字符 (RFC 3986)
  • 文件名称和所有路径都必须小写。

游戏大小

游戏大小是指下载到用户设备上的所有代码和资源的总大小。

  • 游戏大小不得超过 100 MiB。
    • 此上限涵盖 game.json 中的 files 列出的所有文件,但营销资源包括在内。

技术要求

游戏必须符合以下技术要求。

GameSnacks SDK

  • 游戏必须GameSnacks 开发者 SDK 集成,包括所有必需的接口。
  • 游戏不得直接加载任何广告 API(例如注入 adsbygoogle.js 之类的广告代码)。
    • GameSnacks 会为您加载所有必需的广告服务。
    • 如需详细了解如何在游戏中支持广告,请参阅变现要求

浏览器兼容性

  • 游戏必须使用 Canvas APIWebGL 来呈现。
  • 游戏必须能在以下浏览器的两个最新主要版本上正常运行:
    • Android、iOS、Windows 和 macOS 设备上的 Chrome
    • iOS 和 macOS 设备上的 Safari
    • Android 和 Windows 设备上的 Firefox
    • Windows 设备上的 Edge
  • 游戏必须能在 Android 和 iOS 的两个最新主要版本上的 WebView 中正常运行:
    • Android 设备上的 WebView
    • iOS 设备上的 WKWebView
  • 应该在尽可能广泛的其他独立和嵌入式 Web 渲染器上对游戏进行测试。

最低设备性能

游戏必须能在低端设备上正常运行。以下规格表示运行 GameSnacks 游戏所需的最低设备性能,供您参考。

  • 游戏必须能在任何不低于以下规格的设备上以 30 FPS 或更快的速度运行:

    • CPU:Qualcomm 215、Samsung Exynos 7570、Mediatek MT6737 或类似 CPU
    • RAM:2 GiB
    • GPU:Arm Mali-T720 MP1、Qualcomm Adreno 308 或类似 GPU

    符合此规格的手机包括:JioPhone Next、Nokia 1.4、LG K22、Samsung J2 Core 和 Motorola Moto E4

初始下载大小

初始下载大小是指为启动游戏而需要下载到客户端的数据量。

  • 初始下载大小必须小于 15 MiB。
  • 初始下载大小应该小于 5 MiB。

功能要求

游戏必须符合以下功能要求。

加载时间

加载时间是指初次运行代码和启动游戏所需的时间。

  • 采用速度不低于 10 Mbps 的任何连接时,游戏必须在不到 1 秒钟的时间内显示加载屏幕或进入可互动状态。
  • 采用速度不低于 10 Mbps 的任何连接时,游戏必须在不到 15 秒钟的时间内进入可玩状态。

崩溃

  • 游戏不得造成可持续重现的崩溃。
  • 游戏不得在嵌入该游戏的应用或网站中造成可持续重现的崩溃。

宽高比

GameSnacks 会创建一个框架,供您的游戏在里面呈现。这个框架的大小和宽高比因分发平台、设备以及游戏周围是否存在广告而异。例如,如果用户调整浏览器窗口的大小,这个框架的大小也可能会发生变化。

  • 游戏应该充分利用这个框架内的可用区域来显示可互动的内容,避免添加额外的内边距或补白。
  • 游戏必须支持 9:16 的纵向宽高比。
  • 游戏应该支持 16:9 的横向宽高比。
  • 游戏应该支持 1:1 的方形宽高比。
  • 理想情况下,游戏应该具备自适应能力,并且还应支持各种纵向、横向和方形宽高比。
  • 当这个框架的大小发生变化时,游戏必须立即调整大小,以符合这些要求。
    • 游戏应该能顺畅过渡到新的大小。
  • 游戏不得锁定浏览器的屏幕方向。

游戏互动

  • 游戏必须完全可使用触控输入来玩。
  • 游戏必须完全可使用鼠标输入来玩。
  • 游戏应该完全可使用键盘输入来玩。
  • 游戏可以完全可使用游戏手柄输入来玩。
  • 游戏中的所有界面元素都必须正确实现并发挥作用。
  • 游戏不得包含已停用的控件 - 如果某项功能无法使用,则必须从界面中完全移除。
    • 其中包括奖励提示;只有在调用广告插播时间点的 beforeReward 回调函数后才能呈现奖励提示。
  • 游戏不得显示游戏内分享提示。
  • 游戏不得显示将用户引导至外部游戏、网站或其他内容的界面或游戏内链接。
  • 当用户完成最后一关或结束游戏时,游戏必须明确告知用户这一点。
  • 游戏不得使用“购买”等字词,以免与 GameSnacks 游戏不支持的应用内购功能相混淆。
  • 如果游戏中包含触感反馈功能,用户必须能够将其关闭。

游戏启动

游戏在启动时必须与 GameSnacks 运行时正确进行协调。GameSnacks Game 接口提供了一些函数来指示游戏加载状态,其中包括:当游戏首次准备好绘制到屏幕时需要调用的 firstFrameReady,以及当用户可以开始与游戏互动时需要调用的 ready

  • 当游戏的第一帧准备好呈现时,游戏必须调用 firstFrameReady
  • 当游戏已准备好接受用户互动时,必须调用 ready
  • 当仍有不可互动的元素(例如启动画面或加载屏幕)在显示时,游戏不得调用 ready

静音控件和声音处理

游戏必须遵守 GameSnacks 平台的声音控制。

  • 游戏不应显示整体静音按钮,而应该依靠 GameSnacks 平台静音控件来实现该目标。
  • 游戏必须集成 Audio 接口,并且必须遵守 audio.isEnabled 方法。
  • 游戏中可能会有单独的精细音频控件(例如背景音乐或音效),该控件也必须遵循这些要求。

暂停和恢复

游戏必须支持暂停和恢复。

  • 游戏必须集成 Game 接口onPauseonResume 方法,以便暂停和恢复游戏过程。
  • 游戏不得使用 Web Page Visibility API 或类似 Web API。
  • 如果游戏暂停,必须明确告知用户。
  • 游戏应该在暂停时保存用户进度。

数据处理

使用 GameSnacks Storage API 来处理数据。

  • 游戏必须只使用 Storage 接口来保存游戏数据。
  • 游戏不得使用任何其他存储形式,包括 Cookie、localStoragesessionStorageIndexedDB
  • 游戏不得收集任何用户数据。
  • 游戏不得使用任何协议向任何服务器发出任何外部调用或数据请求,也不得从这类服务器发出调用或数据请求。
  • 游戏不得显示任何附加用户协议、隐私权政策或其他数据收集或监管消息。

保存进度

保存用户的进度,并能在用户回来玩游戏时恢复其进度。

  • 当用户取得实质性进展(例如通过一个关卡)时,游戏必须使用 Storage 接口来保存进度。
  • 已保存的游戏的总大小必须小于 3 MiB,并且应该小于 500 KiB。
  • 游戏启动时,必须恢复已保存的进度。
  • 游戏必须能够从之前版本的游戏中恢复已保存的进度。

最高得分

存储用户的最高得分,或者使用其他指标来跟踪用户进度。

  • 如果游戏具有得分机制,必须使用 Score 接口跟踪得分。
  • 如果游戏没有得分机制,应该跟踪替代的进度指标(例如完成的关卡数)。

游戏内容

以下要求适用于游戏的内容:

游戏界面

  • 游戏必须能在不同分辨率下清晰呈现。例如,界面元素不得模糊不清、像素化或拉伸。
  • 游戏不应使用低分辨率的光栅化资源,这些资源放大到更大的屏幕上时会模糊不清。
  • 游戏不得使用可能会与 GameSnacks 操作栏上的图标相混淆的图标。
  • 游戏不得包含用于在游戏内离开或退出的按钮。此功能将由嵌入您游戏的应用或网站进行处理。

本地化和无障碍功能

  • 游戏必须支持英语。
  • 游戏应该尽全力提供无障碍功能。我们建议游戏尽量达到 Web 内容无障碍指南 (WCAG) 的 AA 级标准。
  • 游戏中的文字必须在各种设备和屏幕尺寸下都清晰易读。请参阅 WCAG 2.2 §1.4.3

面向儿童的内容

权利和许可

  • 游戏必须获得第三方知识产权的全面许可。
  • 游戏不得侵犯任何第三方的商标权或商业外观权。
  • 游戏必须拥有所有必需的音乐版权。
  • 游戏必须拥有所有必需的人格权,包括姓名权和肖像权。

我的游戏会显示在哪里?

我们会通过各种平台发布 GameSnacks 游戏,这既包括 Google 产品也包括 GameSnacks 合作伙伴网站和应用,既包括移动设备也包括桌面设备。我们发布 GameSnacks 游戏的平台包括:Google Play Games 应用、Android 设备和 gamesnacks.com 网站。目前,我们大部分的流量都来自这些地方。然而,我们发布游戏的平台在不断变化,我们一直在想办法扩大 GameSnacks 游戏的受众群体。因此,随着时间的推移,我们可能会增加新的 Google 平台或发布合作伙伴。在与新的发布平台合作时,我们也会不时地进行实验。

变现

GameSnacks 将通过您的游戏变现,并根据 GameSnacks 开发者许可协议为您提供收益分成。

GameSnacks 可以自动在发生自然游戏事件时放置广告,例如预播放事件、下一关事件和关卡结束事件。您还可以使用 GameSnacks 开发者 SDK Ad 接口在游戏中放置其他广告插播时间点(既可以放置插页式广告也可以放置激励广告)。

如果游戏的变现机会太少或变现效果不佳,我们可能会降低其显示频率,或者不会批准发布此类游戏。推荐做法是,确保至少每分钟有一次广告机会。其中既包括您放置的插页式广告和激励广告,也包括 GameSnacks 自动为您设置的广告插播时间点。

不过,这并不意味着我们总是会展示广告。GameSnacks 会用心地平衡广告投放量、互动度和用户体验。因此,您应该可以自由地在游戏中的合适位置创建广告插播时间点(即,不止每分钟一次),然后让 GameSnacks 来调整广告的最终展示率。

变现要求:

  • 游戏应提供持续、不间断的核心游戏体验,并提供足够的机会来展示插页式广告和激励广告;您必须使用 Ad 接口对这些广告进行配置。

  • 不得添加任何其他形式的宣传或变现内容。其中包括:游戏内广告、付款、赞助和产品植入、社交媒体提示以及将用户引导至外部游戏、网站或其他内容的链接。

  • 必须确保游戏提供充分的机会来展示广告,这样您和 GameSnacks 分发合作伙伴都能够持续创造收入。这可以是在发生正常游戏事件(例如下一关)时自然地展示广告,也可以是使用 Ad 接口方法明确设置在游戏过程中其他适当时刻展示广告。

  • 如果您要使用 Ad 接口方法在游戏中放置广告,则必须遵循所有插页式广告和激励广告相关行为合作规范。您也可以参阅此组最佳做法,查看有关配置游戏内广告的更多提示。

  • 如果您要在游戏中放置插页式广告,则必须确保这些广告出现在正常的游戏间隙。广告必须自然融入游戏流程。不得在连续玩游戏的过程中触发插页式广告。

  • 如果您的游戏机制支持激励广告,您就应该放置这类广告。这些奖励机会必须是可选的,您必须对其进行明确说明,并且不得鼓励用户点击广告。如需了解完整的要求,请参阅行为合作规范