草庐IT

6月复盘篇:iOS问题解决经验总结复盘

flowerflower 2023-03-28 原文

目录
一、webView 跳转h5, css 、js如何注入cookie
1.1 第三方注入
1.2 原生通过js注入
二、打包上传报错"could not download"

一、webView 跳转h5, css 、js如何注入cookie

问题纪要
由于公司的有些业务是跳转到h5, 目前市面上大部分与h5的交互几乎都是通过以添加个请求头,记录登录态。由于该公司环境较多要想达到灰度,我们需要多拼接一个app_id.....

问题解决方式记录:
首先第一波必然先排查,排查发现css、js的一些相关资源丢失Cookie


image.png

开始拉扯进行一系列推锅表演...


image.png
image.png

经历辛苦的口舌大战。。。开始各自找各自的原因。各种方式尝试后,比如h5那边给强制更新,我们app这边给webView清缓存等等各种一系统操作,在url后面给他们token、app_id呀,让h5那边从url后面拿。最终还是死活无法将Cookie种入到css、js中。

我们小组的ios资深技术大咖通过抓包很有自信的讲出自己的见得如上。最终提测后我通过实际证明,上面回复话术有误,并非如此,着实有点打脸。具体详见下文。

1.1 第三方注入

由于提测时间紧迫,最后在github里面找了一个第三方GGWKCookie进行尝试。

image.png
image.png
1.2 原生通过js注入

js注入

 func setupSubViews(){        
        let configuration =  WKWebViewConfiguration()
        let contentController =  WKUserContentController()
        if #available(iOS 10.0, *){
//            configuration.mediaTypesRequiringUserActionForPlayback  = .none
        } else {
            // Fallback on earlier versions
            configuration.mediaPlaybackRequiresUserAction = false
        }
        var cookie = ""
        for cookieModel in cookieArr() {
            cookie = cookie.appendingFormat("document.cookie = '\(cookieModel.key)=\(cookieModel.value); path=/; domain=.xiaoeknow.com';")
        }
        let cookieScript = WKUserScript.init(source: cookie, injectionTime: .atDocumentStart, forMainFrameOnly: false)
        contentController.addUserScript(cookieScript)
        configuration.userContentController = contentController
        
        webView = WKWebView(frame: CGRect(x: 0, y: kNavBarHeight, width: kScreenWidth, height: kScreenHeight),configuration: configuration)
        webView.scrollView.bounces = false
        webView.backgroundColor = UIColor.white
//        webView.scrollView.delegate = self
        webView.clipsToBounds = false
        view.addSubview(webView)    
        loadWebViewUrl()
    }
    func loadWebViewUrl(){
   
        if params.requestUrl.count > 0 {
            let request = NSMutableURLRequest(url: URL(string: params.requestUrl)!)
            var cookie = ""
            for cookieModel in cookieArr() {
                cookie = cookie.appendingFormat("\(cookieModel.key)=\(cookieModel.value),")
            }
            request.setValue(cookie, forHTTPHeaderField: "Cookie")
            self.webView?.load(request as URLRequest)
        }
    }


 // 设置cookie
    func cookieArr() -> [CookieModel]{
        var cookies = [CookieModel]()
        
        let app_token =  CookieModel()
        app_token.key = "app_token"
        app_token.value = "token_62a99c028136e3VXn5oPa5wWoFfixVLRx"
        
        let with_app_id =  CookieModel()
        with_app_id.key = "with_app_id"
        with_app_id.value = "appptaa4nql6484"
        
        let app_type = CookieModel()
        app_type.key = " app-type"
        app_type.value = "merchant_assistant_app"
        
        cookies.append(app_token)
        cookies.append(with_app_id)
        cookies.append(app_type)
        return cookies
    }

总结:
导致这个问题的罪魁祸首在这里

image.png

注入cookie的这里写的有问题,但是由于此项目已经好几年了,刚开始我并没有怀疑是这里出了问题。后面由于提测后,有空闲时间了,自己写了个示例demo,只要注入cookie的方式正确也能正常跳转。


二、打包上传报错"could not download"

打开活动监视器,找到为java进程。强制退出该进程后,重新打开Transporter上传即可。


image.png

有关6月复盘篇:iOS问题解决经验总结复盘的更多相关文章

  1. ruby - 在 64 位 Snow Leopard 上使用 rvm、postgres 9.0、ruby 1.9.2-p136 安装 pg gem 时出现问题 - 2

    我想为Heroku构建一个Rails3应用程序。他们使用Postgres作为他们的数据库,所以我通过MacPorts安装了postgres9.0。现在我需要一个postgresgem并且共识是出于性能原因你想要pggem。但是我对我得到的错误感到非常困惑当我尝试在rvm下通过geminstall安装pg时。我已经非常明确地指定了所有postgres目录的位置可以找到但仍然无法完成安装:$envARCHFLAGS='-archx86_64'geminstallpg--\--with-pg-config=/opt/local/var/db/postgresql90/defaultdb/po

  2. ruby - 通过 rvm 升级 ruby​​gems 的问题 - 2

    尝试通过RVM将RubyGems升级到版本1.8.10并出现此错误:$rvmrubygemslatestRemovingoldRubygemsfiles...Installingrubygems-1.8.10forruby-1.9.2-p180...ERROR:Errorrunning'GEM_PATH="/Users/foo/.rvm/gems/ruby-1.9.2-p180:/Users/foo/.rvm/gems/ruby-1.9.2-p180@global:/Users/foo/.rvm/gems/ruby-1.9.2-p180:/Users/foo/.rvm/gems/rub

  3. ruby - 通过 RVM (OSX Mountain Lion) 安装 Ruby 2.0.0-p247 时遇到问题 - 2

    我的最终目标是安装当前版本的RubyonRails。我在OSXMountainLion上运行。到目前为止,这是我的过程:已安装的RVM$\curl-Lhttps://get.rvm.io|bash-sstable检查已知(我假设已批准)安装$rvmlistknown我看到当前的稳定版本可用[ruby-]2.0.0[-p247]输入命令安装$rvminstall2.0.0-p247注意:我也试过这些安装命令$rvminstallruby-2.0.0-p247$rvminstallruby=2.0.0-p247我很快就无处可去了。结果:$rvminstall2.0.0-p247Search

  4. ruby - Fast-stemmer 安装问题 - 2

    由于fast-stemmer的问题,我很难安装我想要的任何ruby​​gem。我把我得到的错误放在下面。Buildingnativeextensions.Thiscouldtakeawhile...ERROR:Errorinstallingfast-stemmer:ERROR:Failedtobuildgemnativeextension./System/Library/Frameworks/Ruby.framework/Versions/2.0/usr/bin/rubyextconf.rbcreatingMakefilemake"DESTDIR="cleanmake"DESTDIR=

  5. ruby - 如何验证 IO.copy_stream 是否成功 - 2

    这里有一个很好的答案解释了如何在Ruby中下载文件而不将其加载到内存中:https://stackoverflow.com/a/29743394/4852737require'open-uri'download=open('http://example.com/image.png')IO.copy_stream(download,'~/image.png')我如何验证下载文件的IO.copy_stream调用是否真的成功——这意味着下载的文件与我打算下载的文件完全相同,而不是下载一半的损坏文件?documentation说IO.copy_stream返回它复制的字节数,但是当我还没有下

  6. ruby - 安装 Ruby 时遇到问题(无法下载资源 "readline--patch") - 2

    当我尝试安装Ruby时遇到此错误。我试过查看this和this但无济于事➜~brewinstallrubyWarning:YouareusingOSX10.12.Wedonotprovidesupportforthispre-releaseversion.Youmayencounterbuildfailuresorotherbreakages.Pleasecreatepull-requestsinsteadoffilingissues.==>Installingdependenciesforruby:readline,libyaml,makedepend==>Installingrub

  7. Ruby 文件 IO 定界符? - 2

    我正在尝试解析一个文本文件,该文件每行包含可变数量的单词和数字,如下所示:foo4.500bar3.001.33foobar如何读取由空格而不是换行符分隔的文件?有什么方法可以设置File("file.txt").foreach方法以使用空格而不是换行符作为分隔符? 最佳答案 接受的答案将slurp文件,这可能是大文本文件的问题。更好的解决方案是IO.foreach.它是惯用的,将按字符流式传输文件:File.foreach(filename,""){|string|putsstring}包含“thisisanexample”结果的

  8. java - 从 JRuby 调用 Java 类的问题 - 2

    我正在尝试使用boilerpipe来自JRuby。我看过guide从JRuby调用Java,并成功地将它与另一个Java包一起使用,但无法弄清楚为什么同样的东西不能用于boilerpipe。我正在尝试基本上从JRuby中执行与此Java等效的操作:URLurl=newURL("http://www.example.com/some-location/index.html");Stringtext=ArticleExtractor.INSTANCE.getText(url);在JRuby中试过这个:require'java'url=java.net.URL.new("http://www

  9. ruby-on-rails - 简单的 Ruby on Rails 问题——如何将评论附加到用户和文章? - 2

    我意识到这可能是一个非常基本的问题,但我现在已经花了几天时间回过头来解决这个问题,但出于某种原因,Google就是没有帮助我。(我认为部分问题在于我是一个初学者,我不知道该问什么......)我也看过O'Reilly的RubyCookbook和RailsAPI,但我仍然停留在这个问题上.我找到了一些关于多态关系的信息,但它似乎不是我需要的(尽管如果我错了请告诉我)。我正在尝试调整MichaelHartl'stutorial创建一个包含用户、文章和评论的博客应用程序(不使用脚手架)。我希望评论既属于用户又属于文章。我的主要问题是:我不知道如何将当前文章的ID放入评论Controller。

  10. 屏幕录制为什么没声音?检查这2项,轻松解决 - 2

    相信很多人在录制视频的时候都会遇到各种各样的问题,比如录制的视频没有声音。屏幕录制为什么没声音?今天小编就和大家分享一下如何录制音画同步视频的具体操作方法。如果你有录制的视频没有声音,你可以试试这个方法。 一、检查是否打开电脑系统声音相信很多小伙伴在录制视频后会发现录制的视频没有声音,屏幕录制为什么没声音?如果当时没有打开音频录制,则录制好的视频是没有声音的。因此,建议在录制前进行检查。屏幕上没有声音,很可能是因为你的电脑系统的声音被禁止了。您只需打开电脑系统的声音,即可录制音频和图画同步视频。操作方法:步骤1:点击电脑屏幕右下侧的“小喇叭”图案,在上方的选项中,选择“声音”。 步骤2:在“声

随机推荐