准备好你的内购应用

在开始使用 In-app Billing 服务之前,你需要先把包含 In-app Billing Version 3 API 的库添加到你的Android工程中。你还需要设置你的应用和Google Play通信需要的权限。另外,你还需要在你的应用和Google Play之间建立一个稳定连接。最后还要确认Google Play支持你应用程序使用的In-app Billing API版本

下载示例程序


在这个训练课程,你将用到一个叫做 TrivialDrive 的示例程序对于In-app Billing Version 3的参考实现。 这个例子里有些便捷类可以快捷设置In-app Billing服务,编码解码数据类型以及在你程序的主线程处理In-app Billing请求。注1

去下载例子程序:

  1. 打开 Android SDK Manager.
  2. 在SDK Manager中展开 Extras 部分.
  3. 选择 Google Play Billing Library.
  4. 点击 Install packages 完成下载。

这个例子文件将会安装到 <sdk>/extras/google/play_billing/. (译者注:就是在你电脑上SDK目录下面)

添加应用到控制台


在 Google Play 开发者控制台,你可以发布你的添加了 In-app Billing 的应用,还可以管理来自你的应用中可以销售的各种数字商品。当你在开发者控制台创建一个新应用后,控制台会为你的应用自动生成一个公钥(public license key)。你将需要使用这个公钥在你的应用和Google Play服务器之间建立一个可信赖的连接。这个公钥在应用创建的时候生成,在以后更新你程序的APK文件时不必再次生成。

把你的应用添加到开发者控制台:

  1. 打开 Google Play Developer Console 并登陆,如果你先前没有注册的话需要先注册一个新的开发者账号。为了销售内购商品,你还需要一个 Google Wallet 商业账号。
  2. 如果你还没有登陆到最新版本的话,就点击 Try the new design 进入开发者控制台的预览版。
  3. 在 All Applications 标签处添加一个新应用。
    1. 点击 Add new application.
    2. 给你的新 In-app Billing 应用输入一个名字.
    3. 点击 Prepare Store Listing.
  4. 在 Services & APIs 标签页下找到Google Play为你应用生成的公钥并记下,一会儿在你的程序里会用到这个 Base64 字符串。

你的应用现在应该出现在开发者控制台的应用列表中。

添加 In-app Billing 库文件


为了使用 In-app Billing Version 3 的功能,你必须把 IInAppBillingService.aidl 文件添加到你的工程中。 这个 Android Interface Definition Language (AIDL) 文件定义了Google Play 服务可用的接口。

你可以在提供的例子程序里找到这个IInAppBillingService.aidl文件。根据你是创建一个新的应用还是修改现有的应用,跟随下面的指导把In-app Billing库添加到你的工程中。

新工程

添加 In-app Billing Version 3 library 到你的新 In-app Billing 工程:

  1. 把 TrivialDrive 例子程序文件复制到你的工程。
  2. 把复制的文件包名修改成你工程使用的包名。在 Eclipse,你可以使用一个快捷方式: 右键选中包名,然后选择 Refactor > Rename。
  3. 打开 AndroidManifest.xml 文件,把包名属性值改成你工程的包名。
  4. 看情况修复 import 语句,让你的工程可以成功编译。在 Eclipse,你可以使用这个快捷方式: 在出错的文件中按 Ctrl+Shift+O。 (译者注:导包的快捷键,地球人都知道~~)
  5. 修改例子代码来创建你自己的应用。记得把开发者控制台为你程序生成 Base64 公钥拷贝到你的 MainActivity.java.

现有工程

添加 In-app Billing Version 3 library 到你已有的 In-app Billing 工程:

  1. 把 IInAppBillingService.aidl文件复制到你的 Android 工程。

    • 如果你正在使用eclipse: 把 IInAppBillingService.aidl 文件引入到工程的 /src 目录下。
    • 如果你正在开发使用的是非eclipse环境: 创建下面的目录 /src/com/android/vending/billing 并把 IInAppBillingService.aidl 文件复制到这个目录下。
  2. 生成你的程序。在你工程的 /gen目录下应该可以看到一个生成的文件IInAppBillingService.java
  3. 把 TrivialDrive 例子中 /util 目录下的辅助类添加到你的工程。记得改变这些文件中声明的包名,这样你的工程才可以成功编译。

现在你的工程应该已经包含了 In-app Billing Version 3 library.

设置 Billing 许可


你的程序应该有个可以向 Google Play 的购买服务发送请求以及收到回应的许可。为了给你的应用添加必要的许可,把下面这行许可内容添加到你的manifest文件AndroidManifest.xml: 

<uses-permission android:name="com.android.vending.BILLING" />

初始化一个 Google Play 连接


为了向In-app Billing 发送请求和收到回应,你必须把你的Activity绑定到 Google Play 的In-app Billing服务。在例子中已经提供了处理绑定服务的便捷类,所以你不必直接管理网络连接。

为了和Google Play设置同步通信,在你程序Activity的 onCreate 方法中创建一个 IabHelper 实例。在 IabHelper 构造方法中传Activity的 Context 还有先前在开发者控制台生成的公钥字符串。

安全建议: 强烈建议你不要把公钥原样的编写到代码里。可替代的,在把公钥传给构造方法前,你可以动态的用子字符串构造完整的公钥,也可以从一个加密的存储中获取它。注3 这样做可以有效地防止有些居心不良的第三方修改你APK文件中的公钥。

IabHelper mHelper;

@Override
public void onCreate(Bundle savedInstanceState) {
// ...
String base64EncodedPublicKey; // compute your public key and store it in base64EncodedPublicKey
mHelper = new IabHelper(this, base64EncodedPublicKey);
}

接下来,调用你创建的 IabHelper实例中的startSetup方法来执行服务绑定。在方法中传一个 OnIabSetupFinishedListener,这个listener会在  IabHelper 完成异步设置后调用一次。在设置过程中 IabHelper 也会检测Google Play是否支持In-app Version 3 API,如果这个版本的API不被支持,或者在建立服务绑定时出现错误,这个listener就会被通知并且传给一个带有错误消息的IabResult对象。

mHelper.startSetup(new IabHelper.OnIabSetupFinishedListener() {
public void onIabSetupFinished(IabResult result) {
if (!result.isSuccess()) {
// Oh noes, there was a problem.
Log.d(TAG, "Problem setting up In-app Billing: " + result);
}
// Hooray, IAB is fully set up!
}
});

如果这个设置成功完成,你现在就可以使用这个 mHelper 引用来和Google Play服务通信了。当你的应用启动时,最好去查询下Google Play,看看用户都拥有哪些内购物品。详细内容在后来的 Query Purchased Items 部分。

重要: 记得在你用完activity后解除和In-app Billing服务之间的绑定。如果你不解除绑定,这个开放的服务连接可能影响你设备的性能。为了解除绑定并释放你的系统资源,可以在你的 Activity 销毁的时候调用 IabHelper的 dispose 方法。

@Override
public void onDestroy() {
super.onDestroy();
if (mHelper != null) mHelper.dispose();
mHelper = null;
}
注1:原文 In this training class, you will use a reference implementation for the In-app Billing Version 3 API called the TrivialDrive sample application. The sample includes convenience classes to quickly set up the In-app Billing service, marshal and unmarshal data types, and handle In-app Billing requests from the main thread of your application.

注2:原文 The convenience classes provided in the sample handles the binding to the In-app Billing service, so you don’t have to manage the network connection directly.

注3:原文 Instead, you can construct the whole public license key string at runtime from substrings, or retrieve it from an encrypted store, before passing it to the constructor.

准备你的 In-app Billing 程序的更多相关文章

  1. Thinkphp源码分析系列(三)– App应用程序类

    // +---------------------------------------------------------------------- // | ThinkPHP [ WE CAN DO ...

  2. iOS开发UI篇—在UITableview的应用中使用动态单元格来完成app应用程序管理界面的搭建

    iOS开发UI篇—在UITableview的应用中使用动态单元格来完成app应用程序管理界面的搭建 一.实现效果 说明:该示例在storyboard中使用动态单元格来完成. 二.实现 1.项目文件结构 ...

  3. iOS设置app应用程序文件共享

    1.iOSapp应用程序文件共享 当我们用itnues连接到设备时,在应用程序栏目下面,文件共享下,点击 对应的程序,即可以在程序右边栏目里面看到应用程序共享的数据, 此时,我们可以通过右下角的 添加 ...

  4. 触摸屏网站开发系列(一)-ios web App应用程序(ios meta)

    触摸屏网站的开发其实现在来讲比前几年移动端网站开发好多了,触摸屏设备IOS.Android.BBOS6等系统自带浏览器均为WEBKIT核心,这就说明PC上面尚未立行的HTML5 CSS3能够运用在这里 ...

  5. 互联网App应用程序测试流程及测试总结

    互联网App应用程序测试流程及测试总结 1. APP测试基本流程 1.1流程图 仍然为测试环境 Pass 1.2测试周期 测试周期可按项目的开发周期来确定测试时间,一般测试时间为两三周(即15个工作日 ...

  6. 测试你的 In-app Billing 程序

    测试你的 In-app Billing 程序 为了保证 In-app Billing 可以在你程序中正常使用,你应该在把应用程序发布到Google Play之前进行测试.早期的测试有助于确保用户对于你 ...

  7. HTML5-IOS WEB APP应用程序(IOS META)

    触摸屏网站的开发其实现在来讲比前几年移动端网站开发好多了,触摸屏设备IOS.Android.BBOS6等系统自带浏览器均为WEBKIT核心,这就说明PC上面尚未立行的HTML5 CSS3能够运用在这里 ...

  8. iOS-获取Model(设备型号)、Version(设备版本)、app(程序版本)等

    IOS-获取Model(设备型号).Version(设备版本).app(程序版本)等 NSLog(@"uniqueIdentifier: %@", [[UIDevice curre ...

  9. Java生鲜电商平台-APP/小程序接口传输常见的加密算法及详解

    Java生鲜电商平台-APP/小程序接口传输常见的加密算法及详解 说明:Java生鲜电商平台-APP/小程序接口传输常见的加密算法及详解,加密算法,是现在每个软件项目里必须用到的内容. 广泛应用在包括 ...

  10. Java生鲜电商平台-电商中"再来一单"功能架构与详细设计(APP/小程序)

    Java生鲜电商平台-电商中"再来一单"功能架构与详细设计(APP/小程序) 说明:在实际的业务场景中(无论是TO B还是TO C)不管是休闲食品.餐饮.水果.日用百货.母婴等高频 ...

随机推荐

  1. linux 打包 压缩 解压缩

    gzip gzip xxx文件 压缩文件xxx,后缀.gz 并且删除原来文件 gzip -tv xxx.gz 测试压缩文件压完整性 压缩当前文件夹所有文件: zip -r ./1.zip ./* -r ...

  2. Types方法之isCastable-isConvertible

    5. Conversions and Promotions 5.1. Kinds of Conversion 5.1.1. Identity Conversion 5.1.2. Widening Pr ...

  3. Types的Type访问模式

    在Types类中定义的访问都类如下: 1.MapVisitor类 2.SimpleVisitor 3.UnaryVisitor 4.TypeRelation

  4. 我爱Markdown (2)

    Markdown的语法很简单,所以很容易上手.下面介绍一下常用的Markdown的语法, 本文将介绍: 01 - Back-ticks 反尖号 02 - Headers 标题 03 - Emphasi ...

  5. 理解Python语言里的异常(Exception)

    Exception is as a sort of structured "super go to".异常是一种结构化的"超级goto". 作为一个数十年如一日 ...

  6. mock时忽略不必要的初始化

    PowerMockito.mockStatic时忽略加载类的静态field,比如想PowerMockito.mockStatic(ClassA.class),ClassA如下 public class ...

  7. 入门系列之在Ubuntu 14.04上备份,还原和迁移MongoDB数据库

    欢迎大家前往腾讯云+社区,获取更多腾讯海量技术实践干货哦~ 本文由信姜缘 发表于云+社区专栏 MongoDB是最受欢迎的NoSQL数据库引擎之一.它以可扩展,强大,可靠和易于使用而闻名.在本文中,我们 ...

  8. R语言矩阵matrix函数

    矩阵是元素布置成二维矩形布局的R对象. 它们包含相同原子类型的元素.尽管我们可以创建只包含字符或只逻辑值的矩阵,但是它们没有多大用处.我们使用的是在数学计算中含有数字元素矩阵. 使用 matrix() ...

  9. Package.json中dependencies依赖包中^符号和~符号前缀的区别

    刚git了webpack的包发现package.json里面dependencies依赖包的版本号前面的符号有两种,一种是~,一种是^,如下图标记: 然后搜了下在stackoverflow上找到一个比 ...

  10. amazeui笔记-web组件

    Json.parse()