跳到主要内容

iOS SDK 高级使用场景

1. 自定义游戏区域​

创建宿主 createGameHandle 时需要传入 UIViewController 作为游戏 View 的容器。可以通过限制游戏 View 外部容器大小的方式,改变游戏区域大小与位置。

// 初始化页面内容
func initHostView() {
let demoView = UIViewController()
let gameView = UIViewController()

// 添加两个区域
self.view.addSubview(demoView.view)
self.view.addSubview(gameView.view)

// 设置两个显示区域大小
demoView.view.snp.makeConstraints { make in
make.height.equalToSuperview().multipliedBy(0.3)
make.width.equalToSuperview()
make.top.equalToSuperview()
}

gameView.view.snp.makeConstraints { make in
make.height.equalToSuperview().multipliedBy(0.7)
make.width.equalToSuperview()
make.top.equalTo(demoView.view.snp.bottom)
}

self.gameView = gameView
self.demoView = demoView
}

// 初始化宿主时传入作为容器的区域
MultiGameLauncher.createGameHandle(hostHandle, gameId, gameView) { gameHandle, err in
guard let gameHandle else {
return
}

self.gameHandle = gameHandle
self.setGameStartOptions()
}

效果示意图如下:

半屏加载页

2. 支持透明游戏背景​

可在 setGameStartOption() 时设置参数 ENABLE_TRANSPARENT_MODE 为 true,可使得 GameView 背景支持透明:

options[TJConstants.ENABLE_TRANSPARENT_MODE] = true // 高性能+ 暂不支持透明背景模式

gameHandle.setGameStartOptions(options: options) { error in
guard error == nil else {
return
}

self.startGame()
}

效果示意图如下:

透明背景测试游戏

3. 自定义胶囊按钮​

自定义胶囊按钮可通过不显示默认胶囊按钮并实现一个自定义的按钮实现。

在 setGameStartOption() 时设置参数 SHOW_MENU_LAYOUT 为 false,可隐藏默认胶囊按钮。初始化宿主后即可在页面上添加自定义按钮。

MultiGameLauncher.createGameHandle(hostHandle, gameId, self) { gameHandle, err in
guard let gameHandle else {
return
}

// 自定义胶囊按钮区域
let layout = UIView()

// 将自定义区域添加到页面上
self.view.addSubview(layout)

self.gameHandle = gameHandle
self.setGameStartOptions()
}

效果示意图如下:

自定义胶囊按钮

上述方式适用于添加任何自定义 View,如果仅想在游戏界面内添加一个自定义 View 浮在游戏上方,可参考添加平台 UI 层子视图

4. 原生代码与 JS 相互调用​

可参考 CustomCommand API 说明

5 最近游玩列表​

Host SDK 提供了最近游玩相关的接口,用于监听游戏启动以及查询当前用户的游玩列表。

public protocol RecentlyGameDelegate
{
func updateGame(game: PlayedGameModel)
}

/// 获取最近游戏列表
public func getAllRecentlyPlayedGames(userId: String) -> [PlayedGameModel]

/// 设置游戏列表更新监听
public func setRecentlyPlayedGameDelegate(delegate: RecentlyGameDelegate)

在初始化宿主时设置监听实现,触发监听时会返回当前进行中的游戏。

class RecentlyGameListener: RecentlyGameDelegate {
func updateGame(game: PlayedGameModel) {
// 触发更新时会返回最新游玩的游戏
}
}

TJHostHandle.initialize(sdkKey: SDK_KEY, sdkSecret: SDK_SECRET) { hostHandle, _ in
guard let hostHandle else {
return
}

hostHandle.initLog(.debug, self)

// 设置最近游玩更新监听
hostHandle.setRecentlyPlayedGameDelegate(delegate: recentlyGameDelegate)

self.hostHandle = hostHandle
}

获取用户游玩过的所有游戏列表。可以用于展示用户最近的游玩记录。

let playedGames = hostHandle.getAllRecentlyPlayedGames(userId: UserId)

PlayedGameModel​

字段数据类型说明
idString游戏Id
userIdString用户Id
bundleIdString游戏包Id
versionIdString游戏版本Id
nameString游戏名称
gameTypeString游戏类型
iconUrlString游戏图标地址
tags[String]游戏标签
briefIntroString游戏简介
launchKeyString游戏启动参数
devBool游戏开发包
lastLaunchTimeInt64游戏最后启动时间

游戏开发包 dev 字段说明​

MiniHost 控制台在游戏包管理中提供了扫码体验的功能。扫码体验的游戏作为开发版临时体验游玩,因此游戏包的下载地址是一个临时地址。

因为游戏启动后会被记录进最近游玩列表,而开发包的下载地址是临时的,所以当从最近游玩中启动扫码体验的开发包时,游戏只会启动本地缓存的游戏包,并不会重新下载。

当游戏版本更新时,需扫描新的二维码下载游戏包,此时游戏列表会更新 launchKey 替换原有的版本作为下次启动参数。