在实施针对Android应用的应用内结算时,我遇到了一个问题。
让我先解释一下情景 我们有一个内容服务器(数据服务器),其中包含产品列表 当用户从列表中选择一个时,他就可以购买它 在我使用我的测试帐户输入信用卡详细信息后,购买逻辑运行完美 在回报中,我在Android设备中获得了签名数据。
我的问题是
1.我是否必须验证Android设备中签名的数据,然后将一些信息或数据发送到内容服务器,然后发送产品(我认为这可能不太好,因为没有在服务器端流动以验证请求是否有效或更准确;签名数据是否由谷歌市场生成)?
2.如果我必须在服务器端验证数据,我该怎么做?我是否必须将其发送到 Google市场(如果是,使用哪种网络服务或API)?
请帮我纠正这个问题 提前谢谢。
答案 0 :(得分:3)
对于第二个问题,哈希(例如:MD5,SHA)数据并将哈希与数据一起发送到服务器。在服务器上,创建数据的哈希并比较哈希以验证它们。
答案 1 :(得分:2)
要回答您的问题,您必须先使用某种ID创建应用内商品,然后将其绑定到服务器上的数据库中。使用webservices,然后查询数据库并查看应用程序内ID是否与产品数据库中的ID匹配。另外,您可以使用安全Nonces和签名进行验证。大多数情况下,您让谷歌处理这些产品,因此您需要在数据库之后对应用内产品进行建模。如果您的产品太多,那么您将不得不以创建移动网站的标准方式处理它......
编辑: 那么当您提出请求(即购买)时,首先执行REQUEST_PURCHASE,然后启动Market返回的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,表示请求已成功发送。(要成为清除,RESULT_OK响应并不表示请求的购买成功;它表示请求已成功发送到Android Market。)“