我想让我的应用程序用户能够下载音频文件,以便他们可以在未连接到互联网时播放它们。 只有那些在我的应用程序中拥有有效订阅的人才能访问音频文件。
我认识到不存在“完美”的安全性,但我想让人们绕过我的应用程序并访问我的应用程序直接下载的音频文件(例如使用文件实用程序)变得相当困难。
我的问题分为两部分:
我研究了 expo-secure-store 和 crypto-es,但它们似乎是为键值对而不是文件设计的。
我目前使用的音频播放器是expo-av中包含的音频播放器。
请注意,我对 React Native 和 Expo 还比较陌生,所以我可能缺少一些简单的东西。
经过一些研究和实验,我想出的解决方案是使用受密码保护的 zip 文件(请参阅https://www.npmjs.com/package/react-native-zip-archive)。 无论如何,它都不是万无一失的安全性,但对于浏览文件系统的休闲黑客来说,它是一个合理的减速或阻止程序。 请注意,这意味着您必须创建一个开发版本,因为 zip 功能未内置到 Expo Go 中。
当音频应该在设备上播放时,我将文件解压缩到临时位置并等待 AV 播放器加载它(通常不到一两秒),然后立即删除解压缩的文件。 看来一旦音频文件加载完毕,播放器就不再需要访问本地文件了。
优点是,这一切都可以使用标准工具在设备上相当无缝且快速地进行。 缺点是开始播放时会出现轻微延迟,并且理论上当本地文件系统中存在解压缩的音频文件时窗口会很小(1 到 2 秒),但这种妥协对于我的用例来说是可以接受的。