From 5eec46d609049b0c8886d1bec192088eb4664967 Mon Sep 17 00:00:00 2001 From: Nasser Amini Date: Tue, 5 Nov 2024 15:57:08 +0330 Subject: [PATCH 1/2] feat: add Builder for AdjustEvent, AdjustConfig and AdjustThirdPartySharing --- lib/adjust_extensions.dart | 231 +++++++++++++++++++++++++++++++++++++ 1 file changed, 231 insertions(+) create mode 100644 lib/adjust_extensions.dart diff --git a/lib/adjust_extensions.dart b/lib/adjust_extensions.dart new file mode 100644 index 0000000..54af767 --- /dev/null +++ b/lib/adjust_extensions.dart @@ -0,0 +1,231 @@ +import 'package:adjust_sdk/adjust_third_party_sharing.dart'; + +import 'adjust_config.dart'; +import 'adjust_event.dart'; + +extension AdjustEventBuilder on AdjustEvent { + static AdjustEvent create(String token) { + return AdjustEvent(token); + } + + AdjustEvent withRevenue(num revenue, String currency) { + this.setRevenue(revenue, currency); + return this; + } + + AdjustEvent withCallbackParameter(String key, String value) { + this.addCallbackParameter(key, value); + return this; + } + + AdjustEvent withPartnerParameter(String key, String value) { + this.addPartnerParameter(key, value); + return this; + } + + AdjustEvent withCallbackId(String callbackId) { + this.callbackId = callbackId; + return this; + } + + AdjustEvent withDeduplicationId(String deduplicationId) { + this.deduplicationId = deduplicationId; + return this; + } + + AdjustEvent withProductId(String productId) { + this.productId = productId; + return this; + } + + AdjustEvent withTransactionId(String transactionId) { + this.transactionId = transactionId; + return this; + } + + AdjustEvent withPurchaseToken(String purchaseToken) { + this.purchaseToken = purchaseToken; + return this; + } +} + +extension AdjustConfigBuilder on AdjustConfig { + static AdjustConfig create(String appToken, AdjustEnvironment environment) { + return new AdjustConfig(appToken, environment); + } + + AdjustConfig withUrlStrategy(List urlStrategyDomains, + bool useSubdomains, bool isDataResidency) { + this.setUrlStrategy(urlStrategyDomains, useSubdomains, isDataResidency); + return this; + } + + AdjustConfig setSkanAttributionEnabled(bool isSkanAttributionEnabled) { + this.isSkanAttributionEnabled = isSkanAttributionEnabled; + return this; + } + + AdjustConfig setSendingInBackgroundEnabled( + bool isSendingInBackgroundEnabled) { + this.isSendingInBackgroundEnabled = isSendingInBackgroundEnabled; + return this; + } + + AdjustConfig setAdServicesEnabled(bool isAdServicesEnabled) { + this.isAdServicesEnabled = isAdServicesEnabled; + return this; + } + + AdjustConfig setIdfaReadingEnabled(bool isIdfaReadingEnabled) { + this.isIdfaReadingEnabled = isIdfaReadingEnabled; + return this; + } + + AdjustConfig setIdfvReadingEnabled(bool isIdfvReadingEnabled) { + this.isIdfvReadingEnabled = isIdfvReadingEnabled; + return this; + } + + AdjustConfig setCostDataInAttributionEnabled( + bool isCostDataInAttributionEnabled) { + this.isCostDataInAttributionEnabled = isCostDataInAttributionEnabled; + return this; + } + + AdjustConfig setPreinstallTrackingEnabled(bool isPreinstallTrackingEnabled) { + this.isPreinstallTrackingEnabled = isPreinstallTrackingEnabled; + return this; + } + + AdjustConfig setLinkMeEnabled(bool isLinkMeEnabled) { + this.isLinkMeEnabled = isLinkMeEnabled; + return this; + } + + AdjustConfig setDeviceIdsReadingOnceEnabled( + bool isDeviceIdsReadingOnceEnabled) { + this.isDeviceIdsReadingOnceEnabled = isDeviceIdsReadingOnceEnabled; + return this; + } + + AdjustConfig setCoppaComplianceEnabled(bool isCoppaComplianceEnabled) { + this.isCoppaComplianceEnabled = isCoppaComplianceEnabled; + return this; + } + + AdjustConfig setPlayStoreKidsComplianceEnabled( + bool isPlayStoreKidsComplianceEnabled) { + this.isPlayStoreKidsComplianceEnabled = isPlayStoreKidsComplianceEnabled; + return this; + } + + AdjustConfig setDeferredDeeplinkOpeningEnabled( + bool isDeferredDeeplinkOpeningEnabled) { + this.isDeferredDeeplinkOpeningEnabled = isDeferredDeeplinkOpeningEnabled; + return this; + } + + AdjustConfig setAttConsentWaitingInterval(num attConsentWaitingInterval) { + this.attConsentWaitingInterval = attConsentWaitingInterval; + return this; + } + + AdjustConfig setEventDeduplicationIdsMaxSize( + num eventDeduplicationIdsMaxSize) { + this.eventDeduplicationIdsMaxSize = eventDeduplicationIdsMaxSize; + return this; + } + + AdjustConfig setSdkPrefix(String sdkPrefix) { + this.sdkPrefix = sdkPrefix; + return this; + } + + AdjustConfig setDefaultTracker(String defaultTracker) { + this.defaultTracker = defaultTracker; + return this; + } + + AdjustConfig setExternalDeviceId(String externalDeviceId) { + this.externalDeviceId = externalDeviceId; + return this; + } + + AdjustConfig setProcessName(String processName) { + this.processName = processName; + return this; + } + + AdjustConfig setPreinstallFilePath(String preinstallFilePath) { + this.preinstallFilePath = preinstallFilePath; + return this; + } + + AdjustConfig setFbAppId(String fbAppId) { + this.fbAppId = fbAppId; + return this; + } + + AdjustConfig setLogLevel(AdjustLogLevel logLevel) { + this.logLevel = logLevel; + return this; + } + + AdjustConfig setAttributionCallback(AttributionCallback attributionCallback) { + this.attributionCallback = attributionCallback; + return this; + } + + AdjustConfig setSessionSuccessCallback( + SessionSuccessCallback sessionSuccessCallback) { + this.sessionSuccessCallback = sessionSuccessCallback; + return this; + } + + AdjustConfig setSessionFailureCallback( + SessionFailureCallback sessionFailureCallback) { + this.sessionFailureCallback = sessionFailureCallback; + return this; + } + + AdjustConfig setEventSuccessCallback( + EventSuccessCallback eventSuccessCallback) { + this.eventSuccessCallback = eventSuccessCallback; + return this; + } + + AdjustConfig setEventFailureCallback( + EventFailureCallback eventFailureCallback) { + this.eventFailureCallback = eventFailureCallback; + return this; + } + + AdjustConfig setDeferredDeeplinkCallback( + DeferredDeeplinkCallback deferredDeeplinkCallback) { + this.deferredDeeplinkCallback = deferredDeeplinkCallback; + return this; + } + + AdjustConfig setSkanUpdatedCallback(SkanUpdatedCallback skanUpdatedCallback) { + this.skanUpdatedCallback = skanUpdatedCallback; + return this; + } +} + +extension AdjustThirdPartySharingBuilder on AdjustThirdPartySharing { + static AdjustThirdPartySharing create(bool isEnabled) { + return new AdjustThirdPartySharing(isEnabled); + } + + AdjustThirdPartySharing addGranularOption( + String partnerName, String key, String value) { + this.addGranularOption(partnerName, key, value); + return this; + } + + AdjustThirdPartySharing addPartnerSharingSetting( + String partnerName, String key, bool value) { + this.addPartnerSharingSetting(partnerName, key, value); + return this; + } +} From f32704f8121a145f4d78b2bcf9ba712a9928d816 Mon Sep 17 00:00:00 2001 From: Nasser Amini Date: Tue, 5 Nov 2024 15:57:32 +0330 Subject: [PATCH 2/2] feat: refactor example app using builders --- example/lib/main.dart | 52 ++++++++++++++++--------------------------- example/lib/util.dart | 24 +++++++++----------- 2 files changed, 30 insertions(+), 46 deletions(-) diff --git a/example/lib/main.dart b/example/lib/main.dart index c71cb94..19ef46e 100644 --- a/example/lib/main.dart +++ b/example/lib/main.dart @@ -5,6 +5,7 @@ import 'package:adjust_sdk/adjust_event_failure.dart'; import 'package:adjust_sdk/adjust_event_success.dart'; import 'package:adjust_sdk/adjust_session_failure.dart'; import 'package:adjust_sdk/adjust_session_success.dart'; +import 'package:adjust_sdk/adjust_extensions.dart'; import 'package:flutter/cupertino.dart'; import 'package:flutter/material.dart'; import 'package:flutter/services.dart'; @@ -93,17 +94,13 @@ class _MyHomePageState extends State with WidgetsBindingObserver { // Platform messages are asynchronous, so we initialize in an async method. initPlatformState() async { AdjustConfig config = - new AdjustConfig('2fm9gkqubvpc', AdjustEnvironment.sandbox); - config.logLevel = AdjustLogLevel.verbose; - - config.setUrlStrategy(['adjust.net.in', 'adjust.com'], true, false); - //config.setUrlStrategy(['adjust.world', 'adjust.com'], true, false); - //config.setUrlStrategy(['adjust.cn'], true, false); - //config.setUrlStrategy(['eu.adjust.com'], true, true); - //config.setUrlStrategy(['us.adjust.com'], true, true); - //config.setUrlStrategy(['tr.adjust.com'], true, true); - - config.attributionCallback = (AdjustAttribution attributionChangedData) { + AdjustConfigBuilder.create('2fm9gkqubvpc', AdjustEnvironment.sandbox) + .setLogLevel(AdjustLogLevel.verbose) + .withUrlStrategy([ + 'adjust.net.in', + 'adjust.com' + ], true, false).setAttributionCallback( + (AdjustAttribution attributionChangedData) { print('[Adjust]: Attribution changed!'); if (attributionChangedData.trackerToken != null) { @@ -139,9 +136,7 @@ class _MyHomePageState extends State with WidgetsBindingObserver { print( '[Adjust]: Cost currency: ' + attributionChangedData.costCurrency!); } - }; - - config.sessionSuccessCallback = (AdjustSessionSuccess sessionSuccessData) { + }).setSessionSuccessCallback((AdjustSessionSuccess sessionSuccessData) { print('[Adjust]: Session tracking success!'); if (sessionSuccessData.message != null) { @@ -156,9 +151,7 @@ class _MyHomePageState extends State with WidgetsBindingObserver { if (sessionSuccessData.jsonResponse != null) { print('[Adjust]: JSON response: ' + sessionSuccessData.jsonResponse!); } - }; - - config.sessionFailureCallback = (AdjustSessionFailure sessionFailureData) { + }).setSessionFailureCallback((AdjustSessionFailure sessionFailureData) { print('[Adjust]: Session tracking failure!'); if (sessionFailureData.message != null) { @@ -177,9 +170,7 @@ class _MyHomePageState extends State with WidgetsBindingObserver { if (sessionFailureData.jsonResponse != null) { print('[Adjust]: JSON response: ' + sessionFailureData.jsonResponse!); } - }; - - config.eventSuccessCallback = (AdjustEventSuccess eventSuccessData) { + }).setEventSuccessCallback((AdjustEventSuccess eventSuccessData) { print('[Adjust]: Event tracking success!'); if (eventSuccessData.eventToken != null) { @@ -200,9 +191,7 @@ class _MyHomePageState extends State with WidgetsBindingObserver { if (eventSuccessData.jsonResponse != null) { print('[Adjust]: JSON response: ' + eventSuccessData.jsonResponse!); } - }; - - config.eventFailureCallback = (AdjustEventFailure eventFailureData) { + }).setEventFailureCallback((AdjustEventFailure eventFailureData) { print('[Adjust]: Event tracking failure!'); if (eventFailureData.eventToken != null) { @@ -226,16 +215,13 @@ class _MyHomePageState extends State with WidgetsBindingObserver { if (eventFailureData.jsonResponse != null) { print('[Adjust]: JSON response: ' + eventFailureData.jsonResponse!); } - }; - - config.deferredDeeplinkCallback = (String? uri) { + }).setDeferredDeeplinkCallback((String? uri) { print('[Adjust]: Received deferred deeplink: ' + uri!); - }; - - config.skanUpdatedCallback = (Map skanUpdateData) { + }).setSkanUpdatedCallback((Map skanUpdateData) { print('[Adjust]: Received SKAN update information!'); if (skanUpdateData["conversion_value"] != null) { - print('[Adjust]: Conversion value: ' + skanUpdateData["conversion_value"]!); + print('[Adjust]: Conversion value: ' + + skanUpdateData["conversion_value"]!); } if (skanUpdateData["coarse_value"] != null) { print('[Adjust]: Coarse value: ' + skanUpdateData["coarse_value"]!); @@ -246,7 +232,7 @@ class _MyHomePageState extends State with WidgetsBindingObserver { if (skanUpdateData["error"] != null) { print('[Adjust]: Error: ' + skanUpdateData["error"]!); } - }; + }); // Add session callback parameters. Adjust.addGlobalCallbackParameter('scp_foo_1', 'scp_bar'); @@ -381,9 +367,9 @@ class _MyHomePageState extends State with WidgetsBindingObserver { value: _isSdkEnabled, onChanged: (bool value) { setState(() { - if(value == true){ + if (value == true) { Adjust.enable(); - }else { + } else { Adjust.disable(); } _isSdkEnabled = value; diff --git a/example/lib/util.dart b/example/lib/util.dart index bdedf9a..37dea86 100644 --- a/example/lib/util.dart +++ b/example/lib/util.dart @@ -1,4 +1,5 @@ import 'package:adjust_sdk/adjust_event.dart'; +import 'package:adjust_sdk/adjust_extensions.dart'; import 'package:flutter/cupertino.dart'; import 'package:flutter/material.dart'; @@ -63,28 +64,25 @@ class Util { } static AdjustEvent buildSimpleEvent() { - return new AdjustEvent(EVENT_TOKEN_SIMPLE); + return AdjustEventBuilder.create(EVENT_TOKEN_SIMPLE); } static AdjustEvent buildRevenueEvent() { - AdjustEvent event = new AdjustEvent(EVENT_TOKEN_REVENUE); - event.setRevenue(100.0, 'EUR'); - event.transactionId = 'DummyTransactionId'; - return event; + return AdjustEventBuilder.create(EVENT_TOKEN_REVENUE) + .withRevenue(100.0, 'EUR') + .withTransactionId('DummyTransactionId'); } static AdjustEvent buildCallbackEvent() { - AdjustEvent event = new AdjustEvent(EVENT_TOKEN_CALLBACK); - event.addCallbackParameter('key1', 'value1'); - event.addCallbackParameter('key2', 'value2'); - return event; + return AdjustEventBuilder.create(EVENT_TOKEN_CALLBACK) + .withCallbackParameter('key1', 'value1') + .withCallbackParameter('key2', 'value2'); } static AdjustEvent buildPartnerEvent() { - AdjustEvent event = new AdjustEvent(EVENT_TOKEN_PARTNER); - event.addPartnerParameter('foo1', 'bar1'); - event.addPartnerParameter('foo2', 'bar2'); - return event; + return AdjustEventBuilder.create(EVENT_TOKEN_PARTNER) + .withPartnerParameter('foo1', 'bar1') + .withPartnerParameter('foo2', 'bar2'); } static void showMessage(