应用内结算安全和设计问题

时间:2011-04-04 09:11:00

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

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

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

  2. 如何获取特定产品的购买状态?据我所知,可以使用RESTORE_TRANSACTIONS请求完成,但不建议经常使用。这不是一个理论问题。我的应用程序允许用户使用应用内结算购买内容。内容可以从服务器下载,服务器只有在购买时才允许下载内容。但是,如果没有使用Android电子市场的签名回复,则无法检查内容是否已被购买。

  3. 如何从Android电子市场获取商品的价格和描述?似乎我知道答案,而且“它无法完成”,但也许我错了。有可能检索物品的价格非常有用。

  4. 对我来说,如何解决/将要解决这些问题在您的应用中非常有趣。任何这些问题的答案将不胜感激。

1 个答案:

答案 0 :(得分:21)

按顺序:

1-不。应用内结算流程是Market的一部分。如果应用程序来自其他地方,则市场无法验证应用程序的来源/真实性。

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

  

您必须设置数据库或其他机制来存储用户的购买信息。

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

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

与此同时,一个选项是设置一个带有appengine的网站,列出所有内容的商品列表。在那里定价,然后手动同步您的appengine服务器上列出的价格与市场中更新的价格。然后让您的Android应用程序从AppEngine服务器中提取数据。这比应用程序本身硬编码价格要好得多,因为您不需要让每个人立即更新应用程序,以便在您更改内容时查看准确的定价。此方法的唯一警告是,如果用户位于其他国家/地区,则应用内结算将以其本机货币显示近似价格,并且您无法准确确定将向其显示的价格。

相关的,其中一位Android Developer Advocates正在IO上发表关于LVL / IAP的演讲,称为“使用许可证验证库,应用程序内结算和App Engine躲避盗版和停止吸血鬼”。 - 当他们在网站上发布会话视频时,观看它们肯定是值得的。