Android端相册访问无效:闲鱼小程内嵌uniApp-H5的iOS/Android兼容性差异

近期在闲鱼小程序中嵌入由uni-app打包的H5页面时,我使用xy.chooseImage这个API,在本地调试的时候是正常调用的,但是压缩成zip上传至闲鱼小程序后,iOS用户可正常调用相册选择图片,但Android端却出现无法打开相册并且没有任何提示的问题。

1.权限调用机制不同:Android系统对H5环境下的相册访问权限控制更严格,部分宿主环境(如闲鱼)可能未完全适配相关API,导致权限请求被静默拦截

解决思路

1.首先去uniapp和闲鱼小程序平台看相关api,但是双方文档上并未提及以上问题。所以这显然就是两端的兼容性问题。

2.随后我立即联系到了闲鱼的相关技术人员寻求帮助,但这毕竟是用uniapp跨端平台开发的,想来他们也不知道,只是一味的让我多输出错误提示方便排查错误,我自己也清楚这并不是他们这边的问题。

3.恰好我这段时间我喜欢使用ai来进行一些疑难解答,随即我便想到了最近很火的deepseek,而后使用deepseek结合uniapp和闲鱼不断的调试终于是解决了android打不开相册这一问题。

代码片段:

async function chooseImage() {
	const res = await uni.getSetting();
	if (!res.authSetting['scope.writePhotosAlbum']) {
		try {
			await uni.authorize({ scope: 'scope.writePhotosAlbum' });
			xy.chooseImage({
				count: 9,
				sizeType: ['original', 'compressed'],
				sourceType: ['album', 'camera'],
				success: async ({ tempFilePaths, imageList }) => {
					try {
						console.log('imageList:'+imageList)
					} catch (processError) {
						uni.showToast({ 
							title: '处理图片失败,请重试', 
							icon: 'none' 
						});
					}
				},
				fail: (error) => {
					uni.showToast({ 
						title: '选择图片失败,请重试', 
						icon: 'none' 
					});
				}
			})
		} catch (authError) {
			uni.showModal({
				title: '提示',
				content: '需要访问相册权限,请在设置中开启',
				success: (modalRes) => {
					if (modalRes.confirm) {
						uni.openSetting();
					}
				}
			});
		}
	}
}

总结:解决方案让我很意外,竟然是android需要使用uniapp的uni.authorize来手动调用一次相册权限,但是闲鱼我是给了android相册相关权限的。果然,在跨平台技术的便利性背后,仍需针对具体场景“磨平”细节差异。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值