在我通过 Google Play 提供的 Android 应用程序中,我想提供可以通过应用程序内结算购买的其他项目。
我想要提供的项目类型是媒体内容,例如图形和声音,这些内容通常会进入res
应用程序的文件夹。
当然,问题是这些资源必须受到保护。在其文档 http://developer.android.com/google/play/billing/billing_best_practices.html,谷歌建议不要将内容存储在应用程序包内,而是在购买商品后获取密钥,然后将密钥发送到远程服务器,在远程服务器上检查密钥,如果成功,则提供图形/声音下载到该应用程序。
从安全角度来看,这听起来不错。但如果我这样做,我就无法像正常访问资源那样轻松地使用内容。例如,如果用户可以获得额外的背景 PNG,我就不能使用R.drawable.new_background
但必须以编程方式解码位图,对吧?
那么,是否有通过应用内计费下载额外媒体内容的替代方案或最佳实践?
我想说,既然每个有足够决心的人都可以对代码进行逆向工程,无论如何,为什么不只将内容存储在应用程序内部,而是进行严格的检查用户是否可能使用该内容。
答案在一定程度上取决于您的具体问题,根据您的问题,可能是以下 1 或 2:
1) 我担心有人能够使用我的资源within我的应用程序无需付费,或者
2) 我担心用户 (either一个已经付款的人,or一个拥有not付费)将删除我的资源并使用它们outside my app.
您的问题似乎没有指出另一种可能性(但其他人已尝试解决)是:
3) 我担心我的初始 APK 下载太大,因为下载了大量资源,而用户只决定使用其中的一些资源。
如果您唯一关心的是第 1 项,那么您可以像平常一样存储资源,但在您的应用程序内,拒绝加载/使用您尚未收到应用内付款的任何资源。这当然是最简单的方法。
如果您关心的是第 2 项,那么您只需在 APK 的原始文件夹中包含一个加密的二进制存档,并在该资源被授权(例如通过付款)供应用程序使用时从中解码该资源。正如其他人所指出的,就处理器负载而言,这并不是什么大问题,而且它确实提供了一些防止意外盗窃的保护。当然,如果您正在与那些破坏您的加密并窃取您的资源的“创意抄袭者”矛盾修辞者打交道,那么总会有版权法。
如果您关心的是第 3 项,那么您将需要一个可以检索您的项目的外部服务器。
在应用程序外部实施此类存储时,Google App Engine 是一种流行的托管选择。您只想将任何购买/下载的资源缓存在应用程序自己的外部文件夹中的加密存档中(由 getExternalFilesDir() 返回),然后按照上面第 2 项中的方式读取和解密它。当您的应用程序被卸载时,此类文件将被自动删除。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)