您当然可以使用gdx pay(链接)。
但是,我更喜欢自己完成所有这些工作。
在添加任何代码之前,我想表达的事实是,这可以通过需要调用特定于操作系统的代码来完成。
在开始之前,请确保您拥有应用内计费的.aidl文件,并具有适当的权限。
首先,我们需要在核心中创建一个接口:
public interface IabWrapper {
boolean connect();
Result buyProduct(String SKU, boolean consumeInstantly);
}
并且结果:
public class Result {
boolean purchaseSuceeded;//If the purchase succeeded
String sku;//The SKU
boolean didConsumeSucceed;//If consumable, did it succeed. Just set it to "true" if it doesn't cusome
//Here you can add constructors, other data, whatever you need
}
现在,在您的Android项目中,您创建一个实现IabWrapper的类。添加一个构造函数,其中包含您需要的所有IAB内容。您还可以将其添加到您使用的任何其他平台上。
此时,您应该有:
- 在核心模块中一个名为IabWrapper的类
- 在核心模块中一个名为Result的类
- 在Android模块中实现IabWrapper的类
这样做的优点是,现在您可以按照
android文档或其他文档/教程设置应用内计费。将其转换为您在IabWrapper中添加的方法,然后您可以遵循Android文档来实现它。
现在,一旦您在Android项目中创建了iab代码,您需要打开在核心项目中初始化的类。在那里,您可以添加一个构造函数,其中包含以下内容之一:
- 一个包装器参数
- 带有您拥有的所有其他包装器的包装器参数(如果您有任何)(我使用此方法,但我有3-4个包装器,并且我预计在完成我的游戏时会达到6个)。
当然,您需要从桌面项目、iOS项目、Android项目或其他任何项目中传递包装器。
因为它是一个接口,您在构造函数中定义它为
IabWrapper
,每个平台都需要提供实现该接口的类,并使用适当的方法处理应用内购买。
根据
此问题,我还建议您添加一个回调类来检查应用内购买是否有更新。Android 是异步的网络调用,除非您更改(我已经忘记了,但有一个字段允许您在主线程上进行网络调用,但通常会导致 ANR,因为您会阻塞主线程)。
因此,在您的渲染中,您可以添加类似以下内容的代码:
if(purchaseRequested && !callback.response()){
//What can you do, there is a purchase requested you are waiting for.
}else if(purchaseRequested && callback.response(){
//This is where you would process the response, add whatever is purchased, save, unlock content, whatever the in app purchase does
}
如果您不知道如何处理Android操作系统,或者认为这种方法看起来过于复杂,我建议您使用gdx pay代替。
接下来我想回到一开始提到的话题,这种技术可以应用于任何需要特定操作系统的事情。你在核心中创建一个接口,在其他项目中重写它并将其传递给核心类。然后调用包装器,因为它是一个接口,所以会调用实现该类的类