public void UpdateSubscription( Product oldProduct, Product newProduct, GooglePlayStoreProrationMode prorationMode) { if (!IsGooglePlayInAppBillingServiceAvailable()) { return; } Purchase oldPurchase; if (!_inventory.GetPurchase(oldProduct.definition, out oldPurchase)) { _billingUtil.LogErrorFormat( "Cannot find the subscription purchase record to be updated: {0}", oldProduct.definition.storeSpecificId); return; } if (_productInPurchaseFlow != null) { _billingUtil.RunOnMainThread(() => _callback.OnPurchaseFailed( new PurchaseFailureDescription(newProduct.definition.id, PurchaseFailureReason.ExistingPurchasePending, string.Format("A purchase for {0} is already in progress.", _productInPurchaseFlow.id)))); return; } _productInPurchaseFlow = newProduct.definition; using (var billingFlowParamBuilder = new AndroidJavaObject(Constants.BillingFlowParamsBuilder)) { SkuDetails skuDetails; if (!_inventory.GetSkuDetails(newProduct.definition.storeSpecificId, out skuDetails)) { // A SKU that has ProductDefinition should appear in the inventory. If not, the issue could be // transient so that it asks to try again later. _callback.OnPurchaseFailed( new PurchaseFailureDescription(newProduct.definition.id, PurchaseFailureReason.ProductUnavailable, string.Format("Cannot update subscription for {0} now, please try again later.", _productInPurchaseFlow.id))); return; } billingFlowParamBuilder.Call <AndroidJavaObject>( Constants.BillingFlowParamsBuilderSetSkuDetailsMethod, skuDetails.ToJava()); billingFlowParamBuilder.Call <AndroidJavaObject>( Constants.BillingFlowParamsBuilderSetOldSkuMethod, oldPurchase.ProductId, oldPurchase.PurchaseToken); billingFlowParamBuilder.Call <AndroidJavaObject>( Constants.BillingFlowParamsBuilderSetReplaceSkusProrationModeMethod, (int)prorationMode); LaunchBillingFlow(billingFlowParamBuilder); } }
public void UpdateSubscription(Product oldProduct, Product newProduct, GooglePlayStoreProrationMode prorationMode = GooglePlayStoreProrationMode.Unknown) { }