Skip to content

Commit d745617

Browse files
authored
Merge pull request #551 from adjust/v500_sdk2001
PV2 reloaded (or PV3)
2 parents 8fda767 + bc5a0f3 commit d745617

File tree

7 files changed

+232
-15
lines changed

7 files changed

+232
-15
lines changed

Adjust/sdk-core/src/main/java/com/adjust/sdk/ActivityHandler.java

Lines changed: 85 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -805,11 +805,21 @@ public void run() {
805805
}
806806

807807
@Override
808-
public void verifyPurchase(final AdjustPurchase purchase, final OnPurchaseVerificationFinishedListener callback) {
808+
public void verifyPlayStorePurchase(final AdjustPlayStorePurchase purchase, final OnPurchaseVerificationFinishedListener callback) {
809809
executor.submit(new Runnable() {
810810
@Override
811811
public void run() {
812-
verifyPurchaseI(purchase, callback);
812+
verifyPlayStorePurchaseI(purchase, callback);
813+
}
814+
});
815+
}
816+
817+
@Override
818+
public void verifyAndTrackPlayStorePurchase(AdjustEvent event, OnPurchaseVerificationFinishedListener callback) {
819+
executor.submit(new Runnable() {
820+
@Override
821+
public void run() {
822+
verifyAndTrackPlayStorePurchaseI(event, callback);
813823
}
814824
});
815825
}
@@ -2494,7 +2504,8 @@ private void trackPlayStoreSubscriptionI(final AdjustPlayStoreSubscription subsc
24942504
packageHandler.sendFirstPackage();
24952505
}
24962506

2497-
private void verifyPurchaseI(final AdjustPurchase purchase, final OnPurchaseVerificationFinishedListener callback) {
2507+
private void verifyPlayStorePurchaseI(final AdjustPlayStorePurchase purchase,
2508+
final OnPurchaseVerificationFinishedListener callback) {
24982509
if (callback == null) {
24992510
logger.warn("Purchase verification aborted because verification callback is null");
25002511
return;
@@ -2563,6 +2574,77 @@ private void verifyPurchaseI(final AdjustPurchase purchase, final OnPurchaseVeri
25632574
purchaseVerificationHandler.sendPurchaseVerificationPackage(verificationPackage);
25642575
}
25652576

2577+
private void verifyAndTrackPlayStorePurchaseI(final AdjustEvent event,
2578+
final OnPurchaseVerificationFinishedListener callback) {
2579+
if (callback == null) {
2580+
logger.warn("Purchase verification aborted because verification callback is null");
2581+
return;
2582+
}
2583+
// from this moment on we know that we can ping client callback in case of error
2584+
if (adjustConfig.isDataResidency) {
2585+
logger.warn("Purchase verification not available for data residency users right now");
2586+
AdjustPurchaseVerificationResult result = new AdjustPurchaseVerificationResult(
2587+
"not_verified",
2588+
109,
2589+
"Purchase verification not available for data residency users right now");
2590+
callback.onVerificationFinished(result);
2591+
return;
2592+
}
2593+
if (!checkActivityStateI(activityState)) {
2594+
AdjustPurchaseVerificationResult result = new AdjustPurchaseVerificationResult(
2595+
"not_verified",
2596+
102,
2597+
"Purchase verification aborted because SDK is still not initialized");
2598+
callback.onVerificationFinished(result);
2599+
logger.warn("Purchase verification aborted because SDK is still not initialized");
2600+
return;
2601+
}
2602+
if (!isEnabledI()) {
2603+
AdjustPurchaseVerificationResult result = new AdjustPurchaseVerificationResult(
2604+
"not_verified",
2605+
103,
2606+
"Purchase verification aborted because SDK is disabled");
2607+
callback.onVerificationFinished(result);
2608+
logger.warn("Purchase verification aborted because SDK is disabled");
2609+
return;
2610+
}
2611+
if (activityState.isGdprForgotten) {
2612+
AdjustPurchaseVerificationResult result = new AdjustPurchaseVerificationResult(
2613+
"not_verified",
2614+
104,
2615+
"Purchase verification aborted because user is GDPR forgotten");
2616+
callback.onVerificationFinished(result);
2617+
logger.warn("Purchase verification aborted because user is GDPR forgotten");
2618+
return;
2619+
}
2620+
if (event == null) {
2621+
logger.warn("Purchase verification aborted because event instance is null");
2622+
AdjustPurchaseVerificationResult verificationResult =
2623+
new AdjustPurchaseVerificationResult(
2624+
"not_verified",
2625+
106,
2626+
"Purchase verification aborted because event instance is null");
2627+
callback.onVerificationFinished(verificationResult);
2628+
return;
2629+
}
2630+
2631+
long now = System.currentTimeMillis();
2632+
PackageBuilder packageBuilder = new PackageBuilder(adjustConfig, deviceInfo, activityState, globalParameters, now);
2633+
ActivityPackage verificationPackage = packageBuilder.buildVerificationPackage(event, callback);
2634+
if (verificationPackage == null) {
2635+
logger.warn("Purchase verification aborted because verification package is null");
2636+
AdjustPurchaseVerificationResult verificationResult =
2637+
new AdjustPurchaseVerificationResult(
2638+
"not_verified",
2639+
107,
2640+
"Purchase verification aborted because verification package is null");
2641+
callback.onVerificationFinished(verificationResult);
2642+
return;
2643+
}
2644+
purchaseVerificationHandler.sendPurchaseVerificationPackage(verificationPackage);
2645+
trackEventI(event);
2646+
}
2647+
25662648
private void setCoppaComplianceI(final boolean coppaEnabled) {
25672649
if (activityState == null) { return; }
25682650
if (!isEnabledI()) { return; }

Adjust/sdk-core/src/main/java/com/adjust/sdk/Adjust.java

Lines changed: 14 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -431,13 +431,25 @@ public static void getSdkVersion(final OnSdkVersionReadListener onSdkVersionRead
431431
* @param purchase AdjustPurchase object to be tracked
432432
* @param callback Callback to obtain verification results
433433
*/
434-
public static void verifyPurchase(final AdjustPurchase purchase, final OnPurchaseVerificationFinishedListener callback) {
434+
public static void verifyPlayStorePurchase(final AdjustPlayStorePurchase purchase,
435+
final OnPurchaseVerificationFinishedListener callback) {
435436
if (callback == null) {
436437
AdjustFactory.getLogger().error("Purchase verification aborted because verification callback is null");
437438
return;
438439
}
439440
AdjustInstance adjustInstance = Adjust.getDefaultInstance();
440-
adjustInstance.verifyPurchase(purchase, callback);
441+
adjustInstance.verifyPlayStorePurchase(purchase, callback);
442+
}
443+
444+
/**
445+
* Verify in app purchase from Google Play and track Adjust event associated with it.
446+
*
447+
* @param event AdjustEvent object to be tracked
448+
* @param callback Callback to obtain verification results
449+
*/
450+
public static void verifyAndTrackPlayStorePurchase(final AdjustEvent event, OnPurchaseVerificationFinishedListener callback) {
451+
AdjustInstance adjustInstance = Adjust.getDefaultInstance();
452+
adjustInstance.verifyAndTrackPlayStorePurchase(event, callback);
441453
}
442454

443455
/**

Adjust/sdk-core/src/main/java/com/adjust/sdk/AdjustInstance.java

Lines changed: 23 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -771,7 +771,8 @@ private boolean isInstanceEnabled() {
771771
* @param purchase AdjustPurchase object to be verified
772772
* @param callback Callback to be pinged with the verification results
773773
*/
774-
public void verifyPurchase(final AdjustPurchase purchase, final OnPurchaseVerificationFinishedListener callback) {
774+
public void verifyPlayStorePurchase(final AdjustPlayStorePurchase purchase,
775+
final OnPurchaseVerificationFinishedListener callback) {
775776
if (!checkActivityHandler("verifyPurchase")) {
776777
AdjustPurchaseVerificationResult result = new AdjustPurchaseVerificationResult(
777778
"not_verified",
@@ -780,7 +781,27 @@ public void verifyPurchase(final AdjustPurchase purchase, final OnPurchaseVerifi
780781
callback.onVerificationFinished(result);
781782
return;
782783
}
783-
activityHandler.verifyPurchase(purchase, callback);
784+
activityHandler.verifyPlayStorePurchase(purchase, callback);
785+
}
786+
787+
/**
788+
* Verify in app purchase from Google Play and track Adjust event associated with it.
789+
*
790+
* @param event AdjustEvent to be tracked
791+
* @param callback Callback to be pinged with the verification results
792+
*/
793+
public void verifyAndTrackPlayStorePurchase(AdjustEvent event, OnPurchaseVerificationFinishedListener callback) {
794+
if (!checkActivityHandler("verifyAndTrack")) {
795+
if (callback != null) {
796+
AdjustPurchaseVerificationResult result = new AdjustPurchaseVerificationResult(
797+
"not_verified",
798+
100,
799+
"SDK needs to be initialized before making purchase verification request");
800+
callback.onVerificationFinished(result);
801+
}
802+
return;
803+
}
804+
activityHandler.verifyAndTrackPlayStorePurchase(event, callback);
784805
}
785806

786807
/**

Adjust/sdk-core/src/main/java/com/adjust/sdk/AdjustPurchase.java renamed to Adjust/sdk-core/src/main/java/com/adjust/sdk/AdjustPlayStorePurchase.java

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,10 +1,10 @@
11
package com.adjust.sdk;
22

3-
public class AdjustPurchase {
3+
public class AdjustPlayStorePurchase {
44
private final String productId;
55
private final String purchaseToken;
66

7-
public AdjustPurchase(final String productId, final String purchaseToken) {
7+
public AdjustPlayStorePurchase(final String productId, final String purchaseToken) {
88
this.productId = productId;
99
this.purchaseToken = purchaseToken;
1010
}

Adjust/sdk-core/src/main/java/com/adjust/sdk/IActivityHandler.java

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -74,7 +74,9 @@ public interface IActivityHandler {
7474

7575
void trackPlayStoreSubscription(AdjustPlayStoreSubscription subscription);
7676

77-
void verifyPurchase(AdjustPurchase purchase, OnPurchaseVerificationFinishedListener callback);
77+
void verifyPlayStorePurchase(AdjustPlayStorePurchase purchase, OnPurchaseVerificationFinishedListener callback);
78+
79+
void verifyAndTrackPlayStorePurchase(AdjustEvent event, OnPurchaseVerificationFinishedListener callback);
7880

7981
void setCoppaCompliance(boolean enabled);
8082

Adjust/sdk-core/src/main/java/com/adjust/sdk/PackageBuilder.java

Lines changed: 102 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -209,7 +209,7 @@ ActivityPackage buildSubscriptionPackage(AdjustPlayStoreSubscription subscriptio
209209
return subscriptionPackage;
210210
}
211211

212-
ActivityPackage buildVerificationPackage(AdjustPurchase purchase, OnPurchaseVerificationFinishedListener callback) {
212+
ActivityPackage buildVerificationPackage(AdjustPlayStorePurchase purchase, OnPurchaseVerificationFinishedListener callback) {
213213
Map<String, String> parameters = getVerificationParameters(purchase);
214214
ActivityPackage purchaseVerificationPackage = getDefaultActivityPackage(ActivityKind.PURCHASE_VERIFICATION);
215215
purchaseVerificationPackage.setPath("/verify");
@@ -220,6 +220,17 @@ ActivityPackage buildVerificationPackage(AdjustPurchase purchase, OnPurchaseVeri
220220
return purchaseVerificationPackage;
221221
}
222222

223+
ActivityPackage buildVerificationPackage(AdjustEvent event, OnPurchaseVerificationFinishedListener callback) {
224+
Map<String, String> parameters = getVerificationParameters(event);
225+
ActivityPackage purchaseVerificationPackage = getDefaultActivityPackage(ActivityKind.PURCHASE_VERIFICATION);
226+
purchaseVerificationPackage.setPath("/verify");
227+
purchaseVerificationPackage.setSuffix("");
228+
purchaseVerificationPackage.setPurchaseVerificationCallback(callback);
229+
230+
purchaseVerificationPackage.setParameters(parameters);
231+
return purchaseVerificationPackage;
232+
}
233+
223234
private Map<String, String> getSessionParameters() {
224235
Map<String, String> parameters = new HashMap<String, String>();
225236

@@ -1050,7 +1061,7 @@ private Map<String, String> getSubscriptionParameters(AdjustPlayStoreSubscriptio
10501061
return parameters;
10511062
}
10521063

1053-
private Map<String, String> getVerificationParameters(AdjustPurchase purchase) {
1064+
private Map<String, String> getVerificationParameters(AdjustPlayStorePurchase purchase) {
10541065
Map<String, String> parameters = new HashMap<String, String>();
10551066

10561067
deviceInfo.reloadOtherDeviceInfoParams(adjustConfig, coppaEnabled, logger);
@@ -1140,6 +1151,95 @@ private Map<String, String> getVerificationParameters(AdjustPurchase purchase) {
11401151
return parameters;
11411152
}
11421153

1154+
private Map<String, String> getVerificationParameters(AdjustEvent event) {
1155+
Map<String, String> parameters = new HashMap<String, String>();
1156+
1157+
deviceInfo.reloadOtherDeviceInfoParams(adjustConfig, coppaEnabled, logger);
1158+
1159+
// Check if plugin is used and if yes, add read parameters.
1160+
if (deviceInfo.imeiParameters != null) {
1161+
parameters.putAll(deviceInfo.imeiParameters);
1162+
}
1163+
1164+
// Check if oaid plugin is used and if yes, add the parameter
1165+
if (deviceInfo.oaidParameters != null) {
1166+
parameters.putAll(deviceInfo.oaidParameters);
1167+
}
1168+
1169+
// Device identifiers.
1170+
deviceInfo.reloadPlayIds(adjustConfig, coppaEnabled, playStoreKidsAppEnabled);
1171+
PackageBuilder.addString(parameters, "android_uuid", activityStateCopy.uuid);
1172+
PackageBuilder.addString(parameters, "gps_adid", deviceInfo.playAdId);
1173+
PackageBuilder.addLong(parameters, "gps_adid_attempt", deviceInfo.playAdIdAttempt);
1174+
PackageBuilder.addString(parameters, "gps_adid_src", deviceInfo.playAdIdSource);
1175+
PackageBuilder.addBoolean(parameters, "tracking_enabled", deviceInfo.isTrackingEnabled);
1176+
PackageBuilder.addString(parameters, "fire_adid", deviceInfo.fireAdId);
1177+
PackageBuilder.addBoolean(parameters, "fire_tracking_enabled", deviceInfo.fireTrackingEnabled);
1178+
1179+
if (!containsPlayIds(parameters) && !containsFireIds(parameters)) {
1180+
logger.warn("Google Advertising ID or Fire Advertising ID not detected, " +
1181+
"fallback to non Google Play and Fire identifiers will take place");
1182+
deviceInfo.reloadNonPlayIds(adjustConfig, coppaEnabled, playStoreKidsAppEnabled);
1183+
PackageBuilder.addString(parameters, "android_id", deviceInfo.androidId);
1184+
}
1185+
1186+
// Rest of the parameters.
1187+
PackageBuilder.addString(parameters, "api_level", deviceInfo.apiLevel);
1188+
PackageBuilder.addString(parameters, "app_token", adjustConfig.appToken);
1189+
PackageBuilder.addString(parameters, "app_version", deviceInfo.appVersion);
1190+
PackageBuilder.addBoolean(parameters, "attribution_deeplink", true);
1191+
PackageBuilder.addLong(parameters, "connectivity_type", deviceInfo.connectivityType);
1192+
PackageBuilder.addString(parameters, "country", deviceInfo.country);
1193+
PackageBuilder.addString(parameters, "cpu_type", deviceInfo.abi);
1194+
PackageBuilder.addDateInMilliseconds(parameters, "created_at", createdAt);
1195+
PackageBuilder.addString(parameters, "default_tracker", adjustConfig.defaultTracker);
1196+
PackageBuilder.addBoolean(parameters, "needs_cost", adjustConfig.needsCost);
1197+
PackageBuilder.addString(parameters, "device_manufacturer", deviceInfo.deviceManufacturer);
1198+
PackageBuilder.addString(parameters, "device_name", deviceInfo.deviceName);
1199+
PackageBuilder.addString(parameters, "device_type", deviceInfo.deviceType);
1200+
PackageBuilder.addLong(parameters, "ui_mode", deviceInfo.uiMode);
1201+
PackageBuilder.addString(parameters, "display_height", deviceInfo.displayHeight);
1202+
PackageBuilder.addString(parameters, "display_width", deviceInfo.displayWidth);
1203+
PackageBuilder.addString(parameters, "environment", adjustConfig.environment);
1204+
PackageBuilder.addString(parameters, "external_device_id", adjustConfig.externalDeviceId);
1205+
PackageBuilder.addString(parameters, "fb_id", deviceInfo.fbAttributionId);
1206+
PackageBuilder.addString(parameters, "hardware_name", deviceInfo.hardwareName);
1207+
PackageBuilder.addString(parameters, "installed_at", deviceInfo.appInstallTime);
1208+
PackageBuilder.addString(parameters, "language", deviceInfo.language);
1209+
PackageBuilder.addDuration(parameters, "last_interval", activityStateCopy.lastInterval);
1210+
PackageBuilder.addString(parameters, "mcc", deviceInfo.mcc);
1211+
PackageBuilder.addString(parameters, "mnc", deviceInfo.mnc);
1212+
PackageBuilder.addBoolean(parameters, "needs_response_details", true);
1213+
PackageBuilder.addString(parameters, "os_build", deviceInfo.buildName);
1214+
PackageBuilder.addString(parameters, "os_name", deviceInfo.osName);
1215+
PackageBuilder.addString(parameters, "os_version", deviceInfo.osVersion);
1216+
PackageBuilder.addString(parameters, "package_name", deviceInfo.packageName);
1217+
PackageBuilder.addString(parameters, "push_token", activityStateCopy.pushToken);
1218+
PackageBuilder.addString(parameters, "screen_density", deviceInfo.screenDensity);
1219+
PackageBuilder.addString(parameters, "screen_format", deviceInfo.screenFormat);
1220+
PackageBuilder.addString(parameters, "screen_size", deviceInfo.screenSize);
1221+
PackageBuilder.addLong(parameters, "session_count", activityStateCopy.sessionCount);
1222+
PackageBuilder.addDuration(parameters, "session_length", activityStateCopy.sessionLength);
1223+
PackageBuilder.addLong(parameters, "subsession_count", activityStateCopy.subsessionCount);
1224+
PackageBuilder.addDuration(parameters, "time_spent", activityStateCopy.timeSpent);
1225+
PackageBuilder.addString(parameters, "updated_at", deviceInfo.appUpdateTime);
1226+
1227+
// purchase verification specific parameters
1228+
PackageBuilder.addString(parameters, "product_id", event.getProductId());
1229+
PackageBuilder.addString(parameters, "purchase_token", event.getPurchaseToken());
1230+
PackageBuilder.addString(parameters, "event_token", event.getEventToken());
1231+
PackageBuilder.addString(parameters, "currency", event.getCurrency());
1232+
PackageBuilder.addDouble(parameters, "revenue", event.getRevenue());
1233+
1234+
// google play games
1235+
PackageBuilder.addBoolean(parameters, "gpg_pc_enabled", deviceInfo.isGooglePlayGamesForPC ? true : null);
1236+
1237+
injectFeatureFlagsWithParameters(parameters);
1238+
1239+
checkDeviceIds(parameters);
1240+
return parameters;
1241+
}
1242+
11431243
private ActivityPackage getDefaultActivityPackage(ActivityKind activityKind) {
11441244
ActivityPackage activityPackage = new ActivityPackage(activityKind);
11451245
activityPackage.setClientSdk(deviceInfo.clientSdk);

Adjust/test-app-core/src/main/java/com/adjust/testapp/AdjustCommandExecutor.java

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -18,7 +18,7 @@
1818
import com.adjust.sdk.AdjustEventFailure;
1919
import com.adjust.sdk.AdjustEventSuccess;
2020
import com.adjust.sdk.AdjustPlayStoreSubscription;
21-
import com.adjust.sdk.AdjustPurchase;
21+
import com.adjust.sdk.AdjustPlayStorePurchase;
2222
import com.adjust.sdk.AdjustPurchaseVerificationResult;
2323
import com.adjust.sdk.AdjustSessionFailure;
2424
import com.adjust.sdk.AdjustSessionSuccess;
@@ -793,8 +793,8 @@ private void verifyPurchase() {
793793
String purchaseToken = command.getFirstParameterValue("purchaseToken");
794794

795795
final String localBasePath = basePath;
796-
AdjustPurchase purchase = new AdjustPurchase(sku, purchaseToken);
797-
Adjust.verifyPurchase(purchase, new OnPurchaseVerificationFinishedListener() {
796+
AdjustPlayStorePurchase purchase = new AdjustPlayStorePurchase(sku, purchaseToken);
797+
Adjust.verifyPlayStorePurchase(purchase, new OnPurchaseVerificationFinishedListener() {
798798
@Override
799799
public void onVerificationFinished(AdjustPurchaseVerificationResult result) {
800800
MainActivity.testLibrary.addInfoToSend("verification_status", result.getVerificationStatus());

0 commit comments

Comments
 (0)