From 988b34bd6a1649d9edf795c1718713b61696840f Mon Sep 17 00:00:00 2001 From: Antonio Zugaldia Date: Mon, 22 Apr 2019 18:35:20 +0200 Subject: [android] new manifest flag to enable/disable sku tokens --- .../java/com/mapbox/mapboxsdk/AccountsManager.java | 64 +++++++++++++++++----- .../src/main/java/com/mapbox/mapboxsdk/Mapbox.java | 1 + .../mapboxsdk/constants/MapboxConstants.java | 10 ++++ .../com/mapbox/mapboxsdk/http/HttpRequestUrl.java | 6 +- .../mapboxsdk/module/telemetry/TelemetryImpl.java | 4 +- .../src/main/AndroidManifest.xml | 5 ++ 6 files changed, 73 insertions(+), 17 deletions(-) diff --git a/platform/android/MapboxGLAndroidSDK/src/main/java/com/mapbox/mapboxsdk/AccountsManager.java b/platform/android/MapboxGLAndroidSDK/src/main/java/com/mapbox/mapboxsdk/AccountsManager.java index 4fd0200a37..d086b3329e 100644 --- a/platform/android/MapboxGLAndroidSDK/src/main/java/com/mapbox/mapboxsdk/AccountsManager.java +++ b/platform/android/MapboxGLAndroidSDK/src/main/java/com/mapbox/mapboxsdk/AccountsManager.java @@ -2,41 +2,74 @@ package com.mapbox.mapboxsdk; import android.content.Context; import android.content.SharedPreferences; +import android.content.pm.ApplicationInfo; +import android.content.pm.PackageManager; import android.support.annotation.NonNull; +import android.support.annotation.Nullable; import android.text.TextUtils; import android.text.format.DateUtils; import com.mapbox.android.accounts.v1.MapboxAccounts; import com.mapbox.mapboxsdk.constants.MapboxConstants; +import com.mapbox.mapboxsdk.log.Logger; /** - * REMOVAL OR MODIFICATION OF THE FOLLOWING CODE VIOLATES THE MAPBOX TERMS - * OF SERVICE + * IF YOU USE THIS CODE WITH MAPBOX MAPPING API, REMOVAL OR MODIFICATION OF + * THE FOLLOWING CODE VIOLATES THE MAPBOX TERMS OF SERVICE. * - * The following code is used to access Mapbox's Mapping APIs. + * The following code is used to access Mapbox's Mapping APIs. Removal or + * modification of this code when used with Mapbox's Mapping APIs can result + * in higher fees and/or termination of your account with Mapbox. * - * Removal or modification of this code when used with Mapbox's Mapping APIs - * can result in termination of your agreement and/or your account with - * Mapbox. + * Under the Mapbox Terms of Service, you may not use this code to access + * Mapbox Mapping APIs other than through Mapbox SDKs. * - * Using this code to access Mapbox Mapping APIs from outside the Mapbox Maps - * SDK also violates the Mapbox Terms of Service. On Android, Mapping APIs - * should be accessed using the methods documented at - * https://www.mapbox.com/android. - * - * You can access the Mapbox Terms of Service at https://www.mapbox.com/tos/ + * The Android documentation to access Mapping APIs is available at + * https://www.mapbox.com/android and the Mapbox Terms of Service are + * available at https://www.mapbox.com/tos/. */ class AccountsManager { + private static final String TAG = "Mbgl-AccountsManager"; + private static final String PREFERENCE_USER_ID = "com.mapbox.mapboxsdk.accounts.userid"; private static final String PREFERENCE_TIMESTAMP = "com.mapbox.mapboxsdk.accounts.timestamp"; private static final String PREFERENCE_SKU_TOKEN = "com.mapbox.mapboxsdk.accounts.skutoken"; private long timestamp; + @Nullable private String skuToken; + private boolean isEnabled; + AccountsManager() { - String userId = validateUserId(); - validateRotation(userId); + isEnabled = isSkuTokenEnabled(); + if (isEnabled) { + String userId = validateUserId(); + validateRotation(userId); + } else { + timestamp = 0L; + skuToken = null; + } + } + + private boolean isSkuTokenEnabled() { + boolean value = MapboxConstants.DEFAULT_ENABLE_SKU_TOKEN; + try { + // Try getting a custom value from the app Manifest + ApplicationInfo appInfo = Mapbox.getApplicationContext().getPackageManager().getApplicationInfo( + Mapbox.getApplicationContext().getPackageName(), + PackageManager.GET_META_DATA); + if (appInfo.metaData != null) { + value = appInfo.metaData.getBoolean( + MapboxConstants.KEY_META_DATA_ENABLE_SKU_TOKEN, + MapboxConstants.DEFAULT_ENABLE_SKU_TOKEN + ); + } + } catch (Exception exception) { + Logger.e(TAG, "Failed to read the package metadata: ", exception); + } + + return value; } private String validateUserId() { @@ -62,8 +95,9 @@ class AccountsManager { } } + @Nullable String getSkuToken() { - if (isExpired()) { + if (isEnabled && isExpired()) { SharedPreferences sharedPreferences = getSharedPreferences(); String userId = sharedPreferences.getString(PREFERENCE_USER_ID, ""); skuToken = generateSkuToken(userId); diff --git a/platform/android/MapboxGLAndroidSDK/src/main/java/com/mapbox/mapboxsdk/Mapbox.java b/platform/android/MapboxGLAndroidSDK/src/main/java/com/mapbox/mapboxsdk/Mapbox.java index 5a1c49a0a4..363d8469f4 100644 --- a/platform/android/MapboxGLAndroidSDK/src/main/java/com/mapbox/mapboxsdk/Mapbox.java +++ b/platform/android/MapboxGLAndroidSDK/src/main/java/com/mapbox/mapboxsdk/Mapbox.java @@ -96,6 +96,7 @@ public final class Mapbox { * * @return the SKU token */ + @Nullable public static String getSkuToken() { return INSTANCE.accounts.getSkuToken(); } diff --git a/platform/android/MapboxGLAndroidSDK/src/main/java/com/mapbox/mapboxsdk/constants/MapboxConstants.java b/platform/android/MapboxGLAndroidSDK/src/main/java/com/mapbox/mapboxsdk/constants/MapboxConstants.java index ffcf8d74ec..6be803cb14 100644 --- a/platform/android/MapboxGLAndroidSDK/src/main/java/com/mapbox/mapboxsdk/constants/MapboxConstants.java +++ b/platform/android/MapboxGLAndroidSDK/src/main/java/com/mapbox/mapboxsdk/constants/MapboxConstants.java @@ -37,6 +37,16 @@ public class MapboxConstants { */ public static final boolean DEFAULT_MEASURE_TILE_DOWNLOAD_ON = false; + /** + * Key used to switch SKU token on/off in AndroidManifest.xml + */ + public static final String KEY_META_DATA_ENABLE_SKU_TOKEN = "com.mapbox.EnableSkuToken"; + + /** + * Default value for KEY_META_DATA_ENABLE_SKU_TOKEN (default is off) + */ + public static final boolean DEFAULT_ENABLE_SKU_TOKEN = false; + /** * Unmeasured state */ diff --git a/platform/android/MapboxGLAndroidSDK/src/main/java/com/mapbox/mapboxsdk/http/HttpRequestUrl.java b/platform/android/MapboxGLAndroidSDK/src/main/java/com/mapbox/mapboxsdk/http/HttpRequestUrl.java index ec4d90cbc7..99d9cc4adf 100644 --- a/platform/android/MapboxGLAndroidSDK/src/main/java/com/mapbox/mapboxsdk/http/HttpRequestUrl.java +++ b/platform/android/MapboxGLAndroidSDK/src/main/java/com/mapbox/mapboxsdk/http/HttpRequestUrl.java @@ -24,7 +24,11 @@ public class HttpRequestUrl { } else { resourceUrl = resourceUrl + "&"; } - resourceUrl = resourceUrl + "events=true&sku=" + Mapbox.getSkuToken(); + if (Mapbox.getSkuToken() != null) { + resourceUrl = resourceUrl + "events=true&sku=" + Mapbox.getSkuToken(); + } else { + resourceUrl = resourceUrl + "events=true"; + } } return resourceUrl; } diff --git a/platform/android/MapboxGLAndroidSDK/src/main/java/com/mapbox/mapboxsdk/module/telemetry/TelemetryImpl.java b/platform/android/MapboxGLAndroidSDK/src/main/java/com/mapbox/mapboxsdk/module/telemetry/TelemetryImpl.java index 944999715a..cd44e2591e 100644 --- a/platform/android/MapboxGLAndroidSDK/src/main/java/com/mapbox/mapboxsdk/module/telemetry/TelemetryImpl.java +++ b/platform/android/MapboxGLAndroidSDK/src/main/java/com/mapbox/mapboxsdk/module/telemetry/TelemetryImpl.java @@ -41,7 +41,9 @@ public class TelemetryImpl implements TelemetryDefinition { public void onAppUserTurnstileEvent() { AppUserTurnstile turnstileEvent = new AppUserTurnstile(BuildConfig.MAPBOX_SDK_IDENTIFIER, BuildConfig.MAPBOX_SDK_VERSION); - turnstileEvent.setSkuId(MapboxAccounts.SKU_ID_MAPS_MAUS); + if (Mapbox.getSkuToken() != null) { + turnstileEvent.setSkuId(MapboxAccounts.SKU_ID_MAPS_MAUS); + } telemetry.push(turnstileEvent); telemetry.push(MapEventFactory.buildMapLoadEvent(new PhoneState(appContext))); } diff --git a/platform/android/MapboxGLAndroidSDKTestApp/src/main/AndroidManifest.xml b/platform/android/MapboxGLAndroidSDKTestApp/src/main/AndroidManifest.xml index 53f6076a60..01f32b5406 100644 --- a/platform/android/MapboxGLAndroidSDKTestApp/src/main/AndroidManifest.xml +++ b/platform/android/MapboxGLAndroidSDKTestApp/src/main/AndroidManifest.xml @@ -991,6 +991,11 @@ android:name="com.mapbox.MeasureTileDownloadOn" android:value="false" /> + + + \ No newline at end of file -- cgit v1.2.1