在App Purchase后端架构中:用户帐户并保护应用免受“借用帐户”下载

时间:2016-12-17 22:04:56

标签: in-app-purchase backend mobile-application system-design

我是一名前端开发人员,我即将开始编写我的第一个后端(使用AWS,所以希望它不会是一场灾难)。我需要一些指导,可以链接到SO上的相应主题或教程或其他 - 我已经搜索了很长时间但我可能不知道如何搜索我需要解决的问题。

保持简单:我的客户出售书籍。为了补充这些书籍,我们目前正在开发一款应用程序。这个应用程序的不同部分将对应不同的书籍,虽然该应用程序也有自己的价值(即你不必拥有一本书来使用该应用程序)。这个想法是,如果用户拥有一本书,他将被允许免费从AppStore下载相应的应用程序部分。他没有,他必须使用IAP购买这些内容以获得一些金钱。

我想出了以下简单的解决方案:

  • 我们正在维护一个包含所有销售书籍ID的数据库
  • 我们允许用户注册并输入他们拥有的图书的ID(
  • 我们会针对我们的数据库检查这些ID,并检查其他用户是否先前输入了ID
  • 如果id(是)OK,我们允许用户下载与所拥有的图书相对应的内容。

如果用户在这些设备上登录他的帐户,则可以从多个设备(例如他的iPad,他的iPhone,他孩子的iPhone ......)下载内容。

但是,我希望防止用户将自己的帐户提供给朋友的情况,然后朋友会在他的设备上登录此帐户并下载内容,然后注销并使用该应用,即使他没有买了什么,他没有这本书。

我的想法:

  • 用户必须登录才能验证他是否有权使用该内容,即使该内容已经在他的手机上(先前已下载过)。用户只能同时登录到一个设备(登录到另一个设备后,他将从第一个设备登出)。严重缺点:用户只能在连接到互联网时使用该应用程序,即使他可能已下载了所有内容。

  • 通过执行购买或购买图书,用户有权获得3次下载。严重缺点:如果用户删除应用程序并希望重新安装该怎么办?重新下载购买的部件将被视为一次下载,因为没有可靠的方法来检查设备是否与以前相同,至少不适用于iOS - 有一种叫做vendorId的东西,但它被证明是不可靠的 - 例如改变系统更新。

  • 为图书所有者提供最低价格(而非免费)的相同内容,以及其他人的正常价格。这样我就可以将所有支票委托给Apple(通过用户的iCloud帐户),因为解锁内容总是需要使用IAP,一旦购买,Apple将跟踪所有内容。

  • 其他方法吗?请帮忙。

还有一件事需要考虑 - 我们希望有可能制作“课堂帐户” - 多个设备可以登录同一帐户并下载内容。客户端将决定允许多少设备并将此次下载数量放入数据库。

2 个答案:

答案 0 :(得分:0)

如何区分:

  

用户可以从多个设备下载内容(例如   他的iPad,他的iPhone,他孩子的iPhone ......)如果他登录他的   这些设备上的帐户。

  

但是,我想防止用户提供他的情况   帐户给朋友,然后他的设备上登录此帐户   并下载内容,然后注销并使用该应用程序,即使   他没有买任何东西而他也没有这本书。

也许这在技术上是可行的,但我会质疑它是否值得做。限制性许可更有可能给您的好客户带来不便,而不是防止盗版。更不用说这样做的技术挑战了。

答案 1 :(得分:0)

有这些问题,以为我会解决这个问题。

一个强大的“退出”按钮是解决应用程序中某些此类问题的有用工具。如果在注销时您通过数据库对用户进行身份验证,擦除“用户默认设置”,甚至清除数据库中已下载资料的信息,则您至少会捕获尝试在同一设备上使用多个帐户的用户。典型的用户永远不会退出应用程序。

然后,您可以利用UserDefaults / LocalVariables保留购买或高级信息以获取脱机功能,然后在需要时引用AWS。如果设置得当,AWS身份验证侦听器将承担很多负担,即使在卸载并重新安装该应用程序之后,您也可以在其中登录。

您在第一个想法中提到的另一点是确保用户一次仅登录一个设备。 Snapchat做到了,所以它是不错的UX,对吗?

对于教室帐户,您必须设置更高级的监控,以确保他们不在外部计算机上使用它们。如果您可以访问所有注册机器的MAC和IP地址,这可能会有所帮助。