Google Play Console创建应用
我的应用是后台人员完成的,具体的可以参考Google Play Console创建应用其中需要注意的是添加测试人员只是测试APK包,需要进行内支付测试则需要添加可用于测试的Google账号,添加了之后此账号在这apk中测试则不是真实支付,不会扣钱。

导入工具类

在 Android Studio 中打开Android SDK Manager(在Tools–>Android 里面),找到并安装Google Play Billing Library这一项。

  1. 在 Android Studio 中打开Android SDK Manager(在Tools–>Android 里面),找到并安装Google Play Billing Library这一项。
  2. 如果 Android Studio 中没有Google Play Billing Library这一项,就直接下载百度网盘提取码:hu15
  3. 项目中导入IInAppBillingService.aidl文件
  4. 导入之后在Build中点击Make Project

    你会发现在在根目录下会生成该文件的接口
  5. 将其他google支付的工具放进自己项目

    现在准备工作已经完成,接下来就是支付的实现

实现客户端google内支付

  1. 添加google支付的权限
    <uses-permission android:name="com.android.vending.BILLING"></uses-permission>
  1. 初始化 IabHelper
public class ScanMainActivity extends AppCompatActivity  {IabHelper mHelper;
...
...
...@Overrideprotected void onCreate(@Nullable Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.scan_activity_main);String base64EncodedPublicKey ="Public Key" //这是在Google Play Console创建应用的时候google给的应用公匙,这里最好是将公匙放服务器上,客户端进行网络请求获得mHelper = new IabHelper(getContext(), base64EncodedPublicKey);mHelper.enableDebugLogging(false);mHelper.startSetup(new IabHelper.OnIabSetupFinishedListener() {public void onIabSetupFinished(IabResult result) {if (!result.isSuccess()) {return;}if (mHelper == null) return;try {mHelper.queryInventoryAsync(queryInventoryFinishedListener);//查询有是否需要消耗的商品} catch (IabHelper.IabAsyncInProgressException e) {e.printStackTrace();}}});}.........}
  1. 查询是否有需要消耗的商品的监听
IabHelper.QueryInventoryFinishedListener queryInventoryFinishedListener = new IabHelper.QueryInventoryFinishedListener() {@Overridepublic void onQueryInventoryFinished(IabResult result, final Inventory inv) {if (mHelper == null) return;Purchase mPurchase = inv.getPurchase("你创建的内购商品的ID,如果是数组自己遍历一遍");if (mPurchase != null) {try {mHelper.consumeAsync(inv.getPurchase("同上", mConsumeFinishedListener);查询到之后调用消耗监听} catch (IabHelper.IabAsyncInProgressException e) {e.printStackTrace();}return;}}};
  1. 消耗已购买商品的监听
 IabHelper.OnConsumeFinishedListener mConsumeFinishedListener = new IabHelper.OnConsumeFinishedListener() {@Overridepublic void onConsumeFinished(Purchase purchase, IabResult result) {LogUtil.i("DDDDDD", result);}};
  1. 购买是否成功的监听
IabHelper.OnIabPurchaseFinishedListener mPurchaseFinishedListener = new IabHelper.OnIabPurchaseFinishedListener() {@Overridepublic void onIabPurchaseFinished(IabResult result, final Purchase info) {if (result.isFailure()) {return;}try {mHelper.consumeAsync(info, mConsumeFinishedListener);//消耗购买成功的商品,否则不能二次购买} catch (IabHelper.IabAsyncInProgressException e) {e.printStackTrace();}}};
  1. google回传的信息处理
   @Overridepublic void onActivityResult(int requestCode, int resultCode, Intent data) {if (mHelper == null) return;**将回调消息分发给mHelper.handleActivityResult处理**if (!mHelper.handleActivityResult(requestCode, resultCode, data)) {super.onActivityResult(requestCode, resultCode, data);} else {}}
    在这一步我遇到一个难题,因为我是在fragment中进行google支付,所以返回的消息被父activity拦截,因此在这一步停留了许久。下面是解决方法:
     在父activity中实例化支付页面并绑定id,写在onCreate方法中即可FragmentManager manager = this.getSupportFragmentManager();fragmentBuyCorn=(Fragment) manager.findFragmentById(R.id.flNavigationConversion);重写父activity中的onActivityResult方法@Overrideprotected void onActivityResult(int requestCode, int resultCode, @Nullable Intent data) {Fragment fragment=getSupportFragmentManager().findFragmentById(R.id.flNavigationConversion);fragment.onActivityResult(requestCode, resultCode, data);这里已经将消息传递给fragment
}
  1. 发起购买
 mHelper.launchPurchaseFlow(getActivity(),"商品ID:sku", RC_REQUEST(自己定义一个请求码,随便写), mPurchaseFinishedListener, "自己传给google的数据,可以不传");
  1. 最后在退出页面时还需要将mHelper给关闭
    @Overridepublic void onDestroy() {super.onDestroy();if (mHelper != null) {try {mHelper.dispose();mHelper = null;} catch (IabHelper.IabAsyncInProgressException e) {e.printStackTrace();}}}

关于测试中遇到的问题



这些问题导致的原因可能为:

  1. 与google play 上发布的版本code不一致
  2. 包的签名不一致
  3. 未在google后台配置相应的内购商品
  4. 你在google上传的apk未发布
  5. 商品id错误
  6. 测试账号的支付设置地区一定不能设为大陆,设置为香港都行
  7. 调取的是默认gmail账号付款,保证此账号不是在google play创建应用的账号

成功后的页面


到此就将google支付接入完毕了,可能还有些细节没有写到,我也只是一枚新手,代码风格不太好,还在改进,请见谅

安卓集成google内支付相关推荐

  1. 安卓集成Google Play支付(谷歌支付)最新版本

    Google Play 支付文档:https://developer.android.com/google/play/billing/integrate Google Play 支付库已经升级到5.0 ...

  2. 安卓集成Google登录并进一步获取性别生日手机号等信息

    由于公司做海外产品需接入Google三方登录,并且登录后除获取邮箱,用户名和用户id等基本信息外还要获取用户的性别年龄甚至手机号等信息.后面的需求实现起来就有点坑了,主要原因:Google的文档写得真 ...

  3. Google in app billing 应用内支付

    一 简介 Google in app billing 是google play 商店的应用内支付,他是一种应用内的虚拟的道具支付服务,支持应用内支付(inapp)和订阅(subs)两种模式; 在中国, ...

  4. Google play billing(Google play 内支付) 上篇

    写在前面: 最近Google貌似又被全面封杀了,幸好在此之前,把Google play billing弄完了,现在写篇 博客来做下记录.这篇博客一是自己做个记录,二是帮助其他有需要的人.因为现在基本登 ...

  5. 接入华为应用内支付,验证购买Token接口,返回“rights invalid”

    有海外开发者向我们提问:我在应用中集成了华为应用内支付SDK(测试购买订阅型商品),按照文档说明,在服务器去请求验证购买Token接口的时候返回了{"responseCode":& ...

  6. 【FAQ】接入HMS Core应用内支付服务过程中一些常见问题总结(2)

    HMS Core应用内支付服务(In-App Purchases,IAP)为应用提供便捷的应用内支付体验和简便的接入流程.该服务支持客户端和服务端两种开发形式,具体可以参考官方文档 上次,我们分享和总 ...

  7. 接入HMS Core应用内支付服务过程中一些常见问题总结

    华为HMS Core应用内支付服务(In-App Purchases,IAP)为应用提供便捷的应用内支付体验和简便的接入流程.该服务支持客户端和服务端两种开发形式,具体可以参考官方文档. 往期文章:常 ...

  8. 【FAQ】接入华为应用内支付服务常见问题解答

    HMS Core应用内支付服务(In-App Purchases,IAP)为应用提供便捷的应用内支付体验和简便的接入流程.开发者的应用集成IAP SDK后,调用IAP SDK接口,启动IAP收银台,即 ...

  9. 集成Google应用内 支付 或者 订阅

    要集成Google应用内支付 先要了解文档 集成文档: https://developer.android.google.cn/google/play/billing/integrate 1.创建Go ...

最新文章

  1. R语言ggplot2可视化、不同分组使用不同的色彩、同一分组(group)的线条使用相同的色彩但是配置使用不同的线型(line type)
  2. [LUOGU] P2330 [SCOI2005]繁忙的都市
  3. [Redis]Redis章2 Redis 持久化
  4. 现代谱估计:多窗口谱
  5. java文件操作大全
  6. Python学习之路和隐藏特征
  7. X86汇编语言从实模式到保护模式18:中断和异常的处理与抢占式多任务
  8. visual studio哪一款比较好用_电脑桌面上使用的工作便签软件下载哪一款好用?...
  9. CentOS 7安装配置Samba
  10. mac hdmi 不能调整音量_Sound Control for mac(音量控制软件) 最新版
  11. android fresco 存储,Android使用Fresco之下载图片(包括GIF图)
  12. 3款堪称神器的电脑软件,简单又实用
  13. X.U.S.T的《自己搭建IIS找ASP程序漏洞》发表在《黑客X档案》,稿费捐给希望工程
  14. fgo服务器中断020202,fgo2.6版本更新 8月18日更新维护内容一览
  15. 关于原子的电子组态、谱项和精细结构
  16. Linux-you need at least 8.6GB disk space to install Ubuntu,this computer has only 8GB
  17. python识别屏幕内容_python之屏幕抓取
  18. addClass、removeClass、toggleClass属性(方法)
  19. 【Element-ui】el-table大数据量渲染卡顿问题
  20. SQLAlchemy中的Django风格的数据库路由器

热门文章

  1. python 时间戳转iso 8601_Python中的ISO时间(ISO 8601)
  2. 第十四届全国大学生电工数学建模竞赛A题-高比例风电电力系统储能运行及配置分析
  3. matlab删除连通域面积_matlab连通域处理函数
  4. 桌面下面有计算机 网络,台式电脑怎么连接手机网络 桌面下方的任务栏会自动弹出...
  5. MBA联考-20101215
  6. 运维老兵对运维中常见技术类问题剖析
  7. dllimport和dllexport作用与区别
  8. linux的C开发工具
  9. 最牛逼的大数据视频讲解
  10. 电子纸驱动IC停在BUSY状态的处理办法(大连佳显)