cocos creator 2.4.9苹果 storeKit2 内购支付问题

问题描述:storeKit1升级到storeKit2内购后,第一个账户登录购买非消耗型项目,传入购买项和uuid,正常拉起支付购买返回transaction id;等切换到一个新账户后,购买会直接显示成功,不会拉起苹果支付项,返回的transaction id是一致的。uuid(组装关联账户Id)作为accountToken传入到交易订单数据。

尝试可能原因:1.第一次支付后交易没有结束,但我明确调用了transaction.finish();
2. 中途swift有异常直接跳出,打了很多日志,显示流程正确。

希望结果:kit2购买都会拉起支付,而不是新的账户直接购买成功。
参考代码:https://github.com/ShenJieSuzhou/PurchaseX 自己搭桥与swift通信

1赞

没找到具体原因,感觉像是支付项恢复了,但是没有恢复提示。
有哪位哥做过,请教下

非消耗型商品确实通常只需购买一次 。这类商品在购买后不会过期或随着使用而减少,用户可以永久拥有其使用权。常见的非消耗型商品包括游戏App中的解锁关卡、隐藏地图等虚拟内容。

一旦用户购买了非消耗型商品,苹果应用商店会记录这次购买,以便用户在不同设备上恢复购买状态。这就是所谓的“Restore”功能,它允许用户在重新安装App或换设备时重新获得已购买的商品,而无需再次支付。

但是我这边的App是可以注销后再用其他账户登录的,也就是说玩家可以用多个登录游戏。
在SKPayment(storeKit1)可以通过回调区分出用户,但是在storeKit2绑定了不同uuid后,第二个账户时没有拉起支付项,再怎么处理也应该把支付项拉起来,服务器再去标记用户,所以搞得有点懵,代码不知道如何去处理了。
单独购买流程很清晰,就是多账户系统支付,还要其他账户拉起支付,区分出来不同用户id。
如果哥有什么思路,求打醒我

在StoreKit 2中,透传字段(appAccountToken)是一个重要的功能,它允许开发者在应用内购买(IAP)过程中传递自定义的用户标识信息。以下是对StoreKit 2透传字段的详细解释:

一、透传字段的作用

透传字段(appAccountToken)允许开发者在发起购买请求时,将自定义的用户标识(如用户ID、订单号等)传递给苹果服务器。这样,在购买成功后,苹果服务器会将这个用户标识包含在返回的票据(JWS格式)中。开发者可以通过解码这个票据,获取到原始的交易ID(originalTransactionId)以及透传字段,从而关联到具体的用户和业务订单。

二、使用透传字段的步骤

  1. 创建购买选项 :在发起购买请求前,开发者需要创建一个购买选项(Product.PurchaseOption),并设置appAccountToken字段为用户自定义的标识信息。这个标识信息可以是UUID、用户ID或其他能够唯一标识用户的字符串。
  2. 发起购买请求 :使用设置好的购买选项,调用产品的purchase方法发起购买请求。苹果服务器会接收这个请求,并处理购买流程。
  3. 处理购买结果 :购买完成后,苹果服务器会返回一个包含票据(JWS格式)的购买结果。开发者需要解码这个票据,提取出原始的交易ID和透传字段。
  4. 关联用户和业务订单 :通过提取出的原始交易ID和透传字段,开发者可以将购买记录关联到具体的用户和业务订单上。这样,就可以在后台系统中查询到用户的购买记录,并进行相应的业务处理。

哥,十分感谢。
我在支付代码前调用
//App account token
//用于将用户 ID 绑定到交易(Transcation)中,即可建立苹果的交易订单数据与用户信息的映射关系,方便数据整合与追溯
let uuid = Product.PurchaseOption.appAccountToken(UUID.init(uuidString: uid)!)
这个uid组装包含了用户ID,但在测试中第二个账户去购买时,沙盒测试不显示苹果拉起来的支付项,就是要个要付款的界面不显示出来。
哥的流程很清晰,第一个用户测试走完了整个流程,第二个用户购买时步骤2的购买流程没有,沙盒没有去支付购买,而直接收到了product.purchase()的成功消息。

你提到的情况确实有可能是因为未正确结束交易或购买流程的处理问题。确保在每次购买后调用 transaction.finish() ,并检查在不同账户之间切换时是否正确传递了 appAccountToken 。此外,确保沙盒环境设置无误,测试时可以尝试使用真实设备而非模拟器,看看是否能复现问题。如果问题仍然存在,可以考虑向苹果开发者支持寻求帮助。