I created a subscription product and when people try to buy it, they click from my app to the app store, and they get an error "item not found"
But the items shows up as live in my developer console.
Here is how I call it:
Here is the onActivityResult() from this method:
protected void onActivityResult(int requestCode, int resultCode, Intent data)
{
sendEmail(TAG, "onActivityResult(" + requestCode + "," + resultCode + "," + data
results in this:
onActivityResult(10001,0,Intent { (has extras) }
and the onIabPurchaseFinished
IabHelper.OnIabPurchaseFinishedListener mPurchaseFinishedListener = new IabHelper.OnIabPurchaseFinishedListener()
{
public void onIabPurchaseFinished(IabResult result, Purchase purchase)
{
sendEmail(TAG, "Purchase finished: " + result + ", purchase: " + purchase);
never seems to get executed.
And
public void onUpgradeAppButtonClicked( )
{
sendEmail(TAG, "Buy button clicked; launching purchase flow for upgrade. SKU: " + SKU_SUBSCRIPTION + " and RC_REQUEST: " + RC_REQUEST );
//setWaitScreen(true);
mHelper.launchPurchaseFlow(this, SKU_SUBSCRIPTION, RC_REQUEST, mPurchaseFinishedListener);
}
resulted in this:
Buy button clicked; launching purchase flow for upgrade. SKU: my_sku and RC_REQUEST: 10001
Would anyone know why the error occured? Could it be that this happens in some older phones?
Also, if someone could try it on their phone maybe, that would help because I only have one phone to test with :) This is the link to the app: https://play.google.com/store/apps/details?id=com.problemio&hl=en
and to get to the billing is on the home screen the very bottom button.
EDIT:
I know that sometimes it takes time for the in-app product to truly go live in the Android system, but it says live in my dev console :)
EDIT:
In my IABHelper.java I have this:
/**
* Same as calling {@link #launchPurchaseFlow(Activity, String, int, OnIabPurchaseFinishedListener, String)}
* with null as extraData.
*/
public void launchPurchaseFlow(Activity act, String sku, int requestCode, OnIabPurchaseFinishedListener listener) {
launchPurchaseFlow(act, sku, requestCode, listener, "");
}
and then this:
/**
* Initiate the UI flow for an in-app purchase. Call this method to initiate an in-app purchase,
* which will involve bringing up the Google Play screen. The calling activity will be paused while
* the user interacts with Google Play, and the result will be delivered via the activity's
* {@link android.app.Activity#onActivityResult} method, at which point you must call
* this object's {@link #handleActivityResult} method to continue the purchase flow. This method
* MUST be called from the UI thread of the Activity.
*
* @param act The calling activity.
* @param sku The sku of the item to purchase.
* @param requestCode A request code (to differentiate from other responses --
* as in {@link android.app.Activity#startActivityForResult}).
* @param listener The listener to notify when the purchase process finishes
* @param extraData Extra data (developer payload), which will be returned with the purchase data
* when the purchase completes. This extra data will be permanently bound to that purchase
* and will always be returned when the purchase is queried.
*/
public void launchPurchaseFlow(Activity act, String sku, int requestCode, OnIabPurchaseFinishedListener listener, String extraData) {
checkSetupDone("launchPurchaseFlow");
flagStartAsync("launchPurchaseFlow");
IabResult result;
try {
logDebug("Constructing buy intent for " + sku);
Bundle buyIntentBundle = mService.getBuyIntent(3, mContext.getPackageName(), sku, ITEM_TYPE_INAPP, extraData);
int response = getResponseCodeFromBundle(buyIntentBundle);
if (response != BILLING_RESPONSE_RESULT_OK) {
logError("Unable to buy item, Error response: " + getResponseDesc(response));
result = new IabResult(response, "Unable to buy item");
if (listener != null) listener.onIabPurchaseFinished(result, null);
}
PendingIntent pendingIntent = buyIntentBundle.getParcelable(RESPONSE_BUY_INTENT);
logDebug("Launching buy intent for " + sku + ". Request code: " + requestCode);
mRequestCode = requestCode;
mPurchaseListener = listener;
act.startIntentSenderForResult(pendingIntent.getIntentSender(),
requestCode, new Intent(),
Integer.valueOf(0), Integer.valueOf(0),
Integer.valueOf(0));
}
catch (SendIntentException e) {
logError("SendIntentException while launching purchase flow for sku " + sku);
e.printStackTrace();
result = new IabResult(IABHELPER_SEND_INTENT_FAILED, "Failed to send intent.");
if (listener != null) listener.onIabPurchaseFinished(result, null);
}
catch (RemoteException e) {
logError("RemoteException while launching purchase flow for sku " + sku);
e.printStackTrace();
result = new IabResult(IABHELPER_REMOTE_EXCEPTION, "Remote exception while starting purchase flow");
if (listener != null) listener.onIabPurchaseFinished(result, null);
}
}