Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Version 4.35.0 #580

Merged
merged 6 commits into from
Sep 12, 2023
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion Adjust/build.gradle
Original file line number Diff line number Diff line change
Expand Up @@ -9,7 +9,7 @@ ext {
coreMinSdkVersion = 9
coreCompileSdkVersion = 33
coreTargetSdkVersion = 33
coreVersionName = '4.34.0'
coreVersionName = '4.35.0'
defaultVersionCode = 1
webbridgeMinSdkVersion = 17
samsungReferrerMinSdkVersion = 18
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -457,6 +457,11 @@ public boolean updateAttributionI(AdjustAttribution attribution) {
return false;
}

if (adjustConfig.finalAttributionEnabled && activityState.askingAttribution) {
logger.info("Not updating intermediate attribution");
return false;
}

if (attribution.equals(this.attribution)) {
return false;
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -200,7 +200,7 @@ public String getExtendedString() {
if (parameters != null) {
builder.append("Parameters:");
SortedMap<String,String> sortedParameters = new TreeMap<String,String>(parameters);
List<String> stringsToExclude = Arrays.asList("app_secret", "secret_id", "event_callback_id");
List<String> stringsToExclude = Arrays.asList("app_secret", "secret_id", "event_callback_id", "adj_signing_id");
for (Map.Entry<String,String> entry : sortedParameters.entrySet() ) {
String key = entry.getKey();
if (stringsToExclude.contains(key)) {
Expand Down
2 changes: 1 addition & 1 deletion Adjust/sdk-core/src/main/java/com/adjust/sdk/Adjust.java
Original file line number Diff line number Diff line change
Expand Up @@ -34,7 +34,7 @@ private Adjust() {
*/
public static synchronized AdjustInstance getDefaultInstance() {
@SuppressWarnings("unused")
String VERSION = "!SDK-VERSION-STRING!:com.adjust.sdk:adjust-android:4.34.0";
String VERSION = "!SDK-VERSION-STRING!:com.adjust.sdk:adjust-android:4.35.0";

if (defaultInstance == null) {
defaultInstance = new AdjustInstance();
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -44,6 +44,7 @@ public class AdjustConfig {
String preinstallFilePath;
boolean playStoreKidsAppEnabled;
boolean coppaCompliantEnabled;
boolean finalAttributionEnabled;

public static final String ENVIRONMENT_SANDBOX = "sandbox";
public static final String ENVIRONMENT_PRODUCTION = "production";
Expand Down Expand Up @@ -197,6 +198,10 @@ public void setCoppaCompliantEnabled(boolean coppaCompliantEnabled) {
this.coppaCompliantEnabled = coppaCompliantEnabled;
}

public void setFinalAttributionEnabled(boolean finalAttributionEnabled) {
this.finalAttributionEnabled = finalAttributionEnabled;
}

public boolean isValid() {
if (!checkAppToken(appToken)) return false;
if (!checkEnvironment(environment)) return false;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -30,7 +30,7 @@ public interface Constants {

String SCHEME = "https";
String AUTHORITY = "app.adjust.com";
String CLIENT_SDK = "android4.34.0";
String CLIENT_SDK = "android4.35.0";
String LOGTAG = "Adjust";
String REFTAG = "reftag";
String INSTALL_REFERRER = "install_referrer";
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -529,18 +529,25 @@ private String buildAndExtractAuthorizationHeader(final Map<String, String> para
final ActivityKind activityKind) {
String activityKindString = activityKind.toString();

String adjSigningId = extractAdjSigningId(parameters);
String secretId = extractSecretId(parameters);
String headersId = extractHeadersId(parameters);
String signature = extractSignature(parameters);
String algorithm = extractAlgorithm(parameters);
String nativeVersion = extractNativeVersion(parameters);

String authorizationHeader = buildAuthorizationHeaderV2(signature, secretId,
String authorizationHeader = buildAuthorizationHeaderV2WithAdjSigningId(signature, adjSigningId,
headersId, algorithm, nativeVersion);
if (authorizationHeader != null) {
return authorizationHeader;
}

authorizationHeader = buildAuthorizationHeaderV2WithSecretId(signature, secretId, headersId,
algorithm, nativeVersion);
if (authorizationHeader != null) {
return authorizationHeader;
}

String appSecret = extractAppSecret(parameters);
return buildAuthorizationHeaderV1(parameters, appSecret, secretId, activityKindString);
}
Expand Down Expand Up @@ -574,11 +581,35 @@ private String buildAuthorizationHeaderV1(final Map<String, String> parameters,
return authorizationHeader;
}

private String buildAuthorizationHeaderV2(final String signature,
final String secretId,
final String headersId,
final String algorithm,
final String nativeVersion)
private String buildAuthorizationHeaderV2WithAdjSigningId(final String signature,
final String adjSigningId,
final String headersId,
final String algorithm,
final String nativeVersion)
{
if (adjSigningId == null || signature == null || headersId == null) {
return null;
}

String signatureHeader = Util.formatString("signature=\"%s\"", signature);
String adjSigningIdHeader = Util.formatString("adj_signing_id=\"%s\"", adjSigningId);
String idHeader = Util.formatString("headers_id=\"%s\"", headersId);
String algorithmHeader = Util.formatString("algorithm=\"%s\"", algorithm != null ? algorithm : "adj1");
String nativeVersionHeader = Util.formatString("native_version=\"%s\"", nativeVersion != null ? nativeVersion : "");

String authorizationHeader = Util.formatString("Signature %s,%s,%s,%s,%s",
signatureHeader, adjSigningIdHeader, algorithmHeader, idHeader, nativeVersionHeader);

logger.verbose("authorizationHeader: %s", authorizationHeader);

return authorizationHeader;
}

private String buildAuthorizationHeaderV2WithSecretId(final String signature,
final String secretId,
final String headersId,
final String algorithm,
final String nativeVersion)
{
if (secretId == null || signature == null || headersId == null) {
return null;
Expand Down Expand Up @@ -702,4 +733,10 @@ private static String extractHeadersId(final Map<String, String> parameters) {
private static void extractEventCallbackId(final Map<String, String> parameters) {
parameters.remove("event_callback_id");
}

private static String extractAdjSigningId(final Map<String, String> parameters) {
return parameters.remove("adj_signing_id");
}


}
2 changes: 1 addition & 1 deletion Adjust/sdk-plugin-criteo/build.gradle
Original file line number Diff line number Diff line change
Expand Up @@ -23,7 +23,7 @@ dependencies {
// Add SDK via module.
compileOnly project(':sdk-core')
// Add SDK via Maven.
// implementation 'com.adjust.sdk:adjust-android:4.34.0'
// implementation 'com.adjust.sdk:adjust-android:4.35.0'
}

// read local properties
Expand Down
2 changes: 1 addition & 1 deletion Adjust/sdk-plugin-imei/build.gradle
Original file line number Diff line number Diff line change
Expand Up @@ -22,7 +22,7 @@ dependencies {
// Add SDK via module.
compileOnly project(':sdk-core')
// Add SDK via Maven.
// implementation 'com.adjust.sdk:adjust-android:4.34.0'
// implementation 'com.adjust.sdk:adjust-android:4.35.0'
}

// read local properties
Expand Down
2 changes: 1 addition & 1 deletion Adjust/sdk-plugin-oaid/build.gradle
Original file line number Diff line number Diff line change
Expand Up @@ -25,7 +25,7 @@ dependencies {
// Add SDK via module.
compileOnly project(':sdk-core')
// Add SDK via Maven.
// implementation 'com.adjust.sdk:adjust-android:4.34.0'
// implementation 'com.adjust.sdk:adjust-android:4.35.0'
implementation 'com.huawei.hms:ads-identifier:3.4.56.300'
}

Expand Down
2 changes: 1 addition & 1 deletion Adjust/sdk-plugin-samsung-referrer/build.gradle
Original file line number Diff line number Diff line change
Expand Up @@ -21,7 +21,7 @@ dependencies {
// Add SDK via module.
compileOnly project(':sdk-core')
// Add SDK via Maven.
// implementation 'com.adjust.sdk:adjust-android:4.34.0'
// implementation 'com.adjust.sdk:adjust-android:4.35.0'

// Add Samsung referrer lib via Maven.
implementation 'store.galaxy.samsung.installreferrer:samsung_galaxystore_install_referrer:3.0.1'
Expand Down
2 changes: 1 addition & 1 deletion Adjust/sdk-plugin-sociomantic/build.gradle
Original file line number Diff line number Diff line change
Expand Up @@ -22,7 +22,7 @@ dependencies {
// Add SDK via module.
compileOnly project(':sdk-core')
// Add SDK via Maven.
// implementation 'com.adjust.sdk:adjust-android:4.34.0'
// implementation 'com.adjust.sdk:adjust-android:4.35.0'
}

// read local properties
Expand Down
2 changes: 1 addition & 1 deletion Adjust/sdk-plugin-trademob/build.gradle
Original file line number Diff line number Diff line change
Expand Up @@ -22,7 +22,7 @@ dependencies {
// Add SDK via module.
compileOnly project(':sdk-core')
// Add SDK via Maven.
// implementation 'com.adjust.sdk:adjust-android:4.34.0'
// implementation 'com.adjust.sdk:adjust-android:4.35.0'
}

// read local properties
Expand Down
2 changes: 1 addition & 1 deletion Adjust/sdk-plugin-vivo-referrer/build.gradle
Original file line number Diff line number Diff line change
Expand Up @@ -23,7 +23,7 @@ dependencies {
// Add SDK via module.
compileOnly project(':sdk-core')
// Add SDK via Maven.
// implementation 'com.adjust.sdk:adjust-android:4.34.0'
// implementation 'com.adjust.sdk:adjust-android:4.35.0'
}

// read local properties
Expand Down
2 changes: 1 addition & 1 deletion Adjust/sdk-plugin-webbridge/build.gradle
Original file line number Diff line number Diff line change
Expand Up @@ -22,7 +22,7 @@ dependencies {
// Add SDK via module.
compileOnly project(':sdk-core')
// Add SDK via Maven.
// implementation 'com.adjust.sdk:adjust-android:4.34.0'
// implementation 'com.adjust.sdk:adjust-android:4.35.0'
}

// read local properties
Expand Down
2 changes: 1 addition & 1 deletion Adjust/sdk-plugin-webbridge/src/main/assets/adjust.js
Original file line number Diff line number Diff line change
Expand Up @@ -211,7 +211,7 @@ var Adjust = {
if (this.adjustConfig) {
return this.adjustConfig.getSdkPrefix();
} else {
return 'web-bridge4.34.0';
return 'web-bridge4.35.0';
}
},

Expand Down
5 changes: 5 additions & 0 deletions Adjust/sdk-plugin-webbridge/src/main/assets/adjust_config.js
Original file line number Diff line number Diff line change
Expand Up @@ -55,6 +55,7 @@ function AdjustConfig(appToken, environment, legacy) {
this.preinstallFilePath = null;
this.playStoreKidsAppEnabled = null;
this.coppaCompliantEnabled = null;
this.finalAttributionEnabled = null;
}

AdjustConfig.EnvironmentSandbox = 'sandbox';
Expand Down Expand Up @@ -259,3 +260,7 @@ AdjustConfig.prototype.setPlayStoreKidsAppEnabled = function(isEnabled) {
AdjustConfig.prototype.setCoppaCompliantEnabled = function(isEnabled) {
this.coppaCompliantEnabled = isEnabled;
};

AdjustConfig.prototype.setFinalAttributionEnabled = function(isEnabled) {
this.finalAttributionEnabled = isEnabled;
};
Original file line number Diff line number Diff line change
Expand Up @@ -174,6 +174,7 @@ public void onCreate(String adjustConfigString) {
Object preinstallFilePathField = jsonAdjustConfig.get("preinstallFilePath");
Object playStoreKidsAppEnabledField = jsonAdjustConfig.get("playStoreKidsAppEnabled");
Object coppaCompliantEnabledField = jsonAdjustConfig.get("coppaCompliantEnabled");
Object finalAttributionEnabledField = jsonAdjustConfig.get("finalAttributionEnabled");

String appToken = AdjustBridgeUtil.fieldToString(appTokenField);
String environment = AdjustBridgeUtil.fieldToString(environmentField);
Expand Down Expand Up @@ -401,6 +402,12 @@ public boolean launchReceivedDeeplink(Uri deeplink) {
adjustConfig.setCoppaCompliantEnabled(coppaCompliantEnabled);
}

// Final attribution config
Boolean finalAttributionEnabled = AdjustBridgeUtil.fieldToBoolean(finalAttributionEnabledField);
if (finalAttributionEnabled != null) {
adjustConfig.setFinalAttributionEnabled(finalAttributionEnabled);
}

// Manually call onResume() because web view initialisation will happen a bit delayed.
// With this delay, it will miss lifecycle callback onResume() initial firing.
Adjust.onCreate(adjustConfig);
Expand Down
2 changes: 1 addition & 1 deletion Adjust/sdk-plugin-xiaomi-referrer/build.gradle
Original file line number Diff line number Diff line change
Expand Up @@ -23,7 +23,7 @@ dependencies {
// Add SDK via module.
compileOnly project(':sdk-core')
// Add SDK via Maven.
// implementation 'com.adjust.sdk:adjust-android:4.34.0'
// implementation 'com.adjust.sdk:adjust-android:4.35.0'

// Add xiaomi referrer lib via Maven.
implementation 'com.miui.referrer:homereferrer:1.0.0.6'
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -341,6 +341,12 @@ private void config() {
adjustConfig.setPlayStoreKidsAppEnabled(playStoreKids);
}

if (command.containsParameter("finalAttributionEnabled")) {
String finalAttributionEnabledS = command.getFirstParameterValue("finalAttributionEnabled");
boolean finalAttributionEnabled = "true".equals(finalAttributionEnabledS);
adjustConfig.setFinalAttributionEnabled(finalAttributionEnabled);
}

if(command.containsParameter("deferredDeeplinkCallback")) {
adjustConfig.setOnDeeplinkResponseListener(new OnDeeplinkResponseListener() {
@Override
Expand Down
6 changes: 6 additions & 0 deletions Adjust/test-app-webbridge/src/main/assets/command_executor.js
Original file line number Diff line number Diff line change
Expand Up @@ -352,6 +352,12 @@ AdjustCommandExecutor.prototype.config = function(params) {
adjustConfig.setPlayStoreKidsAppEnabled(playStoreKids);
}

if ('finalAttributionEnabled' in params) {
var finalAttributionEnabledS = getFirstParameterValue(params, 'finalAttributionEnabled');
var finalAttributionEnabled = finalAttributionEnabledS == 'true';
adjustConfig.setFinalAttributionEnabled(finalAttributionEnabled);
}

if ('attributionCallbackSendAll' in params) {
var basePath = this.basePath;
adjustConfig.setAttributionCallback(function(attribution) {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -53,7 +53,7 @@ public TestActivityPackage(ActivityPackage activityPackage) {
// default values
appToken = "123456789012";
environment = "sandbox";
clientSdk = "android4.34.0";
clientSdk = "android4.35.0";
suffix = "";
attribution = new AdjustAttribution();
playServices = true;
Expand Down
7 changes: 7 additions & 0 deletions CHANGELOG.md
Original file line number Diff line number Diff line change
@@ -1,3 +1,10 @@
### Version 4.35.0 (12th September 2023)
#### Added
- Added support for SigV3 library. Update authorization header building logic to use `adj_signing_id`.
- Added `setFinalAttributionEnabled(boolean)` method to `AdjustConfig` to indicate if only final attribution is needed in attribution callback (by default attribution callback return intermediate attribution as well before final attribution if not enabled with this setter method).

---

### Version 4.34.0 (17th August 2023)
#### Added
- Added support for purchase verification. In case you are using this feature, you can now use it by calling `verifyPurchase` method of the `Adjust` instance.
Expand Down
2 changes: 1 addition & 1 deletion VERSION
Original file line number Diff line number Diff line change
@@ -1 +1 @@
4.34.0
4.35.0