iOS-跨app传递图片及文件的实现分析

从微信分享图片说起

直接上图(可以参考openshare这个框架)

iOS-跨app传递图片及文件的实现分析_第1张图片
原理图

第一步:把图片而二进制存入字典,其他参数也存入字典,字典外层再包一层以微信分配的appid为键的字典,二进制后存入粘贴板

第二步:

通过打开这个链接,可以跳转到微信.微信会验证此处的appid是否在其官网注册过,并且根据此appid从粘贴板拿到图片和参数,进行参数校验,而图片鉴黄则会在发送分享上传服务器后进行.

这里需要注意:iOS10.0之后app需要配置要打开的app的具体的名字才能跳转,否则无权跳转
plist中需添加微信的名字

第三步:微信需要从粘贴板取数据,进行参数校验,并进入自己的分享逻辑.数据发送到自己的服务器.同时微信把分享成功的参数写入并覆盖第一步的粘贴板

第四部:通知我们的app去查看分享是否成功.这一点是如何做到的呢?首先我们为自己的app取一个名字

,这就是微信给我们分配的appid加上前缀wx,微信当然知道这个名字!微信可以通过这个名字,打开我们的app,我们的app监听用这个名字唤起我们url,就知道是微信这哥们,然后去粘贴板看看结果,对结果进行处理.这样流程就走完了

举一反三

通过openshare的源代码,我们可以知道,阿里支付,微信支付等跨app的实现均是通过这一逻辑实现的.由此我们以后在做跨app的数据传输的时候,粘贴板结合命名的思路是很成熟.

事实上,如果只是传递很少的数据,可以把数据直接拼接在url的某个参数上,这样连粘贴板都不需要使用了.

拓展与问题

微信虽然知道我们app的名字,考虑到使用微信分享的sdk那么多,微信要如何配置所有这些名字的权限呢?

难道只需要配置wx即可吗?后面的appid参数可以缺省吗?这一步还有待实验证实.

你可能感兴趣的:(iOS-跨app传递图片及文件的实现分析)