|
@@ -1,5 +1,5 @@
|
|
/*************************************************************************/
|
|
/*************************************************************************/
|
|
-/* GodotPaymentV3.java */
|
|
|
|
|
|
+/* GodotPayment.java */
|
|
/*************************************************************************/
|
|
/*************************************************************************/
|
|
/* This file is part of: */
|
|
/* This file is part of: */
|
|
/* GODOT ENGINE */
|
|
/* GODOT ENGINE */
|
|
@@ -28,20 +28,24 @@
|
|
/* SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. */
|
|
/* SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. */
|
|
/*************************************************************************/
|
|
/*************************************************************************/
|
|
|
|
|
|
-package org.godotengine.godot;
|
|
|
|
|
|
+package org.godotengine.godot.plugin.payment;
|
|
|
|
|
|
-import android.app.Activity;
|
|
|
|
|
|
+import android.support.annotation.NonNull;
|
|
import android.util.Log;
|
|
import android.util.Log;
|
|
import java.util.ArrayList;
|
|
import java.util.ArrayList;
|
|
import java.util.Arrays;
|
|
import java.util.Arrays;
|
|
import java.util.List;
|
|
import java.util.List;
|
|
|
|
+import org.godotengine.godot.Dictionary;
|
|
|
|
+import org.godotengine.godot.Godot;
|
|
|
|
+import org.godotengine.godot.GodotLib;
|
|
|
|
+import org.godotengine.godot.payments.GodotPaymentInterface;
|
|
import org.godotengine.godot.payments.PaymentsManager;
|
|
import org.godotengine.godot.payments.PaymentsManager;
|
|
|
|
+import org.godotengine.godot.plugin.GodotPlugin;
|
|
import org.json.JSONException;
|
|
import org.json.JSONException;
|
|
import org.json.JSONObject;
|
|
import org.json.JSONObject;
|
|
|
|
|
|
-public class GodotPaymentV3 extends Godot.SingletonBase {
|
|
|
|
|
|
+public class GodotPayment extends GodotPlugin implements GodotPaymentInterface {
|
|
|
|
|
|
- private Godot activity;
|
|
|
|
private Integer purchaseCallbackId = 0;
|
|
private Integer purchaseCallbackId = 0;
|
|
private String accessToken;
|
|
private String accessToken;
|
|
private String purchaseValidationUrlPrefix;
|
|
private String purchaseValidationUrlPrefix;
|
|
@@ -49,8 +53,15 @@ public class GodotPaymentV3 extends Godot.SingletonBase {
|
|
private PaymentsManager mPaymentManager;
|
|
private PaymentsManager mPaymentManager;
|
|
private Dictionary mSkuDetails = new Dictionary();
|
|
private Dictionary mSkuDetails = new Dictionary();
|
|
|
|
|
|
|
|
+ public GodotPayment(Godot godot) {
|
|
|
|
+ super(godot);
|
|
|
|
+ mPaymentManager = godot.getPaymentsManager();
|
|
|
|
+ mPaymentManager.setBaseSingleton(this);
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ @Override
|
|
public void purchase(final String sku, final String transactionId) {
|
|
public void purchase(final String sku, final String transactionId) {
|
|
- activity.runOnUiThread(new Runnable() {
|
|
|
|
|
|
+ runOnUiThread(new Runnable() {
|
|
@Override
|
|
@Override
|
|
public void run() {
|
|
public void run() {
|
|
mPaymentManager.requestPurchase(sku, transactionId);
|
|
mPaymentManager.requestPurchase(sku, transactionId);
|
|
@@ -58,21 +69,9 @@ public class GodotPaymentV3 extends Godot.SingletonBase {
|
|
});
|
|
});
|
|
}
|
|
}
|
|
|
|
|
|
- static public Godot.SingletonBase initialize(Activity p_activity) {
|
|
|
|
-
|
|
|
|
- return new GodotPaymentV3(p_activity);
|
|
|
|
- }
|
|
|
|
-
|
|
|
|
- public GodotPaymentV3(Activity p_activity) {
|
|
|
|
-
|
|
|
|
- registerClass("GodotPayments", new String[] { "purchase", "setPurchaseCallbackId", "setPurchaseValidationUrlPrefix", "setTransactionId", "getSignature", "consumeUnconsumedPurchases", "requestPurchased", "setAutoConsume", "consume", "querySkuDetails", "isConnected" });
|
|
|
|
- activity = (Godot)p_activity;
|
|
|
|
- mPaymentManager = activity.getPaymentsManager();
|
|
|
|
- mPaymentManager.setBaseSingleton(this);
|
|
|
|
- }
|
|
|
|
-
|
|
|
|
|
|
+ @Override
|
|
public void consumeUnconsumedPurchases() {
|
|
public void consumeUnconsumedPurchases() {
|
|
- activity.runOnUiThread(new Runnable() {
|
|
|
|
|
|
+ runOnUiThread(new Runnable() {
|
|
@Override
|
|
@Override
|
|
public void run() {
|
|
public void run() {
|
|
mPaymentManager.consumeUnconsumedPurchases();
|
|
mPaymentManager.consumeUnconsumedPurchases();
|
|
@@ -82,74 +81,91 @@ public class GodotPaymentV3 extends Godot.SingletonBase {
|
|
|
|
|
|
private String signature;
|
|
private String signature;
|
|
|
|
|
|
|
|
+ @Override
|
|
public String getSignature() {
|
|
public String getSignature() {
|
|
return this.signature;
|
|
return this.signature;
|
|
}
|
|
}
|
|
|
|
|
|
|
|
+ @Override
|
|
public void callbackSuccess(String ticket, String signature, String sku) {
|
|
public void callbackSuccess(String ticket, String signature, String sku) {
|
|
GodotLib.calldeferred(purchaseCallbackId, "purchase_success", new Object[] { ticket, signature, sku });
|
|
GodotLib.calldeferred(purchaseCallbackId, "purchase_success", new Object[] { ticket, signature, sku });
|
|
}
|
|
}
|
|
|
|
|
|
|
|
+ @Override
|
|
public void callbackSuccessProductMassConsumed(String ticket, String signature, String sku) {
|
|
public void callbackSuccessProductMassConsumed(String ticket, String signature, String sku) {
|
|
Log.d(this.getClass().getName(), "callbackSuccessProductMassConsumed > " + ticket + "," + signature + "," + sku);
|
|
Log.d(this.getClass().getName(), "callbackSuccessProductMassConsumed > " + ticket + "," + signature + "," + sku);
|
|
GodotLib.calldeferred(purchaseCallbackId, "consume_success", new Object[] { ticket, signature, sku });
|
|
GodotLib.calldeferred(purchaseCallbackId, "consume_success", new Object[] { ticket, signature, sku });
|
|
}
|
|
}
|
|
|
|
|
|
|
|
+ @Override
|
|
public void callbackSuccessNoUnconsumedPurchases() {
|
|
public void callbackSuccessNoUnconsumedPurchases() {
|
|
GodotLib.calldeferred(purchaseCallbackId, "consume_not_required", new Object[] {});
|
|
GodotLib.calldeferred(purchaseCallbackId, "consume_not_required", new Object[] {});
|
|
}
|
|
}
|
|
|
|
|
|
|
|
+ @Override
|
|
public void callbackFailConsume(String message) {
|
|
public void callbackFailConsume(String message) {
|
|
GodotLib.calldeferred(purchaseCallbackId, "consume_fail", new Object[] { message });
|
|
GodotLib.calldeferred(purchaseCallbackId, "consume_fail", new Object[] { message });
|
|
}
|
|
}
|
|
|
|
|
|
|
|
+ @Override
|
|
public void callbackFail(String message) {
|
|
public void callbackFail(String message) {
|
|
GodotLib.calldeferred(purchaseCallbackId, "purchase_fail", new Object[] { message });
|
|
GodotLib.calldeferred(purchaseCallbackId, "purchase_fail", new Object[] { message });
|
|
}
|
|
}
|
|
|
|
|
|
|
|
+ @Override
|
|
public void callbackCancel() {
|
|
public void callbackCancel() {
|
|
GodotLib.calldeferred(purchaseCallbackId, "purchase_cancel", new Object[] {});
|
|
GodotLib.calldeferred(purchaseCallbackId, "purchase_cancel", new Object[] {});
|
|
}
|
|
}
|
|
|
|
|
|
|
|
+ @Override
|
|
public void callbackAlreadyOwned(String sku) {
|
|
public void callbackAlreadyOwned(String sku) {
|
|
GodotLib.calldeferred(purchaseCallbackId, "purchase_owned", new Object[] { sku });
|
|
GodotLib.calldeferred(purchaseCallbackId, "purchase_owned", new Object[] { sku });
|
|
}
|
|
}
|
|
|
|
|
|
|
|
+ @Override
|
|
public int getPurchaseCallbackId() {
|
|
public int getPurchaseCallbackId() {
|
|
return purchaseCallbackId;
|
|
return purchaseCallbackId;
|
|
}
|
|
}
|
|
|
|
|
|
|
|
+ @Override
|
|
public void setPurchaseCallbackId(int purchaseCallbackId) {
|
|
public void setPurchaseCallbackId(int purchaseCallbackId) {
|
|
this.purchaseCallbackId = purchaseCallbackId;
|
|
this.purchaseCallbackId = purchaseCallbackId;
|
|
}
|
|
}
|
|
|
|
|
|
|
|
+ @Override
|
|
public String getPurchaseValidationUrlPrefix() {
|
|
public String getPurchaseValidationUrlPrefix() {
|
|
return this.purchaseValidationUrlPrefix;
|
|
return this.purchaseValidationUrlPrefix;
|
|
}
|
|
}
|
|
|
|
|
|
|
|
+ @Override
|
|
public void setPurchaseValidationUrlPrefix(String url) {
|
|
public void setPurchaseValidationUrlPrefix(String url) {
|
|
this.purchaseValidationUrlPrefix = url;
|
|
this.purchaseValidationUrlPrefix = url;
|
|
}
|
|
}
|
|
|
|
|
|
|
|
+ @Override
|
|
public String getAccessToken() {
|
|
public String getAccessToken() {
|
|
return accessToken;
|
|
return accessToken;
|
|
}
|
|
}
|
|
|
|
|
|
|
|
+ @Override
|
|
public void setAccessToken(String accessToken) {
|
|
public void setAccessToken(String accessToken) {
|
|
this.accessToken = accessToken;
|
|
this.accessToken = accessToken;
|
|
}
|
|
}
|
|
|
|
|
|
|
|
+ @Override
|
|
public void setTransactionId(String transactionId) {
|
|
public void setTransactionId(String transactionId) {
|
|
this.transactionId = transactionId;
|
|
this.transactionId = transactionId;
|
|
}
|
|
}
|
|
|
|
|
|
|
|
+ @Override
|
|
public String getTransactionId() {
|
|
public String getTransactionId() {
|
|
return this.transactionId;
|
|
return this.transactionId;
|
|
}
|
|
}
|
|
|
|
|
|
// request purchased items are not consumed
|
|
// request purchased items are not consumed
|
|
|
|
+ @Override
|
|
public void requestPurchased() {
|
|
public void requestPurchased() {
|
|
- activity.runOnUiThread(new Runnable() {
|
|
|
|
|
|
+ runOnUiThread(new Runnable() {
|
|
@Override
|
|
@Override
|
|
public void run() {
|
|
public void run() {
|
|
mPaymentManager.requestPurchased();
|
|
mPaymentManager.requestPurchased();
|
|
@@ -158,34 +174,41 @@ public class GodotPaymentV3 extends Godot.SingletonBase {
|
|
}
|
|
}
|
|
|
|
|
|
// callback for requestPurchased()
|
|
// callback for requestPurchased()
|
|
|
|
+ @Override
|
|
public void callbackPurchased(String receipt, String signature, String sku) {
|
|
public void callbackPurchased(String receipt, String signature, String sku) {
|
|
GodotLib.calldeferred(purchaseCallbackId, "has_purchased", new Object[] { receipt, signature, sku });
|
|
GodotLib.calldeferred(purchaseCallbackId, "has_purchased", new Object[] { receipt, signature, sku });
|
|
}
|
|
}
|
|
|
|
|
|
|
|
+ @Override
|
|
public void callbackDisconnected() {
|
|
public void callbackDisconnected() {
|
|
GodotLib.calldeferred(purchaseCallbackId, "iap_disconnected", new Object[] {});
|
|
GodotLib.calldeferred(purchaseCallbackId, "iap_disconnected", new Object[] {});
|
|
}
|
|
}
|
|
|
|
|
|
|
|
+ @Override
|
|
public void callbackConnected() {
|
|
public void callbackConnected() {
|
|
GodotLib.calldeferred(purchaseCallbackId, "iap_connected", new Object[] {});
|
|
GodotLib.calldeferred(purchaseCallbackId, "iap_connected", new Object[] {});
|
|
}
|
|
}
|
|
|
|
|
|
// true if connected, false otherwise
|
|
// true if connected, false otherwise
|
|
|
|
+ @Override
|
|
public boolean isConnected() {
|
|
public boolean isConnected() {
|
|
return mPaymentManager.isConnected();
|
|
return mPaymentManager.isConnected();
|
|
}
|
|
}
|
|
|
|
|
|
// consume item automatically after purchase. default is true.
|
|
// consume item automatically after purchase. default is true.
|
|
|
|
+ @Override
|
|
public void setAutoConsume(boolean autoConsume) {
|
|
public void setAutoConsume(boolean autoConsume) {
|
|
mPaymentManager.setAutoConsume(autoConsume);
|
|
mPaymentManager.setAutoConsume(autoConsume);
|
|
}
|
|
}
|
|
|
|
|
|
// consume a specific item
|
|
// consume a specific item
|
|
|
|
+ @Override
|
|
public void consume(String sku) {
|
|
public void consume(String sku) {
|
|
mPaymentManager.consume(sku);
|
|
mPaymentManager.consume(sku);
|
|
}
|
|
}
|
|
|
|
|
|
// query in app item detail info
|
|
// query in app item detail info
|
|
|
|
+ @Override
|
|
public void querySkuDetails(String[] list) {
|
|
public void querySkuDetails(String[] list) {
|
|
List<String> nKeys = Arrays.asList(list);
|
|
List<String> nKeys = Arrays.asList(list);
|
|
List<String> cKeys = Arrays.asList(mSkuDetails.get_keys());
|
|
List<String> cKeys = Arrays.asList(mSkuDetails.get_keys());
|
|
@@ -202,6 +225,7 @@ public class GodotPaymentV3 extends Godot.SingletonBase {
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
|
|
|
|
+ @Override
|
|
public void addSkuDetail(String itemJson) {
|
|
public void addSkuDetail(String itemJson) {
|
|
JSONObject o = null;
|
|
JSONObject o = null;
|
|
try {
|
|
try {
|
|
@@ -220,11 +244,25 @@ public class GodotPaymentV3 extends Godot.SingletonBase {
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
|
|
|
|
+ @Override
|
|
public void completeSkuDetail() {
|
|
public void completeSkuDetail() {
|
|
GodotLib.calldeferred(purchaseCallbackId, "sku_details_complete", new Object[] { mSkuDetails });
|
|
GodotLib.calldeferred(purchaseCallbackId, "sku_details_complete", new Object[] { mSkuDetails });
|
|
}
|
|
}
|
|
|
|
|
|
|
|
+ @Override
|
|
public void errorSkuDetail(String errorMessage) {
|
|
public void errorSkuDetail(String errorMessage) {
|
|
GodotLib.calldeferred(purchaseCallbackId, "sku_details_error", new Object[] { errorMessage });
|
|
GodotLib.calldeferred(purchaseCallbackId, "sku_details_error", new Object[] { errorMessage });
|
|
}
|
|
}
|
|
|
|
+
|
|
|
|
+ @NonNull
|
|
|
|
+ @Override
|
|
|
|
+ public String getPluginName() {
|
|
|
|
+ return "GodotPayment";
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ @NonNull
|
|
|
|
+ @Override
|
|
|
|
+ public List<String> getPluginMethods() {
|
|
|
|
+ return Arrays.asList("purchase", "setPurchaseCallbackId", "setPurchaseValidationUrlPrefix", "setTransactionId", "getSignature", "consumeUnconsumedPurchases", "requestPurchased", "setAutoConsume", "consume", "querySkuDetails", "isConnected");
|
|
|
|
+ }
|
|
}
|
|
}
|