Exemple #1
0
  @Click(R.id.get_buy_intent_button)
  public void getBuyIntent(View v) {
    try {
      Bundle buyIntentBundle =
          billingService.getBuyIntent(
              apiLevel,
              getPackageName(),
              skuName,
              "inapp",
              "bGoa+V7g/yqDXvKRqq+JTFn4uQZbPiQJo4pf9RzJ");
      PendingIntent buyIntent = buyIntentBundle.getParcelable("BUY_INTENT");

      MainActivity.this.startIntentSenderForResult(
          buyIntent.getIntentSender(),
          requestCode,
          new Intent(),
          Integer.valueOf(0),
          Integer.valueOf(0),
          Integer.valueOf(0));
    } catch (Exception e) {
      String msg = "getBuyIntent: " + e.getMessage() + "\n";
      logView.append(msg);

      Log.e(TAG, msg);
      e.printStackTrace();
    }
  }
  /**
   * 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 itemType indicates if it's a product or a subscription (ITEM_TYPE_INAPP or
   *     ITEM_TYPE_SUBS)
   * @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,
      String itemType,
      int requestCode,
      OnIabPurchaseFinishedListener listener,
      String extraData) {
    checkSetupDone("launchPurchaseFlow");
    flagStartAsync("launchPurchaseFlow");
    IabResult result;

    if (itemType.equals(ITEM_TYPE_SUBS) && !mSubscriptionsSupported) {
      IabResult r =
          new IabResult(IABHELPER_SUBSCRIPTIONS_NOT_AVAILABLE, "Subscriptions are not available.");
      if (listener != null) listener.onIabPurchaseFinished(r, null);
      return;
    }

    try {
      logDebug("Constructing buy intent for " + sku + ", item type: " + itemType);
      Bundle buyIntentBundle =
          mService.getBuyIntent(3, mContext.getPackageName(), sku, itemType, 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);
        return;
      }

      PendingIntent pendingIntent = buyIntentBundle.getParcelable(RESPONSE_BUY_INTENT);
      logDebug("Launching buy intent for " + sku + ". Request code: " + requestCode);
      mRequestCode = requestCode;
      mPurchaseListener = listener;
      mPurchasingItemType = itemType;
      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);
    }
  }
  public void purchase(final String sku, final String transactionId) {
    Log.d("XXX", "Starting purchase for: " + sku);
    PaymentsCache pc = new PaymentsCache(context);
    Boolean isBlocked = pc.getConsumableFlag("block", sku);
    //		if(isBlocked){
    //			Log.d("XXX", "Is awaiting payment confirmation");
    //			error("Awaiting payment confirmation");
    //			return;
    //		}
    final String hash = transactionId;

    Bundle buyIntentBundle;
    try {
      buyIntentBundle =
          mService.getBuyIntent(
              3, context.getApplicationContext().getPackageName(), sku, "inapp", hash);
    } catch (RemoteException e) {
      //			Log.d("XXX", "Error: " + e.getMessage());
      error(e.getMessage());
      return;
    }
    Object rc = buyIntentBundle.get("RESPONSE_CODE");
    int responseCode = 0;
    if (rc == null) {
      responseCode = PaymentsManager.BILLING_RESPONSE_RESULT_OK;
    } else if (rc instanceof Integer) {
      responseCode = ((Integer) rc).intValue();
    } else if (rc instanceof Long) {
      responseCode = (int) ((Long) rc).longValue();
    }
    //		Log.d("XXX", "Buy intent response code: " + responseCode);
    if (responseCode == 1 || responseCode == 3 || responseCode == 4) {
      canceled();
      return;
    }

    PendingIntent pendingIntent = buyIntentBundle.getParcelable("BUY_INTENT");
    pc.setConsumableValue("validation_hash", sku, hash);
    try {
      if (context == null) {
        //				Log.d("XXX", "No context!");
      }
      if (pendingIntent == null) {
        //				Log.d("XXX", "No pending intent");
      }
      //			Log.d("XXX", "Starting activity for purchase!");
      context.startIntentSenderForResult(
          pendingIntent.getIntentSender(),
          PaymentsManager.REQUEST_CODE_FOR_PURCHASE,
          new Intent(),
          Integer.valueOf(0),
          Integer.valueOf(0),
          Integer.valueOf(0));
    } catch (SendIntentException e) {
      error(e.getMessage());
    }
  }
Exemple #4
0
  /**
   * 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(
              BILLING_API_VERSION, 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", requestCode);
        if (listener != null) listener.onIabPurchaseFinished(result, null);
      } else {
        PendingIntent pendingIntent = buyIntentBundle.getParcelable(RESPONSE_BUY_INTENT);
        logDebug("Launching buy intent for " + sku + ". Request code: " + requestCode);
        SYSLOG("MoSync Launching buy intent for " + sku + ". Request code: " + requestCode);
        mRequestCode = requestCode;
        mPurchaseListener = listener;
        act.startIntentSenderForResult(
            pendingIntent.getIntentSender(),
            requestCode,
            new Intent(Consts.METHOD_REQUEST_PURCHASE),
            0,
            0,
            0);
      }
    } catch (SendIntentException e) {
      logError("SendIntentException while launching purchase flow for sku " + sku);
      SYSLOG("MoSync SendIntentException while launching purchase flow for sku " + sku);
      e.printStackTrace();

      result = new IabResult(IABHELPER_SEND_INTENT_FAILED, "Failed to send intent.", requestCode);
      if (listener != null) listener.onIabPurchaseFinished(result, null);
    } catch (RemoteException e) {
      logError("RemoteException while launching purchase flow for sku " + sku);
      SYSLOG("MoSync RemoteException while launching purchase flow for sku " + sku);
      e.printStackTrace();

      result =
          new IabResult(
              IABHELPER_REMOTE_EXCEPTION,
              "Remote exception while starting purchase flow",
              requestCode);
      if (listener != null) listener.onIabPurchaseFinished(result, null);
    }
  }
 @NonNull
 @Override
 public PendingIntent getProductBuyIntent(
     @NonNull @ProductType String type, @NonNull String sku, @Nullable String developerPayload)
     throws BillingException {
   try {
     Bundle response =
         delegate.getBuyIntent(API_VERSION, packageName, sku, type, developerPayload);
     checkBundle(response);
     //noinspection UnnecessaryLocalVariable
     PendingIntent pendingIntent = response.getParcelable("BUY_INTENT");
     if (pendingIntent == null) {
       throw new BillingException.UnexpectedDataException("BUY_INTENT == null");
     }
     return pendingIntent;
   } catch (RemoteException e) {
     throw new BillingException(e);
   }
 }
 @Override
 public void makePurchase(String itemID, Preferences pref) {
   this.pref = pref;
   try {
     Bundle buyIntentBundle = mService.getBuyIntent(3, getPackageName(), itemID, "inapp", null);
     PendingIntent pendingIntent = buyIntentBundle.getParcelable("BUY_INTENT");
     startIntentSenderForResult(
         pendingIntent.getIntentSender(),
         1001,
         new Intent(),
         Integer.valueOf(0),
         Integer.valueOf(0),
         Integer.valueOf(0));
   } catch (RemoteException e) {
     e.printStackTrace();
   } catch (SendIntentException e) {
     e.printStackTrace();
   }
 }
 public Bundle getBuyIntent(String sku, String extraData) throws RemoteException {
   return billingService.getBuyIntent(
       3, context.getPackageName(), sku, ITEM_TYPE_INAPP, extraData);
 }