创建可供购买的 In-app Billing 商品

在你发布 In-app Billing 应用前,你需要在 Google Play 开发者控制台 定义可供购买的数字商品列表。

在 Google Play 设置你的 In-app 商品


在开发者控制台,你可以定义内购商品的商品信息并把这些商品和你应用关联起来。

在商品列表里添加新的内购商品:

  1. 为你的 In-app Billing 程序创建一个签名的 APK 文件。 想知道如何创建签名的 APK 文件,参考 Building Your Application for Release。确保你给程序签名使用的是最终(不是 debug key)证书和私有key。
  2. 在开发者控制台打开你先前创建的应用入口。注1
  3. 点击 APK 标签然后点击上传你的 APK 文件,最后把你已经签名的 APK 文件上传到开发者控制台。现在不要选择发布这个应用!
  4. 找到你上传的应用列表页,选择你要创建内购商品的那个应用,然后点击 In-app Products。
  5. 找到相关选项点击添加一个新商品,然后把商品需要指定的信息填完,其中有物品的唯一商品ID,描述,价格以及可销售的国家。记下商品ID,你一会儿可能需要这个去查询你应用内商品的购买详细信息。

    重要:  In-app Billing Version 3 服务现在只支持受管理内购商品,所以在开发者控制台当你向商品列表添加一个新商品时,要确保设置这个商品的类型为“受管理的”。

  6. 如果你已经完成了上面的操作,最后还要激活商品,激活后你的应用才可以购买这些商品。

    提醒: 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
}
}
 注1: 原文 In the Developer Console, open the application entry that you created earlier. application entry怎么翻译?

创建 In-app Billing 商品的更多相关文章

  1. 购买 In-app Billing 商品

    购买 In-app Billing 商品 一旦你的应用连接上了 Google Play,你就可以初始化内购商品的购买请求了.Google Play 提供了结算接口,可以让用户进入使用他们的支付方式,所 ...

  2. 利用spring boot创建java app

    利用spring boot创建java app 背景 在使用spring框架开发的过程中,随着功能以及业务逻辑的日益复杂,应用伴随着大量的XML配置和复杂的bean依赖关系,特别是在使用mvc的时候各 ...

  3. WeX5学习笔记-创建本地APP相关问题

    1.在Native新建[创建本地APP]时, "服务地址”为本地IP和端口号,例如本地IP为192.168.253.1,端口号为8080,则设置为http://192.168.253.1:8 ...

  4. 用PhpStorm IDE创建GG App Engine PHP应用教程

    在上一篇教程里我们已经介绍了如何为PhpStorm搭建软件环境,那么今天就该是正式的开始创建App了: 3.创建首个Google App Engine PHP Application 现在我们就可以开 ...

  5. iOS 10 创建iMessage App

    原文作者 澳大利亚19岁少年--Davis Allie ----原文地址 时值中秋佳节, 送给出门在外的程序猿们 ! 骚年们, 自己写个表情包斗图可否 ! 斗-seal.svg.png 第一. 介绍 ...

  6. 根据iOS 10 的新特性,创建iMessage App,可用于自定义表情

    第一. 介绍(原文作者 澳大利亚19岁少年--Davis Allie ----原文地址) 随着iOS10的发布,苹果对开发者开放了Messages应用程序,开发人员现在可以创建他们自己的各种类型 并且 ...

  7. react系列笔记1 用npx npm命令创建react app

    react系列笔记1 用npx npm命令创建react app create-react-app my-app是开始构建新的 React 单页应用程序的最佳方式.它已经为你设置好了开发环境,以便您可 ...

  8. 第三百七十四节,Django+Xadmin打造上线标准的在线教育平台—创建课程app,在models.py文件生成4张表,课程表、课程章节表、课程视频表、课程资源表

    第三百七十四节,Django+Xadmin打造上线标准的在线教育平台—创建课程app,在models.py文件生成4张表,课程表.课程章节表.课程视频表.课程资源表 创建名称为app_courses的 ...

  9. 第三百七十三节,Django+Xadmin打造上线标准的在线教育平台—创建用户app,在models.py文件生成3张表,用户表、验证码表、轮播图表

    第三百七十三节,Django+Xadmin打造上线标准的在线教育平台—创建用户app,在models.py文件生成3张表,用户表.验证码表.轮播图表 创建Django项目 项目 settings.py ...

随机推荐

  1. MySQL error2003错误原因以及解决方案

    转自:http://hi.baidu.com/tianxia339/item/8e8849111461ea7e7a5f2540 出现ERROR 2003 (HY000): Can't connect ...

  2. AngularJs双向绑定详解

    双向绑定的三个重要方法: $scope.$apply() $scope.$digest() $scope.$watch() 一.$scope.$watch() 我理解的$watch就是将对某个数据的监 ...

  3. WebDriver+TestNG的一个典型例子

    想让测试更加灵活,1. 可以配置使用任意支持的浏览器进行测试:2. 配置所有Google的URL:3. 配置搜索的关键字.修改后的代码: public class GoogleTest { WebDr ...

  4. linux mint 18.2 安装wireshark

    Method 1: Via PPA Step 1: Add the official PPA sudo add-apt-repository ppa:wireshark-dev/stable Step ...

  5. WPF中后台代码停止RepeatBehavior=RepeatBehavior.Forever的办法

    1.在使用Begin()方法启动动画的时候,要将isControlable设置成true,就是Begin方法的第二个参数  scanningStoryBoard.Begin(this,true);// ...

  6. WPF中设置Border的BorderThickness属性会让背景图片产生模糊感

    <!--设置BorderThickness会让border的Background图片看起来有模糊感--> <Border x:Name="border" Bord ...

  7. shell -- sample -- 关闭tomcat

    #!/bin/bash process_name="org.apache.catalina.startup.Bootstrap" shutdown_call= function s ...

  8. JAVA 方法 和Scanner

    方法:包含于类或对象中,是解决一类问题步骤的有序组合. 算法:解决一类问题的思想. Scanner next()与nextLine()区别 next(): 1.一定要读取到有效字符后才可以结束输入. ...

  9. 动态生成自定义控件ascx如何给ascx传值

    有机会看到有网友在论坛上发出问题: 在网页上的铵钮执行之后,动态加载的用户控件,如果没有处理好,会在子用户控件的铵钮被执行时抛弃.因此我们需要着重需要处理的关键点.同相子用户控件在动态加载之后,它的状 ...

  10. MyBatis中插入并返回主键

    开发过程中经常遇到需要插入一条数据,并且返回这条数据自增的主键,在MyBatis中只需要在mapper中添加keyProperty属性即可 在mapper中添加keyProperty属性 <in ...