10

在为 Android 应用程序实现应用内计费时,我遇到了一个问题。

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

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

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

4

2 回答 2

3

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

于 2011-11-09T11:42:14.370 回答
2

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

编辑:好吧,当您提出请求(即购买)时,您首先执行 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 广播 Intent,提供有关请求的错误信息。如果请求没有产生错误,则 RESPONSE_CODE 广播 Intent 返回 RESULT_OK,表示请求发送成功。(要清楚,一个RESULT_OK 响应并不表示请求的购买成功;它表示请求已成功发送到 Android Market。)"

于 2011-11-09T17:09:10.017 回答