gpt4 book ai didi

android - InAppPurchase 验证和独立的游戏逻辑服务器

转载 作者:IT老高 更新时间:2023-10-28 23:06:51 26 4
gpt4 key购买 nike

我正在使用 Unity 开发一个应用程序(适用于 Android 和 iOS)。我正在使用 SOOMLA 插件来允许用户通过 In App Purchase 购买 Gems(虚拟货币)。

用户和 gem 以及所有其他游戏逻辑都通过我在 Azure 上的服务器。

我希望以某种方式将以下过程作为单个事务进行:

  1. 用户通过 IAP 购买 gem
  2. 应用通知服务器
  3. 服务器验证购买并更新数据

但如果互联网连接在第 1 步和第 2 步之间中断 - 用户支付了他没有收到的 gem (不好!)

所以我目前的做法是这样的:

  1. 用户发起购买
  2. 应用通知服务器
  3. 服务器相应地盲目更新数据
  4. 用户通过 IAP 购买 gem
  5. 如果购买被取消,通知服务器撤消它

这样,用户可以保证得到他购买的 gem ,但我不能保证得到报酬(不是很好......)

注意: 我不想在商店本身管理用户 gem 。我希望一切都在我自己的服务器上。所以 SOOMLA 的平衡对我来说毫无意义。我不在乎。

我在想也许应用程序可以将购买数据存储在持久存储中,直到它设法通知服务器,然后将其删除。但我也认为这可能是一个糟糕的解决方案。因此提出了这个问题。


我认为最好的解决方案可以正确处理这种情况:

  1. 用户通过 IAP 购买 gem
  2. IAP 成功
  3. 互联网出现故障
  4. 我自己的服务器没有收到通知
  5. 用户从他的设备上卸载应用程序
  6. 然后用户可以在其他设备上安装应用程序:

    • 要么他被指控,要么他通过某种魔法得到了 gem
    • 或者他被自动退款,因为没有收到 gem

到目前为止,这似乎无论如何都是不可能的,这让我对 IAP 的技术感到失望。希望得到能证明我错的答案。


似乎我所需要的只是能够从我的服务器获取用户的购买历史记录,以及对 Google Play 或 Apple Store 的安全请求。但这不是框架的一部分。


那么其他人在做什么呢?最好的方法是什么?

最佳答案

一般来说,您似乎受到 Two Generals' Problem 的影响。这是

the first computer communication problem to be proved to be unsolvable.

由于您的通信协议(protocol)中的任何地方都可能丢失消息(甚至是确认或确认的确认或...),您无法 100% 确定通信双方(用户设备和您的服务器)已同意在同一个状态。只能说状态信息交换成功的概率是一定的。

如果有足够的数量达到低谷,我会来回发送几个 ACK​​ 并存储购买。引用自维基百科:

Also, the first general can send a marking on each message saying it is message 1, 2, 3 ... of n. This method will allow the second general to know how reliable the channel is and send an appropriate number of messages back to ensure a high probability of at least one message being received

为了让客户满意,我会采取有利于他们的赔率 - 1% 的未交付 cargo 会给您带来很多麻烦,但您这边 1% 的损失是可以接受的。

关于android - InAppPurchase 验证和独立的游戏逻辑服务器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35187059/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com