Android In App结算和存储托管购买

时间:2011-03-30 03:14:14

标签: android in-app-purchase

我正在考虑将我最受欢迎的WP7游戏移植到Android上。我想做的是免费提供它,但在大约5分钟的播放时间之后,下载器唯一的选择是购买应用以完全解锁游戏。但是,我发现在Managed Purchases环境中IAB的官方Android SDK有一个“Restore_Transactions”可用,但它没有说我可以在每次发布游戏时使用它。 http://developer.android.com/guide/market/billing/billing_overview.html

所以,问题是,我如何/在哪里/什么格式存储用户解锁游戏而不在每次游戏发布时调用“Restore_Transactions”的事实?

2 个答案:

答案 0 :(得分:4)

作为开发人员,您负责恢复托管购买类型的已购买交易。示例Dungeons应用程序在应用启动时查询托管用户购买。我不认为需要网络访问才能查询市场内的应用内购买,因为它会向内部市场数据库查询身份验证。

有关详情,请在Dungeons.java

中找到此代码
.....

/**
 * Reads the set of purchased items from the database in a background thread
 * and then adds those items to the set of owned items in the main UI
 * thread.
 */
private void doInitializeOwnedItems() {

.....

并完整阅读以下内容:http://developer.android.com/guide/market/billing/billing_admin.html

答案 1 :(得分:0)

在您的Android市场的发布商页面中。您可以将应用内购买项目设置为“托管购买”。这意味着Android市场将保留用户购买此商品的记录。

因此,如果您在加载时查询Android市场,它将返回您的“RESTORE_TRANSACTION”状态,并且您知道用户已购买此项目。

正如您的问题这样做:

您可以将其存储在手机上的数据库中(可以通过root手机轻松破解)。

您可以将其加密存储在手机上的多个表格中的数据库中(如果用户卸载,则可能会丢失,而且会丢失)。

您可以在手机上存储用户参考,数据库存储在您自己的安全服务器上(类似于安装日期和SecureRandom()下载的IMEI编号.nextLong())。

正如您所说,您不想这样做,您可以存储原始购买,然后查询InApp结算服务。

引自谷歌文档:

  

如果您有远程服务器,我们建议您将购买信息存储在服务器上,而不是存储在设备上的本地数据库中

进一步阅读: InApp Security & Design