forked from organicmaps/organicmaps
[android] Changed key from purchase data on order id
This commit is contained in:
parent
200ada2818
commit
578bbebc79
3 changed files with 33 additions and 16 deletions
|
@ -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);
|
||||
}
|
||||
}
|
||||
|
|
|
@ -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);
|
||||
}
|
||||
}
|
||||
|
|
|
@ -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)
|
||||
{
|
||||
|
|
Loading…
Add table
Reference in a new issue