diff --git a/project.xml b/project.xml
index 1558b16..b738f87 100644
--- a/project.xml
+++ b/project.xml
@@ -15,7 +15,7 @@
+
-
\ No newline at end of file
diff --git a/src/IAPHandler.hx b/src/IAPHandler.hx
index f27f49a..0f305ca 100644
--- a/src/IAPHandler.hx
+++ b/src/IAPHandler.hx
@@ -22,6 +22,7 @@ class IAPHandler
public var requestReceiptsCall:Dynamic;
public var getReceiptProductIDsCall:Dynamic;
public var requestPurchaseCall:Dynamic;
+ public var getLastPurchasedProductIDCall:Dynamic;
public var ouyaFacadeObject:Dynamic;
public function new( ouyaFacadeObject:Dynamic, DERKeyPath:String )
@@ -44,6 +45,8 @@ class IAPHandler
("com.jarnik.iaptest.OUYA_IAP", "getReceiptProductIDs", "()Ljava/lang/String;", true);
requestPurchaseCall = openfl.utils.JNI.createStaticMethod
("com.jarnik.iaptest.OUYA_IAP", "requestPurchase", "(Ljava/lang/String;)V", true);
+ getLastPurchasedProductIDCall = openfl.utils.JNI.createStaticMethod
+ ("com.jarnik.iaptest.OUYA_IAP", "getLastPurchasedProductID", "()Ljava/lang/String;", true);
trace("=================== JNI methods linked!");
var appKey:ByteArray = Assets.getBytes( DERKeyPath );
@@ -73,14 +76,15 @@ class IAPHandler
requestReceiptsCall( [] );
}
- public function getProductListIDs():String {
- // will return list of received product identifiers, delimited by space character
- return getProductListIDsCall();
+ // I don't know how to send any values from JNI back to Haxe, therefore I use the getters
+ public function getLastPurchasedProductID():String {
+ return getLastPurchasedProductIDCall();
}
-
- public function getReceiptProductIDs():String {
- // will return list of purchased products identifiers, delimited by space character
- return getReceiptProductIDsCall();
+ public function getProductListIDs():Array {
+ return getProductListIDsCall().split(" ");
+ }
+ public function getReceiptProductIDs():Array {
+ return getReceiptProductIDsCall().split(" ");
}
// ==================================== CALLBACKS - OVERRIDE THESE! =======================
@@ -88,7 +92,7 @@ class IAPHandler
// ==== Product List
public function onProductListReceived()
{
- var p:Array = getProductListIDs().split(" ");
+ var p:Array = getProductListIDs();
trace("=== onProductListReceived! " + p.join(" "));
requestReceipts();
@@ -99,9 +103,9 @@ class IAPHandler
}
// ==== Purchasing
- public function onPurchaseSuccess(productID:String)
+ public function onPurchaseSuccess()
{
- trace("=== onPurchaseSuccess! "+productID);
+ trace("=== onPurchaseSuccess! "+getLastPurchasedProductID());
}
public function onPurchaseFailed(error:String)
{
@@ -115,7 +119,7 @@ class IAPHandler
// ==== Receipt List
public function onReceiptsReceived()
{
- var p:Array = getReceiptProductIDs().split(" ");
+ var p:Array = getReceiptProductIDs();
trace("=== onReceiptsReceived! "+p.join("x"));
}
public function onReceiptsFailed( error:String )
diff --git a/src/Main.hx b/src/Main.hx
index d2a9c1c..64b9f76 100644
--- a/src/Main.hx
+++ b/src/Main.hx
@@ -24,6 +24,8 @@ class Main extends Sprite {
#end
private var handler:MyIAPHandler;
+ private var testProductPurchased:Bool;
+ private var icon:Bitmap;
public function new () {
@@ -34,6 +36,10 @@ class Main extends Sprite {
super ();
+ testProductPurchased = false;
+ addChild( icon = new Bitmap( Assets.getBitmapData("assets/OUYA_O.png" ) ) );
+ icon.visible = false;
+
#if android
var getContext = JNI.createStaticMethod ("org.haxe.nme.GameActivity", "getContext", "()Landroid/content/Context;", true);
OuyaController.init ( getContext () );
@@ -41,19 +47,35 @@ class Main extends Sprite {
ouyaFacade.init( getContext(), OUYA_DEVELOPER_ID );
trace("OUYA controller & facade inited!");
- handler = new MyIAPHandler( ouyaFacade.__jobject, DER_KEY_PATH );
- handler.requestProductList(["test_sss_full", "__DECLINED__THIS_PURCHASE"]);
+ handler = new MyIAPHandler( ouyaFacade.__jobject, DER_KEY_PATH, receiptsReceived );
+ handler.requestProductList([
+ PRODUCT_IDENTIFIER
+ //, enter more product IDs here...
+ ]);
- addChild( new Bitmap( Assets.getBitmapData("assets/OUYA_O.png" ) ) );
stage.addEventListener (JoystickEvent.BUTTON_DOWN, stage_onJoystickButtonDown);
#end
}
#if android
private function stage_onJoystickButtonDown( e:JoystickEvent ):Void {
+ if ( testProductPurchased )
+ return;
+
trace("OUYA button pressed, starting purchase");
handler.requestPurchase( PRODUCT_IDENTIFIER );
}
#end
+ private function receiptsReceived( products:Array ):Void {
+ trace("===== Main - Receipts received");
+ icon.visible = true;
+ for ( p in products )
+ if ( p == PRODUCT_IDENTIFIER ) {
+ trace("===== Main - product purchased");
+ icon.visible = false;
+ testProductPurchased = true;
+ }
+ }
+
}
\ No newline at end of file
diff --git a/src/MyIAPHandler.hx b/src/MyIAPHandler.hx
index 691f729..adc07e7 100644
--- a/src/MyIAPHandler.hx
+++ b/src/MyIAPHandler.hx
@@ -2,6 +2,24 @@
class MyIAPHandler extends IAPHandler
{
+ private var receiptsReceivedCallback:Array->Void;
+
+ public function new( ouyaFacadeObject:Dynamic, DERKeyPath:String, receiptsReceivedCallback:Array->Void )
+ {
+ super( ouyaFacadeObject, DERKeyPath );
+ this.receiptsReceivedCallback = receiptsReceivedCallback;
+ }
+
+ override public function onPurchaseSuccess()
+ {
+ trace("=== onPurchaseSuccess! " + getLastPurchasedProductID());
+ requestReceipts();
+ }
+
+ override public function onReceiptsReceived()
+ {
+ receiptsReceivedCallback( getReceiptProductIDs() );
+ }
}
diff --git a/src/java/com/jarnik/iaptest/OUYA_IAP.java b/src/java/com/jarnik/iaptest/OUYA_IAP.java
index e6413cf..2a64c36 100644
--- a/src/java/com/jarnik/iaptest/OUYA_IAP.java
+++ b/src/java/com/jarnik/iaptest/OUYA_IAP.java
@@ -43,6 +43,7 @@ public class OUYA_IAP
public static List PRODUCT_IDENTIFIER_LIST;
private static List mProductList;
private static List mReceiptList;
+ private static String mLastPurchasedProductID;
public static HaxeObject mCallback;
private static OuyaFacade mOuyaFacade;
@@ -160,6 +161,10 @@ public static void requestPurchase( String productName )
mOuyaFacade.requestPurchase(purchasable, new PurchaseListener(product));
}
+ public static String getLastPurchasedProductID() {
+ return mLastPurchasedProductID;
+ }
+
/**
* The callback for when the user attempts to purchase something. We're not worried about
* the user cancelling the purchase so we extend CancelIgnoringOuyaResponseListener, if
@@ -243,7 +248,8 @@ public void onSuccess(String result) {
return;
}
- mCallback.call("onPurchaseSuccess", new Object[] { mProduct.getIdentifier() } );
+ mLastPurchasedProductID = mProduct.getIdentifier();
+ mCallback.call("onPurchaseSuccess", new Object[] { } );
}
@Override
diff --git a/uploadOUYA.bat b/uploadOUYA.bat
index da10770..abe594c 100644
--- a/uploadOUYA.bat
+++ b/uploadOUYA.bat
@@ -1 +1 @@
-adb install -r bin/android/bin/bin/ouya_iap-release.apk
+adb install -r bin/android/bin/bin/ouya_iap-debug.apk