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

Feat/handshake config #668

Merged
merged 31 commits into from
Oct 10, 2024
Merged
Show file tree
Hide file tree
Changes from 9 commits
Commits
Show all changes
31 commits
Select commit Hold shift + click to select a range
db5402e
feat(SDK-4042): Adds manifest tag for handshake domain
CTLalit Sep 11, 2024
6231b7f
chore(SDK-4042): Rearranges api class
CTLalit Sep 11, 2024
70853f9
feat(SDK-4042): passes custom domain to api class
CTLalit Sep 11, 2024
ef78d69
feat(SDK-4042): Rearranges api class
CTLalit Sep 12, 2024
56ee2e7
feat(SDK-4042): changes need handshake method + ctapi
CTLalit Sep 13, 2024
c95ac25
feat(SDK-4042): fixes set handshake domain + idiomatic kotlin syntax
CTLalit Sep 16, 2024
8b55b91
feat(SDK-4042): adds custom handshake header
CTLalit Sep 16, 2024
692e4c1
feat(SDK-4042): fixes pr comments
CTLalit Sep 16, 2024
0756980
feat(SDK-4042): fixes manifest
CTLalit Sep 16, 2024
639ea1f
feat(SDK-4042): removes duplicate function
CTLalit Sep 19, 2024
99e0457
chore(SDK-4042): renames method param, moves method
CTLalit Sep 19, 2024
e898603
chore(SDK-4042): changes isNullOrEmpty to isNullOrBlank
CTLalit Sep 19, 2024
0974ca6
feat(SDK-4063): fixes bug with switching configs
CTLalit Sep 19, 2024
6074804
feat(SDK-4063): test cases for ct api
CTLalit Sep 19, 2024
6d8a59c
Add registering of custom templates through a json definition
vasct Jul 25, 2024
2b280de
Merge branch 'develop' into feat/handshake-config
CTLalit Sep 19, 2024
864ea4f
feat(SDK-4063): Removes abstractions
CTLalit Sep 23, 2024
a768f32
feat(SDK-4063): Simplifies ct api logic
CTLalit Sep 24, 2024
dec8276
feat(SDK-4076): Changes need handshake logic
CTLalit Sep 27, 2024
abbdf8d
feat(SDK-4076): Removes cached handshake information
CTLalit Sep 27, 2024
abcd2ba
feat(SDK-4076): Fixes pr comments
CTLalit Sep 30, 2024
37ba220
feat(SDK-4076): removes redundant cast.
CTLalit Sep 30, 2024
f563131
Merge pull request #670 from CleverTap/feat/network-testing
CTLalit Sep 30, 2024
b168bda
Merge branch 'feat/handshake-config' into feat/handshake-config-2
CTLalit Sep 30, 2024
46e7140
feat(SDK-4076): fixes test cases for ctapi
CTLalit Sep 30, 2024
269d097
feat(SDK-4076): flaky tests in repo ignored
CTLalit Sep 30, 2024
20ed304
Merge pull request #672 from CleverTap/feat/handshake-config-2
CTLalit Oct 1, 2024
10945a1
feat(SDK-4076): Cleanup application class to test
CTLalit Oct 7, 2024
314be81
feat(SDK-4076): Adds methods to change credentials
CTLalit Oct 7, 2024
53571e1
chore(SDK-4076): fixes test
CTLalit Oct 9, 2024
8ba33de
chore(SDK-4076): ignores flaky test (unrelated)
CTLalit Oct 10, 2024
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
Original file line number Diff line number Diff line change
Expand Up @@ -299,3 +299,5 @@ fun String?.toJsonOrNull(): JSONObject? {
}
}
}

fun String?.isNotNullAndEmpty() : Boolean = isNullOrEmpty().not()
Original file line number Diff line number Diff line change
Expand Up @@ -1365,10 +1365,10 @@ public void flush() {
public void setSCDomainListener(SCDomainListener scDomainListener) {
coreState.getCallbackManager().setSCDomainListener(scDomainListener);

if(coreState.getNetworkManager() != null) {
if (coreState.getNetworkManager() != null) {
NetworkManager networkManager = (NetworkManager) coreState.getNetworkManager();
String domain = networkManager.getDomain(EventGroup.REGULAR);
if(domain != null) {
if (domain != null) {
scDomainListener.onSCDomainAvailable(getSCDomain(domain));
}
}
Expand Down Expand Up @@ -3039,6 +3039,7 @@ private static CleverTapInstanceConfig getDefaultConfig(Context context) {
String accountRegion = manifest.getAccountRegion();
String proxyDomain = manifest.getProxyDomain();
String spikyProxyDomain = manifest.getSpikeyProxyDomain();
String handshakeDomain = manifest.getHandshakeDomain();
if (accountId == null || accountToken == null) {
Logger.i(
"Account ID or Account token is missing from AndroidManifest.xml, unable to create default instance");
Expand All @@ -3055,6 +3056,9 @@ private static CleverTapInstanceConfig getDefaultConfig(Context context) {
if (spikyProxyDomain != null && !spikyProxyDomain.trim().isEmpty()) {
defaultInstanceConfig.setSpikyProxyDomain(spikyProxyDomain);
}
if (handshakeDomain != null && !handshakeDomain.trim().isEmpty()) {
defaultInstanceConfig.setCustomHandshakeDomain(handshakeDomain);
}
return defaultInstanceConfig;
}

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -49,6 +49,8 @@ public CleverTapInstanceConfig[] newArray(int size) {

private String spikyProxyDomain;

private String customHandshakeDomain;

@NonNull
private ArrayList<String> allowedPushTypes = getAll();

Expand Down Expand Up @@ -113,6 +115,7 @@ public static CleverTapInstanceConfig createInstance(Context context, @NonNull S
this.accountRegion = config.accountRegion;
this.proxyDomain = config.proxyDomain;
this.spikyProxyDomain = config.spikyProxyDomain;
this.customHandshakeDomain = config.customHandshakeDomain;
this.isDefaultInstance = config.isDefaultInstance;
this.analyticsOnly = config.analyticsOnly;
this.personalization = config.personalization;
Expand Down Expand Up @@ -181,6 +184,9 @@ private CleverTapInstanceConfig(String jsonString) throws Throwable {
if (configJsonObject.has(Constants.KEY_SPIKY_PROXY_DOMAIN)) {
this.spikyProxyDomain = configJsonObject.getString(Constants.KEY_SPIKY_PROXY_DOMAIN);
}
if (configJsonObject.has(Constants.KEY_CUSTOM_HANDSHAKE_DOMAIN)) {
this.customHandshakeDomain = configJsonObject.optString(Constants.KEY_CUSTOM_HANDSHAKE_DOMAIN, null);
}
if (configJsonObject.has(Constants.KEY_ACCOUNT_REGION)) {
this.accountRegion = configJsonObject.getString(Constants.KEY_ACCOUNT_REGION);
}
Expand Down Expand Up @@ -243,6 +249,7 @@ private CleverTapInstanceConfig(Parcel in) {
accountRegion = in.readString();
proxyDomain = in.readString();
spikyProxyDomain = in.readString();
customHandshakeDomain = in.readString();
analyticsOnly = in.readByte() != 0x00;
isDefaultInstance = in.readByte() != 0x00;
useGoogleAdId = in.readByte() != 0x00;
Expand Down Expand Up @@ -313,6 +320,14 @@ public void setSpikyProxyDomain(String spikyProxyDomain) {
this.spikyProxyDomain = spikyProxyDomain;
}

public String getCustomHandshakeDomain() {
return customHandshakeDomain;
}

public void setCustomHandshakeDomain(String handshakeDomain) {
this.customHandshakeDomain = handshakeDomain;
}

@SuppressWarnings({"unused"})
public void setDebugLevel(CleverTapAPI.LogLevel debugLevel) {
setDebugLevel(debugLevel.intValue());
Expand Down Expand Up @@ -394,6 +409,7 @@ public void writeToParcel(Parcel dest, int flags) {
dest.writeString(accountRegion);
dest.writeString(proxyDomain);
dest.writeString(spikyProxyDomain);
dest.writeString(customHandshakeDomain);
dest.writeByte((byte) (analyticsOnly ? 0x01 : 0x00));
dest.writeByte((byte) (isDefaultInstance ? 0x01 : 0x00));
dest.writeByte((byte) (useGoogleAdId ? 0x01 : 0x00));
Expand Down Expand Up @@ -474,6 +490,7 @@ String toJSONString() {
configJsonObject.put(Constants.KEY_ACCOUNT_REGION, getAccountRegion());
configJsonObject.put(Constants.KEY_PROXY_DOMAIN, getProxyDomain());
configJsonObject.put(Constants.KEY_SPIKY_PROXY_DOMAIN, getSpikyProxyDomain());
configJsonObject.put(Constants.KEY_CUSTOM_HANDSHAKE_DOMAIN, getCustomHandshakeDomain());
configJsonObject.put(Constants.KEY_FCM_SENDER_ID, getFcmSenderId());
configJsonObject.put(Constants.KEY_ANALYTICS_ONLY, isAnalyticsOnly());
configJsonObject.put(Constants.KEY_DEFAULT_INSTANCE, isDefaultInstance());
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -32,6 +32,7 @@ public interface Constants {
String LABEL_REGION = "CLEVERTAP_REGION";
String LABEL_PROXY_DOMAIN = "CLEVERTAP_PROXY_DOMAIN";
String LABEL_SPIKY_PROXY_DOMAIN = "CLEVERTAP_SPIKY_PROXY_DOMAIN";
String LABEL_CLEVERTAP_HANDSHAKE_DOMAIN = "CLEVERTAP_HANDSHAKE_DOMAIN";
String LABEL_DISABLE_APP_LAUNCH = "CLEVERTAP_DISABLE_APP_LAUNCHED";
String LABEL_SSL_PINNING = "CLEVERTAP_SSL_PINNING";
String LABEL_BACKGROUND_SYNC = "CLEVERTAP_BACKGROUND_SYNC";
Expand Down Expand Up @@ -144,6 +145,7 @@ public interface Constants {
String PRIMARY_DOMAIN = "clevertap-prod.com";
String KEY_DOMAIN_NAME = "comms_dmn";
String SPIKY_KEY_DOMAIN_NAME = "comms_dmn_spiky";
String KEY_HANDSHAKE_DOMAIN_NAME = "comms_dmn_handshake";
String HEADER_DOMAIN_NAME = "X-WZRK-RD";
String SPIKY_HEADER_DOMAIN_NAME = "X-WZRK-SPIKY-RD";
String HEADER_MUTE = "X-WZRK-MUTE";
Expand Down Expand Up @@ -190,6 +192,7 @@ public interface Constants {
String KEY_ACCOUNT_REGION = "accountRegion";
String KEY_PROXY_DOMAIN = "proxyDomain";
String KEY_SPIKY_PROXY_DOMAIN = "spikyProxyDomain";
String KEY_CUSTOM_HANDSHAKE_DOMAIN = "customHandshakeDomain";
String KEY_ANALYTICS_ONLY = "analyticsOnly";
String KEY_DEFAULT_INSTANCE = "isDefaultInstance";
String KEY_USE_GOOGLE_AD_ID = "useGoogleAdId";
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -20,6 +20,8 @@ public class ManifestInfo {

private static String spikyProxyDomain;

private static String handshakeDomain;
CTLalit marked this conversation as resolved.
Show resolved Hide resolved

private static boolean useADID;

private static boolean appLaunchedDisabled;
Expand Down Expand Up @@ -84,6 +86,9 @@ private ManifestInfo(Context context) {
if (spikyProxyDomain == null) {
spikyProxyDomain = _getManifestStringValueForKey(metaData, Constants.LABEL_SPIKY_PROXY_DOMAIN);
}
if (handshakeDomain == null) {
handshakeDomain = _getManifestStringValueForKey(metaData, Constants.LABEL_CLEVERTAP_HANDSHAKE_DOMAIN);
}
notificationIcon = _getManifestStringValueForKey(metaData, Constants.LABEL_NOTIFICATION_ICON);
useADID = "1".equals(_getManifestStringValueForKey(metaData, Constants.LABEL_USE_GOOGLE_AD_ID));
appLaunchedDisabled = "1".equals(_getManifestStringValueForKey(metaData, Constants.LABEL_DISABLE_APP_LAUNCH));
Expand Down Expand Up @@ -176,6 +181,12 @@ public String getSpikeyProxyDomain() {
return spikyProxyDomain;
}

@RestrictTo(RestrictTo.Scope.LIBRARY)
public String getHandshakeDomain() {
Logger.v("ManifestInfo: getHandshakeDomain called, returning handshakeDomain:" + handshakeDomain);
return handshakeDomain;
}

String getPackageName() {
return packageName;
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -146,9 +146,13 @@ static long getLong(Context context, String nameSpace, String key, long defaultV
}

@SuppressWarnings("SameParameterValue")
public static long getLongFromPrefs(Context context, CleverTapInstanceConfig config, String rawKey,
public static long getLongFromPrefs(
Context context,
CleverTapInstanceConfig config,
String rawKey,
int defaultValue,
String nameSpace) {
String nameSpace
) {
if (config.isDefaultInstance()) {
long dummy = -1000;
long _new = getLong(context, nameSpace, storageKeyWithSuffix(config, rawKey), dummy);
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -235,8 +235,10 @@ public void sendImmediately(Context context, EventGroup eventGroup, JSONObject e
JSONArray singleEventQueue = new JSONArray().put(eventData);

if (networkManager.needsHandshakeForDomain(eventGroup)) {
networkManager.initHandshake(eventGroup, () ->
networkManager.sendQueue(context, eventGroup, singleEventQueue, null));
networkManager.initHandshake(
eventGroup,
() -> networkManager.sendQueue(context, eventGroup, singleEventQueue, null)
);
} else {
networkManager.sendQueue(context, eventGroup, singleEventQueue, null);
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -280,12 +280,15 @@ public void initHandshake(final EventGroup eventGroup, final Runnable handshakeS
@Override
@WorkerThread
public boolean needsHandshakeForDomain(final EventGroup eventGroup) {
final String domain = getDomain(eventGroup);

boolean needsHandshake = ctApiWrapper.needsHandshake(eventGroup == EventGroup.PUSH_NOTIFICATION_VIEWED);
boolean needHandshakeDueToFailure = responseFailureCount > 5;

if (needHandshakeDueToFailure) {
setDomain(context, null);
StorageHelper.putString(context, StorageHelper.storageKeyWithSuffix(config, Constants.KEY_HANDSHAKE_DOMAIN_NAME), null);
}
return domain == null || needHandshakeDueToFailure;
return needsHandshake || needHandshakeDueToFailure;
}

@SuppressLint("CommitPrefEdits")
Expand Down Expand Up @@ -486,8 +489,11 @@ private JSONObject getQueueHeader(Context context, @Nullable final String caller
}

@WorkerThread
private void performHandshakeForDomain(final Context context, final EventGroup eventGroup,
final Runnable handshakeSuccessCallback) {
private void performHandshakeForDomain(
final Context context,
final EventGroup eventGroup,
final Runnable handshakeSuccessCallback
) {

try (Response response = ctApiWrapper.getCtApi().performHandshakeForDomain(eventGroup == EventGroup.PUSH_NOTIFICATION_VIEWED)) {
if (response.isSuccess()) {
Expand Down Expand Up @@ -541,6 +547,11 @@ private boolean processIncomingHeaders(final Context context, Response response)
} else {
setSpikyDomain(context, spikyDomainName);
}

String customDomain = config.getCustomHandshakeDomain();
if (customDomain != null) {
setCustomHandshakeDomain(context, customDomain);
}
return true;
}

Expand Down Expand Up @@ -801,11 +812,13 @@ private void notifyListenerForPushImpressionSentToServer(@NonNull String listene
}

@WorkerThread
private void setDomain(final Context context, String domainName) {
private void setDomain(
final Context context,
String domainName
) {
logger.verbose(config.getAccountId(), "Setting domain to " + domainName);
StorageHelper.putString(context, StorageHelper.storageKeyWithSuffix(config, Constants.KEY_DOMAIN_NAME),
domainName);
ctApiWrapper.getCtApi().setDomain(domainName);
StorageHelper.putString(context, StorageHelper.storageKeyWithSuffix(config, Constants.KEY_DOMAIN_NAME), domainName);
ctApiWrapper.getCtApi().setCachedDomain(domainName);

if (callbackManager.getSCDomainListener() != null) {
if (domainName != null) {
Expand All @@ -826,9 +839,15 @@ private void setFirstRequestTimestampIfNeeded(int ts) {
@WorkerThread
private void setSpikyDomain(final Context context, String spikyDomainName) {
logger.verbose(config.getAccountId(), "Setting spiky domain to " + spikyDomainName);
StorageHelper.putString(context, StorageHelper.storageKeyWithSuffix(config, Constants.SPIKY_KEY_DOMAIN_NAME),
spikyDomainName);
ctApiWrapper.getCtApi().setSpikyDomain(spikyDomainName);
StorageHelper.putString(context, StorageHelper.storageKeyWithSuffix(config, Constants.SPIKY_KEY_DOMAIN_NAME), spikyDomainName);
ctApiWrapper.getCtApi().setCachedSpikyDomain(spikyDomainName);
}

@WorkerThread
private void setCustomHandshakeDomain(final Context context, String customDomain) {
logger.verbose(config.getAccountId(), "Setting custom domain to " + customDomain);
StorageHelper.putString(context, StorageHelper.storageKeyWithSuffix(config, Constants.KEY_HANDSHAKE_DOMAIN_NAME), customDomain);
ctApiWrapper.getCtApi().setCachedHandshakeDomain(customDomain);
}

/**
Expand Down
Loading
Loading