@Lee 问:
我常通过微信分享 Dropbox 中的文件,希望能实现以下效果:可以选中几个文件并一起发送给微信联系人,发送后还能自动把临时文件移动到待删文件夹,以备后期使用。
@Minja:微信分享多个文件是一个常见的需求,它的难点在于微信不支持多选文件传输,也不支持 x-callback-URL,所以有一些棘手。好在 iOS 现在有「返回上一个应用」这个功能,可以半自动地完成 x-callback-URL 的功能。所以,我们借助 Workflow,就可以实现「微信分享多文件」这个需求。
这个动作出自文刀,我在其基础上实现了 Dropbox 和 iCloud Drive 两个版本:
两个 Workflow 只在选取文件这步上有极小的差别。使用方法基本一致:
运行 Workflow,弹出文件选取界面,选好文件;
弹出联系人选择界面,选好联系人;
手动点击屏幕左上角回到 Workflow;
再次弹出联系人界面,重复 2、3 步,直到文件发送完毕。
接下来,我们就看看这个 Workflow 是怎么制作的。你可以先下载适合自己的版本,结合使用过程可以更容易地理解文章。
思路与制作
这个发送文件的 Workflow 可以分作两部分:
选择、发送文件;
把已发送文件复制到待删文件夹,删除原文件。
一一解决,我们很快就理出思路来了。
选择与发送
最初的动作就是 Get File,选中你在用的服务,并勾选下面两项:
Show Document Picker
Select Multiple
之后用 Set Variable 动作把这些文件设为变量 File,以便接下来的发送和移动操作。
为了发送文件,我们需要使用 Open In 这个动作,并把 App 预设为 微信(WeChat)。其实 Open In 所实现的功能就在我们熟悉的分享菜单(Share Sheet)中,一般想发文件或消息给微信好友,就可以通过分享菜单中的微信图标进行,能够到达选择联系人的界面。
由于我们可能要发送多个文件,所以得像下图一样把 Open In 套在一个 Repeat with Each 循环里,并且接上一个 Wait to Return 动作,这样才能实现分享一个文件、点击屏幕左上角跳回 Workflow、继续分享下一个文件的效果。
Open in 和 Wait to Rerurn 动作嵌套在 Repeat with Each 里
不得不说,微信的分享机制并不好用,我们只能一次分享一个文件,不然就会丢失后后面的文件。
移动与删除
发送完文件之后,我们需要把它移到「待删」文件夹。Workflow 里没有移动文件的功能,但是可以组合使用保存和删除动作,曲线实现移动。
首先我们加一个 Get Variable,获得之前设置的 File 变量,通过 Save File 动作将之存到 Dropbox 中1 。我将待删文件夹路径(Destination Path)命名为 已发送 发送日期 的格式,比如 已发送文件 2018-03-12,如此一来,如果发送过多次文件,也能知道对应的是哪个文件夹,方便日后回溯。
iCloud 版有一点不同,不能自动把文件保存到 iCloud 根目录,只能保存在 Workflow/ 文件夹下面。不过 iCloud 版的好处是可以使用 Document Picker,自由选取 Files 里的文件——如果你装了 Dropbox,就能直接选 Dropbox 里的文件了。
接着另起一个 Get Variable 动作,后接 Delete Files,就把原件删除了。
现在我们把整个动作跑一遍:
喔,符合预期效果。
回顾与总结
每次做完一个 Workflow,我都喜欢回顾其中的动作。这次的定制,起初我没有思路,因为微信较为封闭、我查不到 URL Scheme 就以为无路可走;后来经文刀提醒,才回想起可以用 Open In 这个万金油。有时候我们可能找不到专门的方法,此时不妨试试通用的办法。
就像学生时代我们做完习题要反刍一下其中的知识点一样,做好一个自动化动作,也希望诸位体会体会动作背后的原理。