Skip to content

startGameByUrl

启动游戏(通过游戏包 URL)

startGameByUrl 是一个“一站式”启动接口。它允许开发者直接传入一个远程 URL 地址,由 SDK 自动完成从下载、校验、解压到最终初始化并显示游戏画面的全过程。

该接口常用于测试包分发、跳过服务端版本管理的自定义 CDN 场景,或是需要动态加载非商店配置内游戏的特殊业务逻辑。


方法声明

java
/**
 * 启动游戏,根据游戏包 URL
 *
 * @param url               游戏包 URL 
 * @param params            参数对象
 * @param listener          启动过程监听器
 * @return SUDOPGameTask    任务句柄
 */
public static SUDOPGameTask startGameByUrl(String url, SUDOPGamePackageParams params, SUDOPStartGameListener listener);

参数说明

属性类型描述
gamePkgUrlString必填。游戏资源压缩包(.zip)的完整远程下载地址。

1. SUDOPStartGameListener

  • void onGamePkgDecrypt(GamePkgDecryptHandle handle, String filePath):游戏包解密回调。
  • void onCreated(SUDRTGameHandle gameHandle):游戏实例创建完成。gameHandle为游戏实例句柄,可用于后续控制游戏生命周期或交互。
  • void onSuccess(String gameId, SUDRTGameHandle gameHandle):游戏启动成功。
  • void onFailure(int retCode, String retMsg):游戏启动失败。

2. GamePkgDecryptHandle

  • void success(String decryptedFilePath, boolean isDeleteFile):解密成功。decryptedFilePath:解密后的文件路径。isDeleteFile:游戏加载完成后是否删除该文件。

  • void fail(int retCode, String retMsg):解密失败。retCode:错误码。retMsg:错误信息描述。


运行行为

  1. 缓存检测:SDK 会比对该 URL 对应的本地缓存。如果文件已存在且完整,则直接跳过下载。
  2. 多线程下载:若无缓存,SDK 启动后台下载任务,并持续触发 onProgress
  3. 静默初始化:下载完成后,在后台执行解压与脚本环境加载。
  4. UI 挂载:一切就绪后,在主线程返回 gameView,开发者将其 addView 到容器中即可呈现画面。

代码示例

java
// 1. 设置下载启动参数
String url = "https://cdn.example.com/games/v2/test_game.zip";

// 2. 发起启动
SUDOPGamePackageParams params = new SUDOPGamePackageParams();
params.version = "gamePkgVersion";
params.fid = "2e7ca170f33629c7baf4dc430c541c43";
params.fidType = FIDType.MD5;
params.appGameID = "appGameID";
params.appCPID = "Game Developer id";
params.appGroupID = "Game developer group id";

SUDOPGameTask gameTask = SUDOP.startGameByUrl(url, params, new SUDOPStartGameListener() {
    @Override
    public void onGamePkgDecrypt(GamePkgDecryptHandle handle, String filePath) {
    }
    @Override
    public void onCreated(SUDRTGameHandle gameHandle) {
    }
    @Override
    public void onSuccess(String gameId, SUDRTGameHandle gameHandle) {
        // 将这个View贴到app自身的页面上即可
        View gameView = gameHandle.getGameView();
    }
    @Override
    public void onFailure(int retCode, String retMsg) {
    }
});

注意事项

  • 流量提醒:由于此接口会触发大文件下载,在移动网络下建议提示用户。
  • URL 时效性:若 CDN 链接带有鉴权参数(如 Token),请确保在调用时链接尚未过期。
  • 任务生命周期:与 ID 启动一致,必须在 Activity 销毁时调用 task.destroy(),以中止下载或销毁游戏实例。