一、背景介绍
今天测试安卓端APP过程中,发现生成图片分享到微信好友的时候,长按图片无法产生“识别图中二维码”的操作选项(新功能要求图片中带有APP二维码,用户看到后可以识别二维码下载)。
考虑到微信中查看图片的方式主要有两种:查看普通图片和查看图片预览的方式。测试的过程中分享到微信好友,点开分享图片可见是图片预览的方式:
长按图片是没有任何操作选项弹出的。
但是如果我们点击右上角分享给好友或者将图片保存到手机再转发给好友的话,点击打开图片就是普通图片查看的方式:
这时候我们长按图片是会弹出多个操作选项的,如转发、保存到手机、识别图中二维码等。
二、原理简介
为了更好地定位问题,有必要简单梳理下分享到微信和微信识别图中二维码的主要原理。
首先,APP分享到微信好友/微信朋友圈是需要调用微信SDK接口(JS-SDK)的,具体接入方式可查看微信公众平台开发者文档。接入微信的方式有多种,包括分享图片、分享链接等。所以我们安卓端APP是通过调用JS-SDK分享图片的接口将生成的图片分享给微信好友的。
其次微信识别图中二维码,这个是打开普通图片时的功能,简单来说就是微信每打开一张图片,就会调用分析模块去判断图片中是否含有二维码,如果含有的话,则增加“识别图中二维码”功能。注意,如果图片本身二维码较小或者有遮盖的话,也是无法识别出来的。
三、问题定位
为了确认问题产生在我们安卓端代码中使用JS-SDK接口,还是安卓微信本身,我们拿IOS端APP进行对比测试。安卓端APP分享图片给IOS微信好友,识别图中二维码没有问题,证明安卓调用接口没有问题。IOS端APP分享图片给IOS微信好友,识别图中二维码没有问题,分享图片给安卓微信好友,无法识别图中二维码(仍然是图片预览模式),证明确实是安卓微信自身的图片查看方式bug导致的。
也就是说,安卓微信查看第三方APP调用SDK生成并分享给好友的图片采用了预览的查看方式,与ios微信不一致,导致了无法长按识别二维码。
PS:第三方APP生成图片分享到微信二维码由于我们的二维码生成的过小,所以是否安卓微信有这个问题还需要进一步确认。