记录一次Swift中嵌入H5小游戏一次踩坑过程.

本次项目中需要跟其他项目组交流,将他们编译好的一个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)
                    }
                }
            }

你可能感兴趣的:(记录一次Swift中嵌入H5小游戏一次踩坑过程.)