您的位置:首页 > 移动开发 > 微信开发

[置顶] 微信JSSDK chooseImage uploadImage 接口 在IOS与安卓的差异

2017-05-08 23:08 309 查看
首先得说明我用的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中选择照片后没办法预览,在网上找到了一些解决方式,诸如导入新版本的JSSDK(1.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文件,所以我宁愿无法预览照片,也一定要上传照片。 安卓功能一切正常,苹果真的该淘汰了。又不好用,还各种版权,安全性总体上也不如安卓,也许有些人会说比安卓好一百倍一千倍,但那只是表象,曾经看过一篇文章,统计了很多数据分析,有兴趣可以去找一下相关的资料,个人意见。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐