我正在学习如何处理从Android应用程序中购买的应用程序。我在读本文件。
基本上,本文档描述的流程如下:
我的安卓应用程序(客户端)与Google应用程序进行通信,该应用程序收集用户的支付信息,然后与Google服务器进行通信。Google Play Server依次将项目分配给用户,并响应Google应用程序,该应用程序随后告诉我的客户购买成功。在此之后,客户端交付商品,然后向Google应用程序报告该项目已被消费,从而导致Google将该项目标记为已消费。
这引发了一个安全问题:我的客户端通过告诉我的服务器该项目已经购买,从而交付该项目。我的服务器是交付项目的服务器。我的客户应用程序是一个多人游戏。正因为如此,我的服务器才是有来交付这个项目的服务器。单靠客户端应用程序无法做到这一点。
但是,上述流程要求我的服务器信任客户端。如果客户端被黑客攻击或被恶意程序替换,它可以告诉我的服务器交付任何数量的项目。现在有办法让我的服务器验证这些购买是否有效。这是一个安全风险。
相反,我想让我的服务器问Google :这个用户实际上拥有这个项目吗?谷歌游戏服务器( Google )报告的答案是可信的。但这样做有API吗?如果是,文件在哪里?如果没有这样的API,那么多人游戏如何确保其购买的安全性?
发布于 2017-08-05 09:25:23
这个查询购买的物品主题可能会有所帮助:
查询采购物品
要检索用户从应用程序中购买的信息,请调用应用程序内计费服务上的getPurchases方法。将应用程序内计费API版本、调用应用程序的包名和购买类型(“inapp”或"subs")传递到方法中。以下是一个例子:
Bundle ownedItems = mService.getPurchases(3, getPackageName(), "inapp", null);
Google服务只返回当前登录到设备的用户帐户所进行的购买。如果请求成功,则返回的包的响应代码为0。response还包含产品ID的列表、每个采购的订单详细信息列表以及每个采购的签名。 为了提高性能,应用内计费服务只返回用户首次调用getPurchase时拥有的多达700个产品。如果用户拥有大量产品,Google将包含一个字符串令牌,该标记映射到response中的键INAPP_CONTINUATION_TOKEN,以指示可以检索更多产品。然后,应用程序可以进行后续的getPurchases调用,并将此令牌作为参数传递。Google继续在response中返回一个延续令牌,直到用户拥有的所有产品都发送到您的应用程序。 有关getPurchases返回的数据的更多信息,请参见应用程序内计费参考。下面的示例演示如何从响应中检索此数据:
int response = ownedItems.getInt("RESPONSE_CODE");
if (response == 0) {
ArrayList<String> ownedSkus =
ownedItems.getStringArrayList("INAPP_PURCHASE_ITEM_LIST");
ArrayList<String> purchaseDataList =
ownedItems.getStringArrayList("INAPP_PURCHASE_DATA_LIST");
ArrayList<String> signatureList =
ownedItems.getStringArrayList("INAPP_DATA_SIGNATURE_LIST");
String continuationToken =
ownedItems.getString("INAPP_CONTINUATION_TOKEN");
for (int i = 0; i < purchaseDataList.size(); ++i) {
String purchaseData = purchaseDataList.get(i);
String signature = signatureList.get(i);
String sku = ownedSkus.get(i);
// do something with this purchase information
// e.g. display the updated list of products owned by user
}
// if continuationToken != null, call getPurchases again
// and pass in the token to retrieve more items
}
发布于 2017-08-10 17:48:27
理想情况下,你不应该相信在客户端购买的东西,因为我们已经看到第三方应用程序可以在一个越狱的android手机上使用,模仿与Google商店的交互。
您应该执行以下操作
https://stackoverflow.com/questions/45511430
复制相似问题