踩坑---一个不是坑的难以言喻的坑,有关企业微信在iOS端上传文件的坑

起因

今早一去公司,被组长远程发过来一个Bug,据说是用户反馈的一个iOS的问题,在我们的业务中,有一个有关图片上传的问题。我们的业务代码是在自己的客户端、微信、钉钉、企业微信四个地方跑的同一套代码。

Bug描述

Bug的具体描述是企业微信用户在使用上传图片时,无反应。但是在安卓下运行正常。在其他平台运行正常。
找测试复现该问题时,发现在安卓平台下一切正常,但是在iOS端测试发现,在iOS8上运行正常,在iOS9往上的系统中,会弹出一个报错

a.oldWXObj.invoke not a function

解决过程

  1. 因为是在iOS端有问题,所以我初步怀疑是因为我们自己对企业微信的相关SDK进行二次封装的时候出现了问题,所以我在自己的业务代码中找到了调用wx.chooseImage的地方,然后console出相关的opts参数
wx.chooseImage(opts);//这是我们自己的调用

wx.chooseImage({
    count: 1, // 默认9
    sizeType: ['original', 'compressed'], // 可以指定是原图还是压缩图,默认二者都有
    sourceType: ['album', 'camera'], // 可以指定来源是相册还是相机,默认二者都有
    defaultCameraMode: "batch", //表示进入拍照界面的默认模式,目前有normal与batch两种选择,normal表示普通单拍模式,batch表示连拍模式,不传该参数则为normal模式。(注:用户进入拍照界面仍然可自由切换两种模式)
    success: function (res) {
        var localIds = res.localIds; // 返回选定照片的本地ID列表,
                // andriod中localId可以作为img标签的src属性显示图片;
                // 而在IOS中需通过上面的接口getLocalImgData获取图片base64数据,从而用于img标签的显示
    }
});

发现opts没有问题,然后开始查看企业微信的开发文档,发现了这样一段话

此接口在企业微信2.3及以后版本支持相机连拍(当sourceType是camera时)
参数defaultCameraMode仅在企业微信2.4.20及以后版本支持
从2.4.6版本开始,IOS版企业微信浏览器将升级为WkWebView,因其不支持原有的直接通过localid作为img标签的src属性来显示图片的方式。开发者需要采用通过getLocalImgData来获取localid对应图片的base64数据。

看到了iOS,看到了有关图片上传,便以为是这里的问题,然后便开始对localid进行修改,改着改着发现,不对啊,是调用的时候就报错了,并不是因为在callback里面的问题啊。

  1. 然后把wx.chooseImage进行alert,发现这个函数是存在的,但是发现还是有问题,代码大概是这样的
a.oldWXObj.invoke("chooseImage",params,callback)

然后我一直在想这个a.oldWXObj是什么东东,看源码,并没有找到这个东西,然后查看我们的sdk版本是1.0.0,最新的sdk版本是1.2.0。以为是因为sdk版本的原因,然后把项目中的sdk升级,问题还是存在,看来不是sdk的原因,继续探索。

  1. 后来没有思路,去请教大佬,大佬给了个思路,在企业微信中开启一个别的第三方的业务,看看他们的图片上传是否也存在相同的问题,OK,照着这个思路往下继续。我去,第三方的图片上传是没有问题的,OK,那么肯定是我们自己的业务代码的问题,然后把业务剥离出来,在新建两个文件,一个采用我们自己封装的sdk,一个不用自己封装过后的sdk,直接调用wx的sdk,然后我把相关的wx.config复制 了过去,发现图片上传还是有问题,然后考虑是不是免登没有通过呢? 试着调用其他的方法,发现获取当前位置、扫描二维码、开始录音这三个方法都可以成功调用,确定免登是通过了的,不是免登的问题。

  2. 大佬说换个思路,用Charles开始抓包查看第三方的实现,这一部分才是写这个 踩坑记录的重点 ,主要是看这个调试的过程,最开始用Mac自带的Safari尝试调试,发现企业微信并没有把调试开放出来,只能通过抓包来一点点尝试了,OK,在简书上搜索Charles抓包,按照步骤,发现第三方是https,然后再万能的简书,抓包https,一切完成后。发现第三方也是调用的wx.chooseImage,那么说明我们调用的业务代码没问题啊,然后通过

    1.png
    这种方式,用本地文件代替线上的文件进行调试,把我们的相关业务代码代替第三方的相关代码,发现我们的代码在第三方的应用里面是正常运行的。我去!!!这就奇怪了呀,这时,一天的时间不知不觉都过去了,还没有解决问题,心中真的是,一言难尽!!!

  3. 最后,开始从头梳理代码,从第三方最开始调用企业微信的sdk开始一点点对比,把我们的相关信息跑在第三方平台里,来,把wx.config粘贴过来、贴过来、过来、来......咦,这个config有一点不一样诶!!!

//我们自己的配置
wx.config({
    debug: false, 
    appId: '', // 必填,企业微信的corpID
    timestamp: , // 必填,生成签名的时间戳
    nonceStr: '', // 必填,生成签名的随机串
    signature: '',// 必填,签名,见附录1
    jsApiList: [] // 必填,需要使用的JS接口列表,所有JS接口列表见附录2
});


//文档标准的配置
wx.config({
    beta: true,// 必须这么写,否则wx.invoke调用形式的jsapi会有问题
    debug: true, // 开启调试模式,调用的所有api的返回值会在客户端alert出来,若要查看传入的参数,可以在pc端打开,参数信息会通过log打出,仅在pc端时才会打印。
    appId: '', // 必填,企业微信的corpID
    timestamp: , // 必填,生成签名的时间戳
    nonceStr: '', // 必填,生成签名的随机串
    signature: '',// 必填,签名,见附录1
    jsApiList: [] // 必填,需要使用的JS接口列表,所有JS接口列表见附录2
});

突然发现我们的代码配置里面,没有beta这个配置,加上,试一下,😌😌😌,心情很是复杂,代码这次终于正常调起来了。
OK,到这里,问题解决。

结论

这次不是踩坑的大坑,总结出3点:

  1. 配置一旦配好后,再没动过,所以不会想到是配置的问题,直接就奔着调用的方法去了。下一次,代码还是要记得从头捋!!!
  2. 企业微信对前一版本的相关配置兼容有坑!!!
  3. 学会了用第三方的代码来检测自己的业务代码,用本地代码替换线上代码进行运行调试。
  4. 多学多做多看,大佬就是大佬,争取自己早日成为大佬。😌😌😌
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 212,029评论 6 492
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 90,395评论 3 385
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 157,570评论 0 348
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 56,535评论 1 284
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 65,650评论 6 386
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 49,850评论 1 290
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,006评论 3 408
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 37,747评论 0 268
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,207评论 1 303
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 36,536评论 2 327
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 38,683评论 1 341
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 34,342评论 4 330
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 39,964评论 3 315
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 30,772评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,004评论 1 266
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 46,401评论 2 360
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 43,566评论 2 349

推荐阅读更多精彩内容

  • 又到年终总结时候,回头看看今年也跟过无数作家交流学习过,我是个蛮看重第一感觉的人,第一感觉喜欢了,就会执着地喜欢下...
    旋子eve阅读 146评论 0 1
  • 今年公祭日被一个名字刷了屏,这也是我第一次听到张纯如的名字。说实话,在我看完《张纯如——南京大屠杀》这一纪录片之后...
    巫马十六阅读 2,027评论 9 29
  • 当疲惫了的时候,当不想说话的时候,当沮丧了的时候,当……那就到大自然的怀抱里去吧,她会做你最忠实的伴侣。 临摹于微博作品
    糖妈李皖苏阅读 1,858评论 0 1
  • 在朋友(小溪)的推荐下,下载了简书,今天是第一次打开,趁中午休息时间留下寥寥文字打卡。 昨晚和小溪吃饭聊天,也许太...
    桢简阅读 364评论 0 2