微信JSSDK chooseImage uploadImage 接口 在IOS与安卓的差异

阿里云国内75折 回扣 微信号:monov8
阿里云国际,腾讯云国际,低至75折。AWS 93折 免费开户实名账号 代冲值 优惠多多 微信号:monov8 飞机:@monov6

首先得说明我用的JSSDK版本是1.1.0的官方文档也是给出1.1.0的例子。

(目前查找了早期的跟新通知已经知道了chooseImage在IOS下预览无效的问题的原因)

//最新版本JSSDK文档
//https://mp.weixin.qq.com/advanced/wiki?t=t=resource/res_main&id=mp1421141115
/* 二页面通过LocalID预览图片 变化1.2.0以下版本的JSSDK不再支持通过使用chooseImage api返回的localld以如”img src=wxLocalResource://50114659201332”的方式预览图片。 适配建议直接将JSSDK升级为1.2.0最新版本即可帮助页面自动适配但在部分场景下可能无效此时可以使用 getLocalImgData 接口来直接获取数据。 。目前JSSDk线上版本是 1.0.0 和 1.1.0更新版本为1.2.0 https://res.wx.qq.com/open/js/jweixin-1.2.0.js  */



获取本地图片接口
wx.getLocalImgData({
    localId: '', // 图片的localID
    success: function (res) {
        var localData = res.localData; // localData是图片的base64数据可以用img标签显示
    }
});
备注此接口仅在 iOS WKWebview 下提供用于兼容 iOS WKWebview 不支持 localId 直接显示图片的问题。具体可参考《iOS网页开发适配指南》

这意味着只有IOS8以上的手机才能用这个本地图片接口而以下的版本如果使用JSSDK1.2.0版本会导致无法获取图片数据或者使用1.1.0又无法预览图片的尴尬场面,另外用了1.2.0版本后uploadImage会出现file not exists的错误

那么讲讲那些坑吧。

继上次苹果机 对JSON字符串解析问题之后目前又多了一个坑。

那就是在安卓上表现正常的两个接口选择照片上传照片在苹果却不行了。

相信大多数人在网上也找了很多资料知道微信只允许一张一张的上传和下载图片所以我们需要串行上传

然而我在uploadImage的时候是这样写的

伪代码项目不在手上

function upload(localIDS)//参数是选择照片获取的本地ID {
cur=localIDS.pop();
wx.uploadImage({
    localId: cur, // 需要上传的图片的本地ID由chooseImage接口获得
    isShowProgressTips: 1, // 默认为1显示进度提示
    success: function (res) {
        var serverId = res.serverId; // 返回图片的服务器端ID
    }

});
//我在uploadImage接口结束后判断localIDS这个数组是否还存在值
//如果还有则继续调用
if(localIDS数组还有值)
{
upload(localIDS);//原本这个应该是没错的即使异步上传了我只是通过判断在上传图片之前就已经改变的数组是没事的所以安卓中的表
//现是正常的然而在苹果中,却始终只上传了最后一张照片不管你是通过pop()还是shift()删除数组元素反正就是最后一个数组元素。
//原因是 在IOS中只有当你完全上传完一张照片才能上传第二张所以得把这里的判断语句放进回调函数success中则安卓IOS正常
}

}

第二个问题上传的事情解决了以后我发现chooseImage出现了问题IOS中选择照片后没办法预览在网上找到了一些解决方式诸如导入新版本的JSSDK1.2.0只要把原来的src 中1.1.0改成1.2.0就行话说我很好奇他们是哪里看来的居然有这些版本我表示压根没在开发文档有介绍。。。

方法主要有三个

第一个方法无效

通过判断localids的内容把 wxlocalresource 替换为 wxLocalResource

结果我一看IOS中的返回的localid的内容根本就不是wxlocalresource 而是weixin://654678742这样的字符串安卓的才是wxlocalresource ,所以排除掉这个答案

第二个方法无效

通过一个叫getlocalimgdata 接口来预览图片其用法与chooseImage一致一般放在chooseImage的success回调函数里面这里需要做一些判断如果是苹果手机则用getLocalimgdata返回的localdata显示照片如果是安卓则用原来chooseImage返回的本地照片数组显示照片但很遗憾我发现即使兼容了IOS和安卓的预览图片问题实际上把JSSDK改成最新版本1.2.0即使不用getlocalimgdata也已经可以预览图片了问题是使用1.2.0后uploadimage提示文件不存在 file not exists 那么问题在于1.2.0之后uploadimage需要的localid到底是什么是原本的 wxLocalResource://xxxxx还是通过 getlocalimgdata返回的 包含 jpg和base64等开头的数据还是IOS原本的 weixin://xxxx呢我测试过好像都不行在IOS都提示文件不存在

第三个方法有效但是引起新的问题

也就是我一开头说的JSSDK得1.2.0版本该版本已经修复了这个问题所以只要把文件修改为1.2.0版本在IOS就能正常预览但是其引发了新的问题原本上传文件功能正常的却无法上传了提示 file not exist文件不存在我能怎么办我也很绝望啊原封不动的代码就是改成了1.2.0版本的JSSDK文件所以我宁愿无法预览照片也一定要上传照片。 安卓功能一切正常苹果真的该淘汰了。又不好用还各种版权安全性总体上也不如安卓也许有些人会说比安卓好一百倍一千倍但那只是表象曾经看过一篇文章统计了很多数据分析有兴趣可以去找一下相关的资料个人意见。

阿里云国内75折 回扣 微信号:monov8
阿里云国际,腾讯云国际,低至75折。AWS 93折 免费开户实名账号 代冲值 优惠多多 微信号:monov8 飞机:@monov6
标签: android