【微信小程序】无法获取用户保存相册权限
·
原因分析
场景:在线上版小程序调用
wx.saveImageToPhotosAlbum(Object object)无法获取权限用户保存相册权限;而在体验版和开发版能成功获取。
原因:提交审核时未勾选"采集用户隐私"
- 小程序开发版/体验版放宽了很多权限,而线上版对权限校验非常严格
需要勾选"采集用户隐私"(默认无勾选)

如果是首次采集用户隐私,需要设置隐私条款

官方文档
参考代码
参考代码:本人使用了 uni-app 框架的 API,但大体是与微信官方一致的
<button class="save-btn" @click="handleSaveImage">
<text class="iconfont icon-save"></text>
保存图片
</button>
// 保存分享图片
const handleSaveImage = async () => {
try {
// 第一步:立即获取相册权限
const authRes = await new Promise((resolve) => {
uni.getSetting({
success: (res) => {
if (!res.authSetting['scope.writePhotosAlbum']) {
uni.authorize({
scope: 'scope.writePhotosAlbum',
success: () => resolve(true),
fail: () => {
uni.showModal({
title: '提示',
content: '需要您授权保存图片到相册',
success: (modalRes) => {
if (modalRes.confirm) {
uni.openSetting()
}
},
})
resolve(false)
},
})
} else {
resolve(true)
}
},
fail: () => resolve(false),
})
})
if (!authRes) return
// 第二步:业务代码(略)
uni.showLoading({ title: '正在保存...' })
// 第三步:获取图片URL
const posterRes = await getPostURLAPI({ questionId, userStore })
if (!posterRes?.data?.data) {
throw new Error('获取海报URL失败')
}
const imageUrl = posterRes.data.data
// 第四步:下载并保存图片
const downloadRes = await new Promise((resolve, reject) => {
uni.downloadFile({
url: imageUrl,
success: (res) => {
if (res.statusCode === 200) {
uni.saveImageToPhotosAlbum({
filePath: res.tempFilePath,
success: () => resolve(true),
fail: (err) => {
console.error('保存到相册失败:', err)
reject(new Error('保存到相册失败'))
},
})
} else {
reject(new Error('图片下载失败'))
}
},
fail: () => reject(new Error('图片下载失败')),
})
})
if (downloadRes) {
uni.showToast({
title: '保存成功',
icon: 'success',
})
}
} catch (error: any) {
console.error('保存图片失败:', error)
uni.showToast({
title: error?.message || '保存失败',
icon: 'error',
})
} finally {
uni.hideLoading()
}
}
代码可能有点冗余(屎山),只需要看关键的uni.saveImageToPhotosAlbum(Object object)即可
更多推荐
所有评论(0)