美文网首页
记录一次Swift中嵌入H5小游戏一次踩坑过程.

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

作者: 不胜 | 来源:发表于2020-09-21 20:38 被阅读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)
                        }
                    }
                }
    

    相关文章

      网友评论

          本文标题:记录一次Swift中嵌入H5小游戏一次踩坑过程.

          本文链接:https://www.haomeiwen.com/subject/jasbyktx.html