安全的应用程序内购买Android的

问题描述:

我已经遵循了使用应用程序内购买的一些教程,我得到了这一切工作。但有没有可能在这个例子中安全地使用它:安全的应用程序内购买Android的

该应用程序是免费下载,并有一些聊天功能。它可以 每天发送100条消息。该应用程序可以发送额外的消息x每 年。

这里的问题是:服务器如何知道用户买了什么东西?是否有谷歌服务使用和检查?因为通过允许应用向服务器发送消息“嘿,我刚买了这个”似乎是错误的。

这个方法你会得到事务的回应。

@Override 
    public void onRequestPurchaseResponse(RequestPurchase request, 
      ResponseCode responseCode) { 

如果responseCode为RESULT_OK,表示成功事务。您可以参考this link

+0

我想检查这个服务器端。如果有人扎根他的电话,他可以伪造这个。如果我可以使用某些Google服务在服务器上检查它,它会检查他是否真正付费。 – Klaasvaak 2013-03-07 11:56:06

+0

成功事务后,您可以在服务器上发送请求以使用webservice进行通知。 – 2013-03-07 12:14:00

+1

只需调用一个网络服务,说“嗨,我买了这个东西”并不安全。我的网络应用程序是否没有可以调用的Google服务来检查用户是否真的为此付费,而不是让客户端去做。 – Klaasvaak 2013-03-07 13:03:24

作为IAP的一部分,您需要使用BroadcastReceiver从Google获取通知。其中一个通知是com.android.vending.billing.PURCHASE_STATE_CHANGED。该通知包含数据块和签名。将两者都传输到您的服务器。 Google Play会为您提供一个公钥,然后您可以使用该公钥验证服务器上数据块的签名(在php中,openssl_verify的作品)。一旦在服务器上验证了数据,就可以解析数据块(json)以获取订单列表,包括其产品标识符,告诉您用户购买了什么。从那里,你自己的协议将不得不包括一个设备/用户/合同标识符来对服务器进行验证。很难在不了解计划的情况下就此提出建议。

您可以在收到服务后,将有关购买的信息转达给您的服务器。

您可以使用openssl_verify ($data, $signature, $key)

数据和签名都在您的结果从服务中获得。密钥是您可以在开发人员控制台中找到的公共RSA密钥。