【问题标题】:In-App Billing Security and Design questions应用内计费安全和设计问题
【发布时间】:2011-07-29 00:52:01
【问题描述】:

我有几个与 Android 应用内结算相关的问题:

  1. 是否可以从非市场应用程序进行购买?我知道这将是一个漏洞,但我没有机会知道它是否可能。

  2. 如何获取特定产品的购买状态?据我了解,可以使用RESTORE_TRANSACTIONS 请求来完成,但不建议经常使用。这不是理论上的问题。我的应用程序允许用户使用应用内计费购买内容。内容可以从服务器下载,并且服务器必须仅在购买时才允许内容下载。但如果不使用来自 Android Market 的签名响应,它就无法检查是否购买了内容。

  3. 如何从 Android Market 获取商品的价格和描述?似乎我知道答案,它是“不可能做到”,但也许我错了。能够检索商品的价格将非常有用。

您如何解决/将如何解决您的应用中的这些问题对我来说非常有趣。我们将不胜感激任何这些问题的回答。

【问题讨论】:

    标签: android security in-app-purchase google-play


    【解决方案1】:

    按顺序:

    1- 不。应用内计费流程是 Market 的一部分。如果应用来自其他地方,Market 将无法验证应用的来源/真实性。

    2- 存储特定产品的购买状态是您的责任。来自doc

    您必须建立一个数据库或其他一些机制来存储用户的购买信息。

    RESTORE_TRANSACTIONS 应保留用于在设备上重新安装或首次安装。

    3- 不幸的是,此时您是对的。提交功能请求!

    与此同时,一种选择是建立一个带有 appengine 的网站,在那里存储您所有内容的列表和定价,然后手动将您的 appengine 服务器上列出的价格与 Market 中的更新价格同步。然后让您的 Android 应用从 AppEngine 服务器中提取数据。这比将价格值硬编码到应用程序本身要好得多,因为您不需要让每个人都立即更新应用程序,以便在您更改某些内容时查看准确的定价。这种方法唯一需要注意的是,如果用户在不同的国家/地区,应用内结算将以他们的本国货币显示近似价格,您无法确定向他们显示的确切价格。

    相关,其中一位 Android 开发者倡导者正在 IO 发表关于 LVL/IAP 的演讲,名为“使用许可证验证库、应用内计费和 App Engine 规避海盗和阻止吸血鬼”。 - 当他们在网站上发布会议视频时,绝对值得您观看。

    【讨论】:

    • 感谢您的回答!我还有一些问题。 1) 如果我的应用程序被反编译、更改并再次编译怎么办?那时它将是一个非市场应用程序。应用内结算会停止工作吗? 2) 当您在数据库中存储有关购买的信息时,不可能有一个安全的购买方案。所以,我正在开发一个从服务器接收许可证文件并在本地检查的应用程序。我的服务器需要一些签名数据来生成许可证。我不能只向它索取许可证,因为这将是服务器的漏洞。我应该如何使用当前的应用内计费实现来实现这一点?
    • Market 会根据您在将应用程序上传到市场时用于签署应用程序的密钥进行签名检查。由于修改后的版本不会使用您的密钥进行签名,因此市场会拒绝它 - 但是,没有什么可以阻止坚定的攻击者修改 .apk 文件,从而完全跳过 IAP 过程并假设您已经购买了所有东西。 .我提供的链接有一个“安全”部分的链接,该部分涵盖了对这类事情的保护。要回答您的第二个问题,请查看 LVL(许可证验证库)。这应该可以满足您的需求。
    • 我使用应用内结算来购买从服务器下载的内容。所以即使.apk被修改了,不购买也无法下载内容。而且即使被复制,没有许可证文件也不能使用。当然也可以修改许可证验证,但这是另一个问题。我不太确定 Android Market 会检查应用程序的签名,但我更愿意这样做。文档呢,我阅读了所有应用内计费文档和示例的所有源代码。但我所问的事情并没有涵盖在那里。 LVL 对我没有帮助,因为它不能用于销售内容。
    • Google IO , NOMZ 我会看 TY
    • 你是唯一回答我问题的人,所以赏金是你的。
    猜你喜欢
    • 2014-02-27
    • 1970-01-01
    • 2012-12-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-05-29
    相关资源
    最近更新 更多