Android一点 谷歌订阅功能开发

1 篇文章 0 订阅
1 篇文章 0 订阅

最近再弄谷歌订阅功能,但是网上资料比较少,经过几天的查阅资料,终于调通了,这里记录一下~

当然你得翻墙才可以进行谷歌储值~

1、先过一下android订阅的文档,添加订阅功能添加实时开发者通知

2、看一下订阅的购买,其实和消费的商品的购买还是有一些差别的,文档上提到确认购买的方式不一样

您可以使用以下某种方法确认购买交易:

  • 对于消耗型商品,请使用客户端 API 中的 consumeAsync()
  • 对于非消耗型商品,请使用客户端 API 中的 acknowledgePurchase()
  • 还可以使用服务器 API 中新增的 acknowledge() 方法。

3、正常的购买流程是 去谷歌查询商品-拉起购买-消费商品,现在订阅的处理流程也是一样,只是消费的方法不一样了。

4、先看一下android这边的处理,看一下查询订阅商品

 SkuDetailsParams.Builder params = SkuDetailsParams.newBuilder();
            params.setType(BillingClient.SkuType.SUBS).setSkusList(skuList);

            this.billingClient.querySkuDetailsAsync(params.build(), mSkuDetailsResponseListener);

这里的类型是 SkuType.SUBS

5、获取商品后拉起购买界面

flowParams = BillingFlowParams.newBuilder()
                            .setSkuDetails(mSkuDetails)
                            .setAccountId(MD5.getMD5(user.getUserid()))
                            .setDeveloperId("xxx")
                            .build();
                    mBillingClient.launchBillingFlow(activity, flowParams);
setSkuDetails为查询回来的商品信息

6、再购买回调回来之后这里就不是走消费了,这里是进行确认购买

mBillingClient.acknowledgePurchase
  AcknowledgePurchaseParams acknowledgePurchaseParams=AcknowledgePurchaseParams.newBuilder()
                    .setPurchaseToken(purchase.getPurchaseToken())
                    .setDeveloperPayload(JSON.toJSONString(mapUser))
                    .build();

            this.mBillingClient.acknowledgePurchase(acknowledgePurchaseParams,acknowledgePurchaseResponseListener);
setDeveloperPayload可以附带用户信息,这里服务端验证的时候可以返回该信息

7、我们打开google play console,找到你的应用,添加订阅商品

 

然后再应用的开发工具 > 服务和 API 页面添加实时开发者通知

设置好商品,这个时候我们就可以拉起购买了

 

8、下面我们按照官网的文档进行配置,转到 Cloud Pub/Sub 找到订阅,这里先建立你的主题,再建立订阅,谷歌推荐使用的是Cloud SDK 进行操作,但是这个也是需要进行账号授权,而我们商品的购买也是需要账号授权的,这里可能会存在账号授权的冲突。我这里是使用另外一种方式,就是 推送通知的方式。下面按文档说明新建一个主题,这样需要注意的是需要添加

添加服务帐号 google-play-developer-notifications@system.gserviceaccount.com,然后授予其 Pub/Sub 发布商的角色。

这里使用推送通知,需要我们设置一个回调url,必须是https的,而且还需要进行网域验证

进去官网文档查看这个推送通知的信息

这个就是谷歌返回的数据格式,这个一个json数据,所以再我们的接口部分是接收这个json数据的

@RequestMapping("subs")
	@ResponseBody
	private String hello(HttpServletRequest request, HttpServletResponse response) {

		BufferedReader br;
		try {
			br = new BufferedReader(new InputStreamReader((ServletInputStream) request.getInputStream(), "utf-8"));
			StringBuffer sb = new StringBuffer("");
			String temp;
			while ((temp = br.readLine()) != null) { 
			  sb.append(temp);
			}
			br.close();
			String params = sb.toString();
			System.out.println("订阅通知返回数据:"+params);
		} catch (Exception e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		} 
		


		return "success";
	}

拿回数据,我们主要看message.data 字段,这里是base64,需要进行解码,数据如下

{
	"version": "1.0",
	"packageName": "com.xxx.xxx",
	"eventTimeMillis": "1584599417527",
	"subscriptionNotification": {
		"version": "1.0",
		"notificationType": 4,
		"purchaseToken": "keabnnlchgojgoachoomdhnk.AO-J1OzrDU_Z47_lCAog3-xpViHTFzmzghAkYRZ4YaZjDxO7jTe3Qm9oCzSaT1RDwxjznRiAJ3iYacVJKoo0yjrgpkOEX14jnokh_mk",
		"subscriptionId": "hskd_subs01"
	}
}

 

purchaseToken就是购买的令牌了

notificationType为订阅通知的类型

通知的类型。它可以具有以下值:

(1) SUBSCRIPTION_RECOVERED - 从帐号保留状态恢复了订阅。
(2) SUBSCRIPTION_RENEWED - 续订了处于活动状态的订阅。
(3) SUBSCRIPTION_CANCELED - 自愿或非自愿地取消了订阅。如果是自愿取消,在用户取消时发送。
(4) SUBSCRIPTION_PURCHASED - 购买了新的订阅。
(5) SUBSCRIPTION_ON_HOLD - 订阅已进入帐号保留状态(如已启用)。
(6) SUBSCRIPTION_IN_GRACE_PERIOD - 订阅已进入宽限期(如已启用)。
(7) SUBSCRIPTION_RESTARTED - 用户已通过“Play”>“帐号”>“订阅”重新激活其订阅(需要选择使用订阅恢复功能)。
(8) SUBSCRIPTION_PRICE_CHANGE_CONFIRMED - 用户已成功确认订阅价格变动。
(9) SUBSCRIPTION_DEFERRED - 订阅的续订时间点已延期。
(10) SUBSCRIPTION_PAUSED - 订阅已暂停。
(11) SUBSCRIPTION_PAUSE_SCHEDULE_CHANGED - 订阅暂停计划已更改。
(12) SUBSCRIPTION_REVOKED - 用户在有效时间结束前已撤消订阅。
(13) SUBSCRIPTION_EXPIRED - 订阅已过期。

拿到购买令牌就可以再服务器端进行订单的验证了,订阅验证 

这里每次对比expiryTimeMillis的有效时间即可

评论 8
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值