[android] Added statistic for subscription trial

This commit is contained in:
alexzatsepin 2020-07-22 20:08:27 +03:00 committed by Arsentiy Milchakov
parent d73a113df5
commit 76d1aa2caf
9 changed files with 104 additions and 66 deletions

View file

@ -2185,11 +2185,12 @@ Java_com_mapswithme_maps_Framework_nativeHasActiveSubscription(JNIEnv *, jclass,
JNIEXPORT void JNICALL
Java_com_mapswithme_maps_Framework_nativeSetActiveSubscription(JNIEnv *, jclass, jint type,
jboolean isActive)
jboolean isActive, jboolean isTrial)
{
auto const & purchase = frm()->GetPurchase();
if (purchase == nullptr)
return;
// TODO: @milchakov pass the 'isTrial' parameter to the purchase please.
purchase->SetSubscriptionEnabled(static_cast<SubscriptionType>(type),
static_cast<bool>(isActive));
}

View file

@ -531,7 +531,7 @@ public class Framework
public static native boolean nativeHasActiveSubscription(@SubscriptionType int type);
public static native void nativeSetActiveSubscription(@SubscriptionType int type,
boolean isActive);
boolean isActive, boolean isTrial);
public static native int nativeGetCurrentTipIndex();

View file

@ -2,6 +2,7 @@ package com.mapswithme.maps.purchase;
import android.app.Activity;
import android.os.Bundle;
import android.text.TextUtils;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
@ -71,10 +72,6 @@ abstract class AbstractBookmarkSubscriptionFragment extends BaseAuthFragment
mPurchaseController.initialize(requireActivity());
mPingCallback.attach(this);
BookmarkManager.INSTANCE.addCatalogPingListener(mPingCallback);
Statistics.INSTANCE.trackPurchasePreviewShow(getSubscriptionType().getServerId(),
getSubscriptionType().getVendor(),
getSubscriptionType().getYearlyProductId(),
getExtraFrom());
View root = onSubscriptionCreateView(inflater, container, savedInstanceState);
mDelegate = createFragmentDelegate(this);
if (root != null)
@ -282,6 +279,12 @@ abstract class AbstractBookmarkSubscriptionFragment extends BaseAuthFragment
public void onPriceSelection()
{
mDelegate.onPriceSelection();
ProductDetails details = getProductDetailsForPeriod(PurchaseUtils.Period.P1Y);
boolean isTrial = !TextUtils.isEmpty(details.getFreeTrialPeriod());
Statistics.INSTANCE.trackPurchasePreviewShow(getSubscriptionType().getServerId(),
getSubscriptionType().getVendor(),
getSubscriptionType().getYearlyProductId(),
getExtraFrom(), isTrial);
}
@Override
@ -438,8 +441,11 @@ abstract class AbstractBookmarkSubscriptionFragment extends BaseAuthFragment
void trackYearlyProductSelected()
{
ProductDetails details = getProductDetailsForPeriod(PurchaseUtils.Period.P1Y);
boolean isTrial = !TextUtils.isEmpty(details.getFreeTrialPeriod());
Statistics.INSTANCE.trackPurchasePreviewSelect(getSubscriptionType().getServerId(),
getSubscriptionType().getYearlyProductId());
getSubscriptionType().getYearlyProductId(),
isTrial);
}
void trackMonthlyProductSelected()

View file

@ -20,7 +20,8 @@ abstract class AbstractBookmarkValidationCallback implements ValidationCallback
}
@Override
public final void onValidate(@NonNull String purchaseData, @NonNull ValidationStatus status)
public final void onValidate(@NonNull String purchaseData, @NonNull ValidationStatus status,
boolean isTrial)
{
LOGGER.i(TAG, "Validation status of 'paid bookmark': " + status);
if (status == ValidationStatus.VERIFIED)

View file

@ -78,6 +78,6 @@ class DefaultPurchaseValidator implements PurchaseValidator<ValidationCallback>,
mOperationObservable.removeValidationObserver(orderId);
mValidatedOrderId = null;
if (mCallback != null)
mCallback.onValidate(purchaseData, status);
mCallback.onValidate(purchaseData, status, isTrial);
}
}

View file

@ -1,9 +1,9 @@
package com.mapswithme.maps.purchase;
import android.app.Activity;
import androidx.annotation.NonNull;
import android.text.TextUtils;
import androidx.annotation.NonNull;
import com.android.billingclient.api.Purchase;
import com.mapswithme.maps.Framework;
import com.mapswithme.util.ConnectionState;
@ -51,7 +51,8 @@ class SubscriptionPurchaseController extends AbstractPurchaseController<Validati
private class ValidationCallbackImpl implements ValidationCallback
{
@Override
public void onValidate(@NonNull String purchaseData, @NonNull ValidationStatus status)
public void onValidate(@NonNull String purchaseData, @NonNull ValidationStatus status,
boolean isTrial)
{
LOGGER.i(TAG, "Validation status of '" + mType + "': " + status);
if (status == ValidationStatus.VERIFIED)
@ -66,14 +67,15 @@ class SubscriptionPurchaseController extends AbstractPurchaseController<Validati
if (!hasActiveSubscription && shouldActivateSubscription)
{
LOGGER.i(TAG, "'" + mType + "' subscription activated");
Statistics.INSTANCE.trackPurchaseProductDelivered(mType.getServerId(), mType.getVendor());
Statistics.INSTANCE.trackPurchaseProductDelivered(mType.getServerId(), mType.getVendor(),
isTrial);
}
else if (hasActiveSubscription && !shouldActivateSubscription)
{
LOGGER.i(TAG, "'" + mType + "' subscription deactivated");
}
Framework.nativeSetActiveSubscription(mType.ordinal(), shouldActivateSubscription);
Framework.nativeSetActiveSubscription(mType.ordinal(), shouldActivateSubscription, isTrial);
if (getUiCallback() != null)
getUiCallback().onValidationFinish(shouldActivateSubscription);
@ -106,7 +108,7 @@ class SubscriptionPurchaseController extends AbstractPurchaseController<Validati
if (Framework.nativeHasActiveSubscription(mType.ordinal()))
{
LOGGER.i(TAG, "'" + mType + "' subscription deactivated");
Framework.nativeSetActiveSubscription(mType.ordinal(), false);
Framework.nativeSetActiveSubscription(mType.ordinal(), false, false);
}
return;
}

View file

@ -56,6 +56,10 @@ class TwoButtonsSubscriptionFragmentDelegate extends SubscriptionFragmentDelegat
return;
mSelectedPeriod = period;
if (mSelectedPeriod == PurchaseUtils.Period.P1Y)
getFragment().trackYearlyProductSelected();
else if (mSelectedPeriod == PurchaseUtils.Period.P1M)
getFragment().trackMonthlyProductSelected();
getFragment().pingBookmarkCatalog();
}

View file

@ -4,5 +4,5 @@ import androidx.annotation.NonNull;
public interface ValidationCallback
{
void onValidate(@NonNull String purchaseData, @NonNull ValidationStatus status);
void onValidate(@NonNull String purchaseData, @NonNull ValidationStatus status, boolean isTrial);
}

View file

@ -148,6 +148,7 @@ import static com.mapswithme.util.statistics.Statistics.EventParam.RESTAURANT_LO
import static com.mapswithme.util.statistics.Statistics.EventParam.SERVER_ID;
import static com.mapswithme.util.statistics.Statistics.EventParam.SERVER_IDS;
import static com.mapswithme.util.statistics.Statistics.EventParam.STATE;
import static com.mapswithme.util.statistics.Statistics.EventParam.TRIAL;
import static com.mapswithme.util.statistics.Statistics.EventParam.TURN_ON;
import static com.mapswithme.util.statistics.Statistics.EventParam.TYPE;
import static com.mapswithme.util.statistics.Statistics.EventParam.VALUE;
@ -663,67 +664,68 @@ public enum Statistics
public static final String DATE = "date";
public static final String STATUS = "status";
public static final String SOURCE = "source";
static final String ID = "id";
public static final String GUIDE_CATALOGUE = "guide_catalogue";
public static final String SUBSCRIPTION = "subscription";
public static final String EXPORT_BOOKMARKS = "export_bookmarks";
public static final String BOOKMARKS_BACKUP = "bookmarks_backup";
public static final String AFTER_SAVE_REVIEW = "after_save_review";
static final String TRACKS = "tracks";
static final String POINTS = "points";
static final String TOLL = "toll";
static final String UNPAVED = "unpaved";
static final String FERRY = "ferry";
static final String MOTORWAY = "motorway";
static final String SCENARIO = "scenario";
static final String TARGET = "target";
static final String CATEGORY = "category";
static final String COUNT = "Count";
static final String COUNT_LOWERCASE = "count";
static final String CHANNEL = "Channel";
static final String BANNER = "banner";
static final String BATTERY = "battery";
static final String CALLER_ID = "Caller ID";
static final String CONNECTION_TYPE = "Connection name";
static final String CATEGORY = "category";
static final String CHANNEL = "Channel";
static final String CHARGING = "charging";
static final String CONNECTION_FAST = "Connection fast";
static final String CONNECTION_METERED = "Connection limit";
static final String MY_POSITION = "my position";
static final String POINT = "point";
static final String IS_AUTHENTICATED = "is_authenticated";
static final String IS_ONLINE = "is_online";
static final String CONNECTION_TYPE = "Connection name";
static final String COUNT = "Count";
static final String COUNT_LOWERCASE = "count";
static final String DESTINATION = "destination";
static final String ERROR_CODE = "error_code";
static final String ERROR_MESSAGE = "error_message";
static final String FEATURE_ID = "feature_id";
static final String MWM_NAME = "mwm_name";
static final String MWM_VERSION = "mwm_version";
static final String FERRY = "ferry";
static final String FIRST_LAUNCH = "first_launch";
static final String FROM_LAT = "from_lat";
static final String FROM_LON = "from_lon";
static final String HAS_AUTH = "has_auth";
static final String HOTEL_LAT = "hotel_lat";
static final String HOTEL_LON = "hotel_lon";
static final String ID = "id";
static final String INTERRUPTED = "interrupted";
static final String IS_AUTHENTICATED = "is_authenticated";
static final String IS_ONLINE = "is_online";
static final String ITEM = "item";
static final String MAP_DATA_SIZE = "map_data_size:";
static final String METHOD = "method";
static final String MODE = "mode";
static final String MOTORWAY = "motorway";
static final String MWM_NAME = "mwm_name";
static final String MWM_VERSION = "mwm_version";
static final String MY_POSITION = "my position";
static final String NETWORK = "network";
static final String OBJECT_LAT = "object_lat";
static final String OBJECT_LON = "object_lon";
static final String PLACEMENT = "placement";
static final String POINT = "point";
static final String POINTS = "points";
static final String PRODUCT = "product";
static final String PURCHASE = "purchase";
static final String RESTAURANT = "restaurant";
static final String RESTAURANT_LAT = "restaurant_lat";
static final String RESTAURANT_LON = "restaurant_lon";
static final String FROM_LAT = "from_lat";
static final String FROM_LON = "from_lon";
static final String TO_LAT = "to_lat";
static final String TO_LON = "to_lon";
static final String BANNER = "banner";
static final String STATE = "state";
static final String ERROR_CODE = "error_code";
static final String ERROR_MESSAGE = "error_message";
static final String MAP_DATA_SIZE = "map_data_size:";
static final String BATTERY = "battery";
static final String CHARGING = "charging";
static final String NETWORK = "network";
static final String METHOD = "method";
static final String MODE = "mode";
static final String OBJECT_LAT = "object_lat";
static final String OBJECT_LON = "object_lon";
static final String ITEM = "item";
static final String DESTINATION = "destination";
static final String PLACEMENT = "placement";
static final String HAS_AUTH = "has_auth";
static final String INTERRUPTED = "interrupted";
static final String VENDOR = "vendor";
static final String PRODUCT = "product";
static final String PURCHASE = "purchase";
static final String SCENARIO = "scenario";
static final String SERVER_ID = "server_id";
static final String SERVER_IDS = "server_ids";
static final String FIRST_LAUNCH = "first_launch";
static final String STATE = "state";
static final String TARGET = "target";
static final String TO_LAT = "to_lat";
static final String TO_LON = "to_lon";
static final String TOLL = "toll";
static final String TRACKS = "tracks";
static final String TRIAL = "trial";
static final String UNPAVED = "unpaved";
static final String VENDOR = "vendor";
private EventParam() {}
}
@ -1734,7 +1736,8 @@ public enum Statistics
}
public void trackPurchasePreviewShow(@NonNull String purchaseId, @NonNull String vendor,
@NonNull String productId, @Nullable String from)
@NonNull String productId, @Nullable String from,
@Nullable Boolean isTrial)
{
ParameterBuilder params = params().add(VENDOR, vendor)
.add(PRODUCT, productId)
@ -1742,6 +1745,9 @@ public enum Statistics
if (!TextUtils.isEmpty(from))
params.add(FROM, from);
if (isTrial != null)
params.add(TRIAL, isTrial);
trackEvent(INAPP_PURCHASE_PREVIEW_SHOW, params,
STATISTICS_CHANNEL_REALTIME);
}
@ -1749,7 +1755,7 @@ public enum Statistics
public void trackPurchasePreviewShow(@NonNull String purchaseId, @NonNull String vendor,
@NonNull String productId)
{
trackPurchasePreviewShow(purchaseId, vendor, productId, null);
trackPurchasePreviewShow(purchaseId, vendor, productId, null, null);
}
public void trackPurchaseEvent(@NonNull String event, @NonNull String purchaseId)
@ -1765,8 +1771,17 @@ public enum Statistics
public void trackPurchasePreviewSelect(@NonNull String purchaseId, @NonNull String productId)
{
trackEvent(INAPP_PURCHASE_PREVIEW_SELECT, params().add(PRODUCT, productId)
.add(PURCHASE, purchaseId));
trackPurchasePreviewSelect(purchaseId, productId, null);
}
public void trackPurchasePreviewSelect(@NonNull String purchaseId, @NonNull String productId,
@Nullable Boolean isTrial)
{
ParameterBuilder params = params();
if (isTrial != null)
params.add(TRIAL, isTrial);
trackEvent(INAPP_PURCHASE_PREVIEW_SELECT, params.add(PRODUCT, productId)
.add(PURCHASE, purchaseId));
}
public void trackPurchaseStoreError(@NonNull String purchaseId,
@ -1819,8 +1834,17 @@ public enum Statistics
public void trackPurchaseProductDelivered(@NonNull String purchaseId, @NonNull String vendor)
{
trackEvent(INAPP_PURCHASE_PRODUCT_DELIVERED, params().add(VENDOR, vendor)
.add(PURCHASE, purchaseId),
trackPurchaseProductDelivered(purchaseId, vendor, null);
}
public void trackPurchaseProductDelivered(@NonNull String purchaseId, @NonNull String vendor,
@Nullable Boolean isTrial)
{
ParameterBuilder params = params();
if (isTrial != null)
params.add(TRIAL, isTrial);
trackEvent(INAPP_PURCHASE_PRODUCT_DELIVERED, params.add(VENDOR, vendor)
.add(PURCHASE, purchaseId),
STATISTICS_CHANNEL_REALTIME);
}