繁体   English   中英

如何使用Java(Servlet)验证针对应用内结算Android Market的签名数据

[英]how can I verify signed data coming for In-App Billing Android Market using Java (Servlet)

在为Android应用程序实施应用内结算时,我遇到了一个问题。

让我先解释一下这个场景
我们有一个内容服务器(数据服务器),其中包含产品列表。
当用户从列表中选择一个时,他就可以购买它。
使用我的测试帐户输入信用卡详细信息后,购买逻辑运行完美。
在回报中,我在Android设备中获得了签名数据。

我的问题是
1.我是否必须在Android设备中验证签名数据 ,然后将一些信息或数据发送到内容服务器,然后内容服务器发送产品(我认为这可能不太好,因为服务器端没有流量来验证请求是否有效或更准确;签名数据是否由谷歌市场生成 )?
2.如果我必须在服务器端验证数据,我该怎么做? 我是否必须将其发送到Google市场 (如果是,使用哪种网络服务或API)?

请帮我纠正这个。
提前致谢。

对于您的第二个问题,哈希(例如:MD5,SHA)数据并将哈希与数据一起发送到服务器。 在服务器上,创建数据的哈希并比较哈希以验证它们。

要回答您的问题,您必须首先使用某种ID创建应用内商品,然后将其绑定到服务器上的数据库中。 使用webservices,然后查询数据库并查看应用程序内ID是否与产品数据库中的ID匹配。 此外,您可以使用安全Nonce和签名进行验证。 大多数情况下,您让谷歌处理这些产品,因此您需要在数据库之后对应用内产品进行建模。 如果您的产品太多,那么您将不得不以创建移动网站的标准方式处理它....

编辑:当您提出请求(即购买)时,首先执行REQUEST_PURCHASE,然后启动市场返回的PendingIntent。 然后你就可以处理Market发送的广播意图了。 您在请求中指定了四个密钥,然后发出购买请求:

  Bundle request = makeRequestBundle("REQUEST_PURCHASE");
  request.putString(ITEM_ID, mProductId);

  // Note that the developer payload is optional.
  if (mDeveloperPayload != null) {
      request.putString(DEVELOPER_PAYLOAD, mDeveloperPayload);
      Bundle response = mService.sendBillingRequest(request);
      // Do something with this response.
  }

然后你必须使用PendingIntent来启动checkoutUI(小心1.6到2.0的差异,其中1.6要求它与Activity分开启动)。 看一下Google示例中的PurchaseObserver.java。

“Android Market应用程序发送RESPONSE_CODE广播意图,提供有关请求的错误信息。如果请求未生成错误,则RESPONSE_CODE广播意图返回RESULT_OK,表示请求已成功发送。(要清楚,a RESULT_OK响应并不表示请求的购买成功;它表示请求已成功发送到Android电子市场。)“

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM