安卓集成google内支付
Google Play Console创建应用
我的应用是后台人员完成的,具体的可以参考Google Play Console创建应用其中需要注意的是添加测试人员只是测试APK包,需要进行内支付测试则需要添加可用于测试的Google账号,添加了之后此账号在这apk中测试则不是真实支付,不会扣钱。
导入工具类
在 Android Studio 中打开Android SDK Manager(在Tools–>Android 里面),找到并安装Google Play Billing Library这一项。
- 在 Android Studio 中打开Android SDK Manager(在Tools–>Android 里面),找到并安装Google Play Billing Library这一项。
- 如果 Android Studio 中没有Google Play Billing Library这一项,就直接下载百度网盘提取码:hu15
- 项目中导入IInAppBillingService.aidl文件
- 导入之后在Build中点击Make Project
你会发现在在根目录下会生成该文件的接口
- 将其他google支付的工具放进自己项目
现在准备工作已经完成,接下来就是支付的实现
实现客户端google内支付
- 添加google支付的权限
<uses-permission android:name="com.android.vending.BILLING"></uses-permission>
- 初始化 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();}}});}.........}
- 查询是否有需要消耗的商品的监听
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;}}};
- 消耗已购买商品的监听
IabHelper.OnConsumeFinishedListener mConsumeFinishedListener = new IabHelper.OnConsumeFinishedListener() {@Overridepublic void onConsumeFinished(Purchase purchase, IabResult result) {LogUtil.i("DDDDDD", result);}};
- 购买是否成功的监听
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();}}};
- 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
}
- 发起购买
mHelper.launchPurchaseFlow(getActivity(),"商品ID:sku", RC_REQUEST(自己定义一个请求码,随便写), mPurchaseFinishedListener, "自己传给google的数据,可以不传");
- 最后在退出页面时还需要将mHelper给关闭
@Overridepublic void onDestroy() {super.onDestroy();if (mHelper != null) {try {mHelper.dispose();mHelper = null;} catch (IabHelper.IabAsyncInProgressException e) {e.printStackTrace();}}}
关于测试中遇到的问题
这些问题导致的原因可能为:
- 与google play 上发布的版本code不一致
- 包的签名不一致
- 未在google后台配置相应的内购商品
- 你在google上传的apk未发布
- 商品id错误
- 测试账号的支付设置地区一定不能设为大陆,设置为香港都行
- 调取的是默认gmail账号付款,保证此账号不是在google play创建应用的账号
成功后的页面
到此就将google支付接入完毕了,可能还有些细节没有写到,我也只是一枚新手,代码风格不太好,还在改进,请见谅
安卓集成google内支付相关推荐
- 安卓集成Google Play支付(谷歌支付)最新版本
Google Play 支付文档:https://developer.android.com/google/play/billing/integrate Google Play 支付库已经升级到5.0 ...
- 安卓集成Google登录并进一步获取性别生日手机号等信息
由于公司做海外产品需接入Google三方登录,并且登录后除获取邮箱,用户名和用户id等基本信息外还要获取用户的性别年龄甚至手机号等信息.后面的需求实现起来就有点坑了,主要原因:Google的文档写得真 ...
- Google in app billing 应用内支付
一 简介 Google in app billing 是google play 商店的应用内支付,他是一种应用内的虚拟的道具支付服务,支持应用内支付(inapp)和订阅(subs)两种模式; 在中国, ...
- Google play billing(Google play 内支付) 上篇
写在前面: 最近Google貌似又被全面封杀了,幸好在此之前,把Google play billing弄完了,现在写篇 博客来做下记录.这篇博客一是自己做个记录,二是帮助其他有需要的人.因为现在基本登 ...
- 接入华为应用内支付,验证购买Token接口,返回“rights invalid”
有海外开发者向我们提问:我在应用中集成了华为应用内支付SDK(测试购买订阅型商品),按照文档说明,在服务器去请求验证购买Token接口的时候返回了{"responseCode":& ...
- 【FAQ】接入HMS Core应用内支付服务过程中一些常见问题总结(2)
HMS Core应用内支付服务(In-App Purchases,IAP)为应用提供便捷的应用内支付体验和简便的接入流程.该服务支持客户端和服务端两种开发形式,具体可以参考官方文档 上次,我们分享和总 ...
- 接入HMS Core应用内支付服务过程中一些常见问题总结
华为HMS Core应用内支付服务(In-App Purchases,IAP)为应用提供便捷的应用内支付体验和简便的接入流程.该服务支持客户端和服务端两种开发形式,具体可以参考官方文档. 往期文章:常 ...
- 【FAQ】接入华为应用内支付服务常见问题解答
HMS Core应用内支付服务(In-App Purchases,IAP)为应用提供便捷的应用内支付体验和简便的接入流程.开发者的应用集成IAP SDK后,调用IAP SDK接口,启动IAP收银台,即 ...
- 集成Google应用内 支付 或者 订阅
要集成Google应用内支付 先要了解文档 集成文档: https://developer.android.google.cn/google/play/billing/integrate 1.创建Go ...
最新文章
- R语言ggplot2可视化、不同分组使用不同的色彩、同一分组(group)的线条使用相同的色彩但是配置使用不同的线型(line type)
- [LUOGU] P2330 [SCOI2005]繁忙的都市
- [Redis]Redis章2 Redis 持久化
- 现代谱估计:多窗口谱
- java文件操作大全
- Python学习之路和隐藏特征
- X86汇编语言从实模式到保护模式18:中断和异常的处理与抢占式多任务
- visual studio哪一款比较好用_电脑桌面上使用的工作便签软件下载哪一款好用?...
- CentOS 7安装配置Samba
- mac hdmi 不能调整音量_Sound Control for mac(音量控制软件) 最新版
- android fresco 存储,Android使用Fresco之下载图片(包括GIF图)
- 3款堪称神器的电脑软件,简单又实用
- X.U.S.T的《自己搭建IIS找ASP程序漏洞》发表在《黑客X档案》,稿费捐给希望工程
- fgo服务器中断020202,fgo2.6版本更新 8月18日更新维护内容一览
- 关于原子的电子组态、谱项和精细结构
- Linux-you need at least 8.6GB disk space to install Ubuntu,this computer has only 8GB
- python识别屏幕内容_python之屏幕抓取
- addClass、removeClass、toggleClass属性(方法)
- 【Element-ui】el-table大数据量渲染卡顿问题
- SQLAlchemy中的Django风格的数据库路由器
热门文章
- python 时间戳转iso 8601_Python中的ISO时间(ISO 8601)
- 第十四届全国大学生电工数学建模竞赛A题-高比例风电电力系统储能运行及配置分析
- matlab删除连通域面积_matlab连通域处理函数
- 桌面下面有计算机 网络,台式电脑怎么连接手机网络 桌面下方的任务栏会自动弹出...
- MBA联考-20101215
- 运维老兵对运维中常见技术类问题剖析
- dllimport和dllexport作用与区别
- linux的C开发工具
- 最牛逼的大数据视频讲解
- 电子纸驱动IC停在BUSY状态的处理办法(大连佳显)