[android] Changed key from purchase data on order id

This commit is contained in:
Александр Зацепин 2018-11-30 13:20:32 +03:00 committed by Olesia Bolovintseva
parent 200ada2818
commit 578bbebc79
3 changed files with 33 additions and 16 deletions

View file

@ -2,8 +2,10 @@ package com.mapswithme.maps;
import android.content.Context;
import android.support.annotation.NonNull;
import android.util.Base64;
import com.mapswithme.maps.purchase.CoreValidationObserver;
import com.mapswithme.maps.purchase.PurchaseUtils;
import com.mapswithme.maps.purchase.ValidationStatus;
import com.mapswithme.util.log.Logger;
import com.mapswithme.util.log.LoggerFactory;
@ -43,22 +45,25 @@ public class PurchaseValidationObservable implements Framework.PurchaseValidatio
public void onValidatePurchase(int code, @NonNull String serverId, @NonNull String vendorId,
@NonNull String encodedPurchaseData)
{
CoreValidationObserver observer = mObservers.get(encodedPurchaseData);
byte[] tokenBytes = Base64.decode(encodedPurchaseData, Base64.DEFAULT);
String purchaseData = new String(tokenBytes);
String orderId = PurchaseUtils.parseOrderId(purchaseData);
CoreValidationObserver observer = mObservers.get(orderId);
if (observer == null)
return;
observer.onValidatePurchase(ValidationStatus.values()[code], serverId, vendorId, encodedPurchaseData);
observer.onValidatePurchase(ValidationStatus.values()[code], serverId, vendorId, purchaseData);
}
public void addObserver(@NonNull String encodedPurchaseData, @NonNull CoreValidationObserver observer)
public void addObserver(@NonNull String orderId, @NonNull CoreValidationObserver observer)
{
mLogger.d(TAG, "Add validation observer: " + observer);
mObservers.put(encodedPurchaseData, observer);
mLogger.d(TAG, "Add validation observer '" + observer + "' for '" + orderId + "'");
mObservers.put(orderId, observer);
}
public void removeObserver(@NonNull String encodedPurchaseData, @NonNull CoreValidationObserver observer)
public void removeObserver(@NonNull String orderId)
{
mLogger.d(TAG, "Remove validation observer: " + observer);
mObservers.remove(encodedPurchaseData);
mLogger.d(TAG, "Remove validation observer for '" + orderId + "'");
mObservers.remove(orderId);
}
}

View file

@ -28,8 +28,9 @@ class DefaultPurchaseValidator implements PurchaseValidator<ValidationCallback>,
public void validate(@Nullable String serverId, @NonNull String vendor,
@NonNull String purchaseData)
{
String orderId = PurchaseUtils.parseOrderId(purchaseData);
mValidationObservable.addObserver(orderId, this);
String encodedPurchaseData = Base64.encodeToString(purchaseData.getBytes(), Base64.DEFAULT);
mValidationObservable.addObserver(encodedPurchaseData, this);
Framework.nativeValidatePurchase(serverId == null ? "" : serverId, vendor, encodedPurchaseData);
}
@ -47,14 +48,12 @@ class DefaultPurchaseValidator implements PurchaseValidator<ValidationCallback>,
@Override
public void onValidatePurchase(@NonNull ValidationStatus status, @NonNull String serverId,
@NonNull String vendorId, @NonNull String encodedPurchaseData)
@NonNull String vendorId, @NonNull String purchaseData)
{
LOGGER.i(TAG, "Validation code: " + status);
mValidationObservable.removeObserver(encodedPurchaseData, this);
String orderId = PurchaseUtils.parseOrderId(purchaseData);
mValidationObservable.removeObserver(orderId);
if (mCallback != null)
{
byte[] tokenBytes = Base64.decode(encodedPurchaseData, Base64.DEFAULT);
mCallback.onValidate(new String(tokenBytes), status);
}
mCallback.onValidate(purchaseData, status);
}
}

View file

@ -6,7 +6,7 @@ import com.android.billingclient.api.Purchase;
import com.android.billingclient.api.SkuDetails;
import org.json.JSONException;
class PurchaseUtils
public class PurchaseUtils
{
private PurchaseUtils()
{
@ -26,6 +26,19 @@ class PurchaseUtils
}
}
@NonNull
public static String parseOrderId(@NonNull String purchaseData)
{
try
{
return new Purchase(purchaseData, null).getOrderId();
}
catch (JSONException e)
{
throw new IllegalArgumentException("Failed to parse purchase order id!");
}
}
@NonNull
static ProductDetails toProductDetails(@NonNull SkuDetails skuDetails)
{