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

Mic*_*ael 24 security android in-app-purchase google-play

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

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

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

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

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

Ale*_*cas 21

为了:

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

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

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

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

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

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

相关的,其中一位Android Developer Advocates正在IO上发表有关LVL/IAP的演讲,名为"使用许可证验证库,应用内结算和App Engine躲避盗版和阻止吸血鬼". - 当他们在网站上发布会话视频时,一定值得您关注.