记录一次Swift中嵌入H5小游戏一次踩坑过程.
2020-09-21 本文已影响0人
不胜
本次项目中需要跟其他项目组交流,将他们编译好的一个H5的小游戏放在客户端本地,记录一下踩坑的过程。
1 加载本地URL带#参数
第一步将H5的文件加入到工程目录中,选择 “Create folder references”
var path = Bundle.main.path(forResource: "football-game/index", ofType: "html") ?? ""
path = path + "?music=true" + "#/footballgame/startgame"
path = "file://" + path
let url = URL(string: path)!
这里有个问题需要记录 没有使用 fileURLWithPath 这个方法去产出URL,是因为他会将 “#”给转码,然后请求的时候 URL就找不到路径了。
2 H5的界面在刘海屏的界面不适配.
这里最后跟H5的同事交流后,在本地添加
web.scrollView.contentInsetAdjustmentBehavior = .never
解决问题
3 H5的小游戏中有多个需要播放的音频,并且需要在音频播放后继续下一个动作的需求.这里H5的同事表示因为浏览器的限制,直接播放的音频需要本地有交互才可以播放,所以我们转变了一下思路,由我们native端提供播放器,他们在需要的时候调用我们的方法
H5这边需要播放多段音频,并且H5这边打包好的文件方法名是混淆过的,所以这里我们客户端需要提供给H5一个音频播放的方法,然后在音频执行结束的时候执行他们对应的方法。
guard let body = message.body as? [String: Any], let src = body["src"] as? String, let callback = body["callback"] as? String else {
return
}
Print("收到: " + src)
Print("收到: " + callback)
var filePath = Bundle.main.path(forResource: "football-game", ofType: "") ?? ""
filePath = filePath + "/" + src
let audioUrl = NSURL(fileURLWithPath: filePath)
BackgroundAudioHelper.shared.playSound(audioUrl: audioUrl, isAlert: false) {
let javaScript = "window[\"\(callback)\"]();"
Print("正在执行方法\(javaScript)")
self.webView.evaluateJavaScript(javaScript) { (message, error) in
if let error = error {
Print(error.localizedDescription)
}
}
}