Is there sample or tutorial that use JNI for In-app Billing in Android?

I want to use In-App purchase in my Game ( in android ) using Google API and JNI in Cocos2d-x i can Implementation IAP with java in android but it is confusing in Cocos2d-x ( is there sample or tutorial like trivialDrive that use JNI for In-app Billing?
i want to publish my Game in the store that use Google api but it have some change is in IabHelper.java and i guess(not Confident) as i need to change some lines in IabHelper , i can’t use SDKBOX or Soomla)

I recommend you to take a look at SafeJNI, it’s a c++ framework, that enables you to use c++ to invoke java code.

1 Like

thank you for Answer

item in my Game is consumable.
i can use IAP in java and this is main activity class.

public class IAPActivity extends Activity {

  public static final  String RSA= "********";

// Debug tag, for logging
private static final String TAG = "LOG";

// SKUs for our products: the premium upgrade (non-consumable)
private static final String SKU_PREMIUM = "gp";

// Does the user have the premium upgrade?
private boolean mIsPremium = false;

// (arbitrary) request code for the purchase flow
//static final int RC_REQUEST = ;

// The helper object
private IabHelper mHelper;


@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.main);
    
 // You can find it in your Bazaar console, in the Dealers section. 
 // It is recommended to add more security than just pasting it in your source code;
 mHelper = new IabHelper(this, RSA);
 
 
 final IabHelper.QueryInventoryFinishedListener onQueryInventoryFinished = new IabHelper.QueryInventoryFinishedListener() {
	
	public void onQueryInventoryFinished(IabResult result, Inventory inventory) {
		   Log.d(TAG, "Query inventory finished.");
        //kharid nakarde
        if (result.isFailure()) {
            Log.d(TAG, "Failed to query inventory: " + result);
            return;
        }
        else {
            Log.d(TAG, "Query inventory was successful.");
            // does the user have the premium upgrade?
            mIsPremium = inventory.hasPurchase(SKU_PREMIUM);

            // update UI accordingly

            Log.d(TAG, "User is " + (mIsPremium ? "PREMIUM" : "NOT PREMIUM"));
        }

        Log.d(TAG, "Initial inventory query finished; enabling main UI.");
    }
};
	     

	final IabHelper.OnIabPurchaseFinishedListener onIabPurchaseFinished = new OnIabPurchaseFinishedListener() {
		
		public void onIabPurchaseFinished(IabResult result, Purchase purchase) {
			// TODO Auto-generated method stub
			 if (result.isFailure()) {
    	            Log.d(TAG, "Error purchasing: " + result);
    	            return;
    	        }
    	        else if (purchase.getSku().equals(SKU_PREMIUM)) {
    	            // give user access to premium content and update the UI
    	        }
    	    }
		
	};
	 
 

 Log.d(TAG, "Starting setup.");
 mHelper.startSetup(new IabHelper.OnIabSetupFinishedListener() {
     public void onIabSetupFinished(IabResult result) {
         Log.d(TAG, "Setup finished.");

         if (!result.isSuccess()) {
             // Oh noes, there was a problem.
             Log.d(TAG, "Problem setting up In-app Billing: " + result);
         }
         // Hooray, IAB is fully set up!
         mHelper.queryInventoryAsync(onQueryInventoryFinished);
     }
 });
 
 Button btnPurchase=(Button) findViewById(R.id.btnPurchaseGP);
 btnPurchase .setOnClickListener(new OnClickListener() {
	
	public void onClick(View arg0) {
		// TODO Auto-generated method stub
		mHelper.launchPurchaseFlow(IAPActivity.this, SKU_PREMIUM, 0, onIabPurchaseFinished, "payload-string");

	}
});
 
}


@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
    super.onActivityResult(requestCode, resultCode, data);

    Log.d(TAG, "onActivityResult(" + requestCode + "," + resultCode + "," + data);

    // Pass on the activity result to the helper for handling
    if (!mHelper.handleActivityResult(requestCode, resultCode, data)) {
        super.onActivityResult(requestCode, resultCode, data);
    } else {
        Log.d(TAG, "onActivityResult handled by IABUtil.");
    }
}
@Override
public void onDestroy() {
    super.onDestroy();
    if (mHelper != null) mHelper.dispose();
    mHelper = null;
}

}

Unfortunately JNI is very complex and i don’t any idea how use it please Help me