使用uni.share在IOS上分享不显示图片的问题

问题背景

   使用uni app跨平台,编译运行到ios上,发现分享图文的时候,图片无法显示,在安卓上分享正常。

uni分享朋友圈api地址

uni.share({
    provider: "weixin",
    scene: "WXSenceTimeline",
    type: 2,
    imageUrl: "https://bjetxgzv.cdn.bspapp.com/VKCEYUGU-uni-app-doc/d8590190-4f28-11eb-b680-7980c8a877b8.png",
    success: function (res) {
        console.log("success:" + JSON.stringify(res));
    },
    fail: function (err) {
        console.log("fail:" + JSON.stringify(err));
    }
});

问题分析

      从log查看,没有图片的原因是因为,IOS端分享朋友圈规定图片不能大于20kb,因此项目代码中做了压缩,在压缩之前通过5+app里面的plus.io.resolveLocalFileSystemURL方法选取的图片获取图片地址(这个方法其实有些多此一举,当然之前项目别人这样写的,只能按照这样去踩坑了),然后进行压缩,

调试过程中log打印错误提示有三种:

(1)编码格式不正确  ---》本地文件要添加“file://”

(2)文件没有发现 ---》文件不存在,地址或文件名不正确

(3)不允许读 --》地址不正确

    plus.io.resolveLocalFileSystemURL方法是通过url参数获取文件对象

官方api 

void plus.io.resolveLocalFileSystemURL( url, succesCB, errorCB );

说明:

    快速获取指定的目录或文件操作对象,如通过URL值“_www/test.html”可直接获取文件操作对象。

     url值可支持相对路径URL、本地路径URL、网络路径URL(http://localhost:13131/开头)。  //在IOS上不支持网络路径

    获取指定的文件或目录操作对象成功通过succesCB回调返回,如果指定URL路径或文件不存在则失败通过errorCB回调返回

  • url : ( DOMString ) 必选 要操作文件或目录的URL地址
  • succesCB: FileResolveSuccessCallback ) 必选 获取操作文件或目录对象成功的回调函数
  • errorCB: FileErrorCallback ) 可选 获取操作文件或目录对象失败的回调函数
<!DOCTYPE html>
<html>
	<head>
	<meta charset="utf-8">
	<title>File Example</title>
	<script type="text/javascript">
// 扩展API加载完毕后调用onPlusReady回调函数 
document.addEventListener( "plusready", onPlusReady, false );
// 扩展API加载完毕,现在可以正常调用扩展API
function onPlusReady() {
	plus.io.resolveLocalFileSystemURL( "_www/test.html", function( entry ) {
		// 可通过entry对象操作test.html文件 
		entry.file( function(file){
			var fileReader = new plus.io.FileReader();
			alert("getFile:" + JSON.stringify(file));
			fileReader.readAsText(file, 'utf-8');
			fileReader.onloadend = function(evt) {
				alert("11" + evt);
				alert("evt.target" + evt.target);
				alert(evt.target.result);
			}
			alert(file.size + '--' + file.name);
		} );
	}, function ( e ) {
		alert( "Resolve file URL failed: " + e.message );
	} );
}
	</script>
	</head>
	<body>
		Request file system
	</body>
</html>

解决方案:

1.路径问题解决:

(1)ios中只允许访问_www、_doc、_documents、_downloads四个目录的文件,保证本地文件是否在这4个目录之一

IOS中允许访问本地图片的目录

  如: let imgPath = '_www/static/imgs/logo.png'  //本地路径(static同项目的static资源目录)

  let tempPath = 'file://' + plus.io.convertLocalFileSystemURL(imgPath)   //前面必须加file://

 plus.io.resolveLocalFileSystemURL(tempPath, file)

 

(2)在真机中确认文件是否存在

       IOS不同安卓,没法直接用adb指令或通过文件管理查看内部文件,在windows上需要借助第三方工具(mac系统上有其它工具)

这里可以使用Itools工具: Itools官网

下载之后,连接手机:

 应用 --》 我的应用 --》找到需要查看的应用,选择文件共享

 

路径:apps后面一串数字,每次安装应用都不同,随机生成的,在这可以看到www, doc

/Documents/Pandora/apps/D17DABE4B3040329D8515E93A8D97974/www/static/imgs

 

同时在ios上还发现,分享的图文的时候,如果图片使用的是网络地址,则图片获取不到,此时需要将图片先下载到本地,然后再分享

下载网络图片的方法:uni.getImageInfo

 

 

 

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值