创建可供购买的 In-app Billing 商品
在你发布 In-app Billing 应用前,你需要在 Google Play 开发者控制台 定义可供购买的数字商品列表。
在 Google Play 设置你的 In-app 商品
在开发者控制台,你可以定义内购商品的商品信息并把这些商品和你应用关联起来。
在商品列表里添加新的内购商品:
- 为你的 In-app Billing 程序创建一个签名的 APK 文件。 想知道如何创建签名的 APK 文件,参考 Building Your Application for Release。确保你给程序签名使用的是最终(不是 debug key)证书和私有key。
- 在开发者控制台打开你先前创建的应用入口。注1
- 点击 APK 标签然后点击上传你的 APK 文件,最后把你已经签名的 APK 文件上传到开发者控制台。现在不要选择发布这个应用!
- 找到你上传的应用列表页,选择你要创建内购商品的那个应用,然后点击 In-app Products。
- 找到相关选项点击添加一个新商品,然后把商品需要指定的信息填完,其中有物品的唯一商品ID,描述,价格以及可销售的国家。记下商品ID,你一会儿可能需要这个去查询你应用内商品的购买详细信息。
重要: In-app Billing Version 3 服务现在只支持受管理内购商品,所以在开发者控制台当你向商品列表添加一个新商品时,要确保设置这个商品的类型为“受管理的”。
- 如果你已经完成了上面的操作,最后还要激活商品,激活后你的应用才可以购买这些商品。
提醒: It may take up to 2-3 hours after uploading the APK for Google Play to recognize your updated APK version. 在你 APK 上传到后,Google Play可能需要2-3小时来识别你更新的 APK 版本。如果你在Google Play识别完你上传的APK之前就做测试的话,你的应用会收到一个带有 “In-app Billing在当前版本应用不可用” 错误信息的 “购买取消” 回应。
查询可以购买的商品
你可以通过代码方式向Google Play查询关联你应用的商品详细信息(像商品价格,名称,描述以及类型)。 这个对你很有帮助,比如你想展示哪些用户可以购买自己未拥有的商品时就可以用到。
注意: 在使用查询时你需要使用查询商品的明确商品ID。你可以从开发者控制台通过打开你应用的 In-app Products 标签手动找到这个商品ID。这些商品ID位于 Name/ID 标签栏下。
通过 IabHelper 实例调用 queryInventoryAsync(boolean, List, QueryInventoryFinishedListener) 方法来获取商品详细信息
- 第一个输入参数的意思是是否应该获取商品详情(应该设为
true
)。 - 这个
List
参数由一个或多个你想查询商品的商品ID组成。 - 最后,这个
QueryInventoryFinishedListener
参数指定了一个监听,当查询操作完成以及处理查询回应时这个监听收到通知。
如果你使用例子提供的便捷类的话,这些类将会处理 In-app Billing 请求的后台线程管理,这样你就可以在你程序的主线程安全地执行查询操作。
下面的代码展示了如何获取商品ID为 SKU_APPLE
和 SKU_BANANA
的两个商品的详细信息,这两个商品ID是先前在开发者控制台定义的。
List additionalSkuList = new List();
additionalSkuList.add(SKU_APPLE);
additionalSkuList.add(SKU_BANANA);
mHelper.queryInventoryAsync(true, additionalSkuList,
mQueryFinishedListener);
如果这个查询成功执行,查询结果会存到一个 Inventory
对象中,这个对象会回传给先前传入的监听。
下面的代码展示了如何从查询结果中获取商品价格。
IabHelper.QueryInventoryFinishedListener
mQueryFinishedListener = new IabHelper.QueryInventoryFinishedListener() {
public void onQueryInventoryFinished(IabResult result, Inventory inventory)
{
if (result.isFailure()) {
// handle error
return;
} String applePrice =
inventory.getSkuDetails(SKU_APPLE).getPrice();
String bananaPrice =
inventory.getSkuDetails(SKU_BANANA).getPrice(); // update the UI
}
}