Android 不适用于采购验证和验证;游戏逻辑的独立服务器
我正在使用Unity(Android和iOS)开发一个应用程序。我使用SOOMLA插件允许用户通过应用内购买购买Gems(虚拟货币) 用户、Gems和所有其他游戏逻辑都通过Azure上的我的服务器 我希望以下过程以某种方式作为单个事务进行:Android 不适用于采购验证和验证;游戏逻辑的独立服务器,android,ios,in-app-purchase,in-app-billing,soomla,Android,Ios,In App Purchase,In App Billing,Soomla,我正在使用Unity(Android和iOS)开发一个应用程序。我使用SOOMLA插件允许用户通过应用内购买购买Gems(虚拟货币) 用户、Gems和所有其他游戏逻辑都通过Azure上的我的服务器 我希望以下过程以某种方式作为单个事务进行: 用户通过IAP购买宝石 应用程序通知服务器 服务器验证购买并更新数据 但是,如果互联网连接在第1步和第2步之间出现故障-用户为他没有收到的宝石付费(不好!) 因此,我目前的做法是: 用户发起购买 应用程序通知服务器 服务器盲目地相应地更新数据 用户通过IAP
我认为最好的解决方案是能够正确处理这种情况的:
- 要么他被指控,要么他用魔法得到了宝石
- 或者他被自动退款,因为宝石没有收到
似乎我所需要的只是能够从我的服务器获取用户的购买历史记录,并向Google Play或Apple Store发出安全请求。但这并不是框架的一部分。
那么其他人在做什么呢?最好的方法是什么?一般来说,您似乎受到了 第一个被证明是无法解决的计算机通信问题 由于通信协议中的任何地方都可能丢失消息(即使是确认或确认的确认或…),因此您无法100%确定通信双方(用户设备和服务器)已同意相同的状态。您只能说,在一定的概率下,状态信息已成功交换 如果有足够的数量,我会来回发送一些ACK并存储购买的物品。引自维基百科: 而且,第一位将军可以在每条信息上打上标记,说这是信息1、2、3。。。n。此方法将允许第二位将军知道信道的可靠性,并发送适当数量的消息,以确保至少有一条消息被接收的高概率 为了让客户满意,我会对他们有利——1%的未交货货物会给你带来很多麻烦,但你方1%的损失是可以接受的。一些建议:
我对android不太了解,但在阅读了你的帖子后,我真的很感兴趣,想深入搜索类似于应用程序购买逻辑中的部族冲突,以及如何防止自由假冒购买黑客 在做了一些研究之后,我想分享我对您的问题的想法,您可以通过以下方法来实施它: 让您的应用内购买验证完全在线。例如,你可以考虑部族的游戏冲突。 工作原理: 1) 游戏加载,与服务器同步。需要网络连接,因为网络连接中断了从服务器重新加载的游戏 2) 用户有10颗宝石,服务器也有10颗宝石 3) 用户购买的gems,服务器分别验证购买的耗材的购买情况,gems记入用户帐户 4) 若在can网络出现故障的情况下,服务器也可以验证购买情况,然后在用户帐户中更新购买情况,无论它是否在任何设备上 5) 这也将帮助您绕过许多假冒的应用程序内购买黑客,如()和 谷歌为服务器端提供api以验证或获取购买详细信息,当从应用程序端和服务器端购买匹配时,只有您将宝石或消耗品记入用户帐户 有关应用内购买及其黑客防范的更多信息,请访问以下链接: 1) 和 2) 3) 4) 希望这能让你明白我的意思
Purchase product or Restore purchases
While consumable purchases > 0
Send purchase receipt to API
If response is ok
If purchase is valid
Consume product
Allocate gems
Break
Else
Remove retroactive gem allocation
Discipline the naughty user
Break
Else
Retroactively allocate un-spendable gems
Pause process until network is re-established
Re-send receipt to API