uni-app uni.share分享长图安卓失败,ios成功

uni-app uni.share分享长图安卓失败,ios成功

示例代码:

uni.share({
provider: "weixin",
scene: "WXSceneSession",
type: 2,
imageUrl:"https://img.centralbanknews.cn/file:///storage/emulated/0/Android/data/com.kandong/apps/UNIC426FD5/doc/uniapp_temp/compressed/1708479672040_mmexport1705387702829.jpg" ,
success: function (res) {
console.log("success:" + JSON.stringify(res));
},
fail: function (err) {
console.log("fail:" + JSON.stringify(err));
}
});

操作步骤:

  • 正常操作

预期结果:

  • 跟ios一样正常分享

实际结果:

  • 不能正常分享

bug描述:

uni.share分享长图安卓手机试了好几个都失败,ios没事,这是为什么?bug?分享出去就报错,具体错误是{“errMsg”:“share:fail [Share微信分享:-3]Unable to send, https://ask.dcloud.net.cn/article/287",“errCode”:-100,"code”:-100}

开发环境 版本号 项目创建方式
Windows 11 HBuilderX
Android 11
华为
全部安卓机型

更多关于uni-app uni.share分享长图安卓失败,ios成功的实战教程也可以访问 https://www.itying.com/category-93-b0.html

15 回复

官方这是怎么回事???

更多关于uni-app uni.share分享长图安卓失败,ios成功的实战教程也可以访问 https://www.itying.com/category-93-b0.html


官方这是怎么回事???

不知道为啥把我提交的连接地址改了,我把图片上传附件

回复 传播星球: 下载到本地用 uni.shareWithSystem 分享

目前Android对图片有大小限制,上传图片过大时,推荐先对图片进行压缩后小于20Kb再上传

上传的时候已经压缩过了还是不行

回复 传播星球: 压缩过后的图片太大也是不行的,安卓是有限制的

回复 HRK_01: 把长图压缩到20kb以下不会变模糊嘛?

回复 传播星球: 图片太大确实会模糊,可以尝试改用图片链接进行分享?

回复 HRK_01: 先用uni.downloadFile把图片转为本地得到临时路径,得到临时路径在用uni.share分享出去,这种方式可行吗

回复 传播星球: 可以的,这种方式分享的图片不会被压缩,比较清晰

回复 传播星球: 这种方式调用的是系统的组件来进行分享,会有一些限制,详细请参考 https://uniapp.dcloud.net.cn/api/plugins/share.html#sharewithsystem

回复 HRK_01: 好的 谢谢

uni-app 中使用 uni.share 进行长图分享时,出现安卓失败而 iOS 成功的情况,可能涉及以下几个方面的问题。以下是一些可能的原因和解决方案:


1. 图片大小限制

  • 原因:安卓系统可能对分享的图片大小有限制,如果图片过大,可能导致分享失败。

  • 解决方案

    • 压缩图片大小,确保图片在安卓可接受的范围内。
    • 使用 uni.compressImage 对图片进行压缩。
    uni.compressImage({
      src: '图片路径',
      quality: 80, // 压缩质量
      success: (res) => {
        uni.share({
          type: 'image',
          imageUrl: res.tempFilePath,
          success: () => {
            console.log('分享成功');
          },
          fail: (err) => {
            console.log('分享失败', err);
          }
        });
      },
      fail: (err) => {
        console.log('图片压缩失败', err);
      }
    });
    

2. 图片路径问题

  • 原因:安卓和 iOS 对文件路径的处理方式不同,可能导致安卓无法正确识别图片路径。

  • 解决方案

    • 确保图片路径是绝对路径,并且是本地临时文件路径。
    • 如果图片来自网络,先使用 uni.downloadFile 下载到本地。
    uni.downloadFile({
      url: '网络图片地址',
      success: (res) => {
        if (res.statusCode === 200) {
          uni.share({
            type: 'image',
            imageUrl: res.tempFilePath,
            success: () => {
              console.log('分享成功');
            },
            fail: (err) => {
              console.log('分享失败', err);
            }
          });
        }
      },
      fail: (err) => {
        console.log('图片下载失败', err);
      }
    });
    

3. 安卓权限问题

  • 原因:安卓系统可能需要特定的权限才能分享图片。
  • 解决方案
    • 检查并确保应用已获取存储权限。

    • manifest.json 中配置权限:

      {
        "permission": {
          "android": {
            "WRITE_EXTERNAL_STORAGE": "允许写入外部存储",
            "READ_EXTERNAL_STORAGE": "允许读取外部存储"
          }
        }
      }
      
    • 在代码中动态申请权限:

      uni.authorize({
        scope: 'scope.writePhotosAlbum',
        success: () => {
          console.log('权限已授权');
        },
        fail: (err) => {
          console.log('权限未授权', err);
        }
      });
      

4. 分享平台兼容性

  • 原因:某些安卓设备或分享平台(如微信、QQ)可能对图片格式或大小有特殊要求。
  • 解决方案
    • 尝试将图片保存到相册,再通过相册分享。

    • 使用 uni.saveImageToPhotosAlbum 将图片保存到相册:

      uni.saveImageToPhotosAlbum({
        filePath: '图片路径',
        success: () => {
          console.log('图片保存成功');
        },
        fail: (err) => {
          console.log('图片保存失败', err);
        }
      });
      

5. 调试与日志

  • 原因:具体错误信息可能被忽略,导致无法定位问题。

  • 解决方案

    • uni.sharefail 回调中打印详细错误信息。
    • 使用安卓真机调试工具(如 Chrome DevTools)查看日志。
    uni.share({
      type: 'image',
      imageUrl: '图片路径',
      success: () => {
        console.log('分享成功');
      },
      fail: (err) => {
        console.log('分享失败', err);
      }
    });
回到顶部