Example #1
0
        public static void Main(string[] args)
        {
            Console.WriteLine("Sync app");

            using var loggerFactory = LoggerFactory.Create(builder =>
            {
                builder.AddSimpleConsole(options => options.TimestampFormat = "hh:mm:ss ");
                builder.SetMinimumLevel(LogLevel.Debug);
            });
            logger = loggerFactory.CreateLogger <ProgramSync>();

            // Initialize the SDK

            var targetClientConfig = new TargetClientConfig.Builder("adobetargetmobile", "B8A054D958807F770A495DD6@AdobeOrg")
                                     .SetLogger(logger)
                                     .SetDecisioningMethod(DecisioningMethod.OnDevice)
                                     .SetOnDeviceDecisioningReady(DecisioningReady)
                                     .SetArtifactDownloadSucceeded(artifact => Console.WriteLine("ArtifactDownloadSucceeded: " + artifact))
                                     .SetArtifactDownloadFailed(exception => Console.WriteLine("ArtifactDownloadFailed " + exception.Message))
                                     .Build();

            targetClient = TargetClient.Create(targetClientConfig);

            // sample server-side GetOffers call

            var deliveryRequest = new TargetDeliveryRequest.Builder()
                                  .SetDecisioningMethod(DecisioningMethod.ServerSide)
                                  .SetThirdPartyId("testThirdPartyId")
                                  .SetContext(new Context(ChannelType.Web))
                                  .SetExecute(new ExecuteRequest(null, new List <MboxRequest>
            {
                new (index: 0, name: "a1-serverside-ab")
            }))
        public async Task RunAsync(string[] args)
        {
            Console.WriteLine("Async app");
            this.logger.LogInformation("Starting ...");

            var targetClientConfig = new TargetClientConfig.Builder("adobetargetmobile", "B8A054D958807F770A495DD6@AdobeOrg")
                                     .SetLogger(this.logger)
                                     .Build();

            this.targetClient.Initialize(targetClientConfig);

            var deliveryRequest = new TargetDeliveryRequest.Builder()
                                  .SetThirdPartyId("testThirdPartyId")
                                  .SetContext(new Context(ChannelType.Web))
                                  .SetExecute(new ExecuteRequest(null, new List <MboxRequest>
            {
                new MboxRequest(index: 1, name: "a1-serverside-ab")
            }))
                                  .Build();

            var response = await this.targetClient.GetOffersAsync(deliveryRequest);

            App.PrintCookies(this.logger, response);

            var notificationRequest = new TargetDeliveryRequest.Builder()
                                      .SetSessionId(response.Request.SessionId)
                                      .SetTntId(response.Response?.Id?.TntId)
                                      .SetThirdPartyId("testThirdPartyId")
                                      .SetContext(new Context(ChannelType.Web))
                                      .SetNotifications(new List <Notification>()
            {
                { new(id: "notificationId1", type: MetricType.Display, timestamp: DateTimeOffset.UtcNow.ToUnixTimeMilliseconds(),
                      tokens: new List <string>()) }
            })
Example #3
0
        public void Build_ReturnDeliveryRequest()
        {
            var context       = new Mock <Context>().Object;
            var execute       = new ExecuteRequest();
            var prefetch      = new PrefetchRequest();
            var notifications = new List <Notification>();
            var customerIds   = new List <CustomerId>();
            var property      = new Property("testToken");
            var telemetry     = new Telemetry();
            var trace         = new Trace("testAuthToken");
            var expCloud      = new ExperienceCloud();
            var qaMode        = new QAMode();

            var request = new TargetDeliveryRequest.Builder()
                          .SetTntId(tntId)
                          .SetMarketingCloudVisitorId(marketingCloudVisitorId)
                          .SetThirdPartyId(thirdPartyId)
                          .SetContext(context)
                          .SetExecute(execute)
                          .SetPrefetch(prefetch)
                          .SetNotifications(notifications)
                          .SetProperty(property)
                          .SetTelemetry(telemetry)
                          .SetTrace(trace)
                          .SetExperienceCloud(expCloud)
                          .SetEnvironmentId(environmentId)
                          .SetImpressionId(impressionId)
                          .SetQaMode(qaMode)
                          .SetLocationHint(locationHint)
                          .SetRequestId(requestId)
                          .SetSessionId(sessionId)
                          .SetTargetCustomerIds(customerIds)
                          .SetDecisioningMethod(DecisioningMethod.Hybrid)
                          .Build();

            Assert.Equal(tntId, request.DeliveryRequest.Id.TntId);
            Assert.Equal(marketingCloudVisitorId, request.DeliveryRequest.Id.MarketingCloudVisitorId);
            Assert.Equal(thirdPartyId, request.DeliveryRequest.Id.ThirdPartyId);
            Assert.Equal(customerIds, request.DeliveryRequest.Id.CustomerIds);
            Assert.Equal(context, request.DeliveryRequest.Context);
            Assert.Equal(execute, request.DeliveryRequest.Execute);
            Assert.Equal(prefetch, request.DeliveryRequest.Prefetch);
            Assert.Equal(notifications, request.DeliveryRequest.Notifications);
            Assert.Equal(property, request.DeliveryRequest.Property);
            Assert.Equal(telemetry, request.DeliveryRequest.Telemetry);
            Assert.Equal(trace, request.DeliveryRequest.Trace);
            Assert.Equal(expCloud, request.DeliveryRequest.ExperienceCloud);
            Assert.Equal(qaMode, request.DeliveryRequest.QaMode);
            Assert.Equal(environmentId, request.DeliveryRequest.EnvironmentId);
            Assert.Equal(impressionId, request.DeliveryRequest.ImpressionId);
            Assert.Equal(requestId, request.DeliveryRequest.RequestId);
            Assert.Equal(locationHint, request.LocationHint);
            Assert.Equal(sessionId, request.SessionId);
            Assert.Equal(DecisioningMethod.Hybrid, request.DecisioningMethod);
        }
Example #4
0
        private static void DecisioningReady()
        {
            Console.WriteLine("OnDeviceDecisioningReady");

            var deliveryRequest = new TargetDeliveryRequest.Builder()
                                  .SetThirdPartyId("testThirdPartyId")
                                  .SetContext(new Context(ChannelType.Web, geo: new Geo("193.105.140.131")))
                                  .SetExecute(new ExecuteRequest(new RequestDetails(), new List <MboxRequest>
            {
                new(index: 1, name: "a1-mobile-tstsree")
            }))
Example #5
0
        private static TargetDeliveryRequest AddMBoxesToRequest(TargetDeliveryRequest request, params string[] mboxes)
        {
            if (request?.DeliveryRequest == null)
            {
                request = new TargetDeliveryRequest.Builder()
                          .SetDecisioningMethod(DecisioningMethod.Hybrid)
                          .SetContext(new Context(ChannelType.Web))
                          .Build();
            }

            if (mboxes == null || mboxes.Length == 0)
            {
                return(request);
            }

            var existingMboxNames = new HashSet <string>();
            var index             = 0;

            var deliveryRequest = request.DeliveryRequest;
            var prefetchMboxes  = deliveryRequest.Prefetch?.Mboxes ?? new List <MboxRequest>();

            existingMboxNames.UnionWith(prefetchMboxes.Select(mbox => mbox.Name));

            var executeMboxes = deliveryRequest.Execute?.Mboxes ?? new List <MboxRequest>();

            executeMboxes.ForEach(mbox =>
            {
                if (mbox.Index >= index)
                {
                    index = (int)mbox.Index + 1;
                }

                existingMboxNames.Add(mbox.Name);
            });

            deliveryRequest.Execute ??= new ExecuteRequest();
            deliveryRequest.Execute.Mboxes ??= new List <MboxRequest>();

            foreach (var mbox in mboxes)
            {
                if (existingMboxNames.Contains(mbox))
                {
                    continue;
                }

                deliveryRequest.Execute.Mboxes.Add(new MboxRequest(name: mbox, index: index++));
            }

            return(request);
        }
Example #6
0
        public async Task RunAsync(string[] args)
        {
            Console.WriteLine("Async app");

            // Initialize the SDK

            var targetClientConfig = new TargetClientConfig.Builder("adobetargetmobile", "B8A054D958807F770A495DD6@AdobeOrg")
                                     .SetLogger(this.logger)
                                     .SetDecisioningMethod(DecisioningMethod.OnDevice)
                                     .SetOnDeviceDecisioningReady(this.DecisioningReady)
                                     .SetArtifactDownloadSucceeded(artifact => Console.WriteLine("ArtifactDownloadSucceeded: " + artifact))
                                     .SetArtifactDownloadFailed(exception => Console.WriteLine("ArtifactDownloadFailed " + exception.Message))
                                     .Build();

            this.targetClient.Initialize(targetClientConfig);

            // sample server-side GetOffers call

            var deliveryRequest = new TargetDeliveryRequest.Builder()
                                  .SetDecisioningMethod(DecisioningMethod.ServerSide)
                                  .SetThirdPartyId("testThirdPartyId")
                                  .SetContext(new Context(ChannelType.Web))
                                  .SetExecute(new ExecuteRequest(null, new List <MboxRequest>
            {
                new MboxRequest(index: 1, name: "a1-serverside-ab")
            }))
                                  .Build();

            var response = await this.targetClient.GetOffersAsync(deliveryRequest);

            App.PrintCookies(this.logger, response);

            // sample SendNotifications call

            var notificationRequest = new TargetDeliveryRequest.Builder()
                                      .SetDecisioningMethod(DecisioningMethod.ServerSide)
                                      .SetSessionId(response.Request.SessionId)
                                      .SetTntId(response.Response?.Id?.TntId)
                                      .SetThirdPartyId("testThirdPartyId")
                                      .SetContext(new Context(ChannelType.Web))
                                      .SetNotifications(new List <Notification>()
            {
                { new(id: "notificationId1", type: MetricType.Display, timestamp: DateTimeOffset.UtcNow.ToUnixTimeMilliseconds(),
                      tokens: new List <string>()) }
            })
Example #7
0
        private async Task FetchLocationAsync(TargetService targetService)
        {
            var request = new TargetDeliveryRequest.Builder()
                          .SetContext(new Context(ChannelType.Web))
                          .Build();

            var response = await targetService.ExecuteRequestAsync(request);

            var tntId = response.Response?.Id?.TntId;

            if (response.Status < HttpStatusCode.OK || response.Status >= HttpStatusCode.Ambiguous ||
                tntId == null)
            {
                return;
            }

            Interlocked.Exchange(ref this.locationHint, CookieUtils.LocationHintFromTntId(tntId));
        }
Example #8
0
        public void Build_SetCookieData()
        {
            var maxAge     = (int)(DateTimeOffset.UtcNow.ToUnixTimeMilliseconds() / 1000) + 1000;
            var mboxCookie = string.Format(mboxCookieFormat, maxAge);

            var cookies = new CookieCollection
            {
                new Cookie(TargetConstants.MboxCookieName, mboxCookie),
                new Cookie(TargetConstants.ClusterCookieName, clusterCookie)
            };

            var request = new TargetDeliveryRequest.Builder()
                          .SetCookies(cookies)
                          .Build();

            Assert.Equal(tntId, request.DeliveryRequest.Id.TntId);
            Assert.Equal(sessionId, request.SessionId);
            Assert.Equal(locationHint, request.LocationHint);
        }
        public void CollateParams_ReturnGeoParams()
        {
            const float  LAT      = 47.345f;
            const float  LONG     = -27.872f;
            const string COUNTRY  = "France";
            const string STATE    = "Normandy";
            const string CITY     = "Le Havre";
            const string CITY_OUT = "LEHAVRE";

            var request = new TargetDeliveryRequest.Builder()
                          .SetContext(new Context(ChannelType.Web, geo: new Geo(null,
                                                                                LAT, LONG, COUNTRY, STATE, CITY)))
                          .Build();
            var result = new GeoParamsCollator().CollateParams(request);

            Assert.Equal(LAT, result[GeoParamsCollator.GeoLatitude]);
            Assert.Equal(LONG, result[GeoParamsCollator.GeoLongitude]);
            Assert.Equal(COUNTRY.ToUpperInvariant(), result[GeoParamsCollator.GeoCountry]);
            Assert.Equal(STATE.ToUpperInvariant(), result[GeoParamsCollator.GeoRegion]);
            Assert.Equal(CITY_OUT, result[GeoParamsCollator.GeoCity]);
        }
        public void CollateParams_ReturnPageParams()
        {
            const string url            = "https://WwW.JoRA.TeSt.cO.Uk:80/Home/Index.html?q1=v1&Q2=V2#FragmentName";
            const string urlLower       = "https://www.jora.test.co.uk:80/home/index.html?q1=v1&q2=v2#fragmentname";
            const string domain         = "www.jora.test.co.uk";
            const string domainLower    = "www.jora.test.co.uk";
            const string subdomain      = "jora";
            const string subdomainLower = "jora";
            const string topdomain      = "co.uk";
            const string topdomainLower = "co.uk";
            const string path           = "/Home/Index.html";
            const string pathLower      = "/home/index.html";
            const string query          = "?q1=v1&Q2=V2";
            const string queryLower     = "?q1=v1&q2=v2";
            const string fragment       = "#FragmentName";
            const string fragmentLower  = "#fragmentname";

            var request = new TargetDeliveryRequest.Builder()
                          .SetContext(new Context(ChannelType.Web, address: new Address(url)))
                          .Build();
            var result = new PageParamsCollator().CollateParams(request);

            Assert.Equal(url, result[PageParamsCollator.PageUrl]);
            Assert.Equal(urlLower, result[PageParamsCollator.PageUrlLower]);
            Assert.Equal(domain, result[PageParamsCollator.PageDomain]);
            Assert.Equal(domainLower, result[PageParamsCollator.PageDomainLower]);
            Assert.Equal(subdomain, result[PageParamsCollator.PageSubdomain]);
            Assert.Equal(subdomainLower, result[PageParamsCollator.PageSubdomainLower]);
            Assert.Equal(topdomain, result[PageParamsCollator.PageTopLevelDomain]);
            Assert.Equal(topdomainLower, result[PageParamsCollator.PageTopLevelDomainLower]);
            Assert.Equal(path, result[PageParamsCollator.PagePath]);
            Assert.Equal(pathLower, result[PageParamsCollator.PagePathLower]);
            Assert.Equal(query, result[PageParamsCollator.PageQuery]);
            Assert.Equal(queryLower, result[PageParamsCollator.PageQueryLower]);
            Assert.Equal(fragment, result[PageParamsCollator.PageFragment]);
            Assert.Equal(fragmentLower, result[PageParamsCollator.PageFragmentLower]);
        }
        public void CollateParams_ReturnUserParams()
        {
            const string IE11_COMPAT_WIN = "Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 10.0; WOW64; Trident/8.0; .NET4.0C; .NET4.0E)";
            const string EDGE_WIN        = "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/79.0.3945.74 " +
                                           "Safari/537.36 Edg/79.0.309.43";
            const string FIREFOX_MAC   = "Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:78.0) Gecko/20100101 Firefox/78.0";
            const string FIREFOX_LINUX = "Mozilla/5.0 (X11; Linux Mint/18.2; Linux x86_64; rv:58.0) Gecko/20100101 Firefox/58.0";
            const string CHROME_MAC    = "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_9_2) AppleWebKit/537.36 (KHTML, like Gecko) " +
                                         "Chrome/36.0.1944.0 Safari/537.36";
            const string SAFARI_MAC = "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_9_3) AppleWebKit/537.75.14 " +
                                      "(KHTML, like Gecko) Version/7.0.3 Safari/7046A194A";
            const string OPERA_WIN = "Opera/9.80 (Windows NT 6.1; U; fi) Presto/2.2.15 Version/10.00";
            const string IPAD      = "Mozilla/5.0 (iPad; U; CPU OS 11_2 like Mac OS X; zh-CN; iPad5,3) AppleWebKit/534.46 (KHTML, like Gecko) UCBrowser/3.0.1.776 U3/ Mobile/10A403 Safari/7543.48.3";
            const string IPHONE    = "Mozilla/5.0 (iPhone; U; CPU iPhone OS 4_1 like Mac OS X; en-us) AppleWebKit/532.9 " +
                                     "(KHTML, like Gecko) Version/4.0.5 Mobile/8B117 Safari/6531.22.7";

            var request = new TargetDeliveryRequest.Builder()
                          .SetContext(new Context(ChannelType.Web, userAgent: IE11_COMPAT_WIN))
                          .Build();
            var result = new UserParamsCollator().CollateParams(request);

            Assert.Equal("ie", result[UserParamsCollator.UserBrowserType]);
            Assert.Equal("11", result[UserParamsCollator.UserBrowserVersion]);
            Assert.Equal("windows", result[UserParamsCollator.UserPlatform]);

            request = new TargetDeliveryRequest.Builder()
                      .SetContext(new Context(ChannelType.Web, userAgent: EDGE_WIN))
                      .Build();
            result = new UserParamsCollator().CollateParams(request);

            Assert.Equal("edge", result[UserParamsCollator.UserBrowserType]);
            Assert.Equal("79", result[UserParamsCollator.UserBrowserVersion]);
            Assert.Equal("windows", result[UserParamsCollator.UserPlatform]);

            request = new TargetDeliveryRequest.Builder()
                      .SetContext(new Context(ChannelType.Web, userAgent: FIREFOX_MAC))
                      .Build();
            result = new UserParamsCollator().CollateParams(request);

            Assert.Equal("firefox", result[UserParamsCollator.UserBrowserType]);
            Assert.Equal("78", result[UserParamsCollator.UserBrowserVersion]);
            Assert.Equal("mac", result[UserParamsCollator.UserPlatform]);

            request = new TargetDeliveryRequest.Builder()
                      .SetContext(new Context(ChannelType.Web, userAgent: FIREFOX_LINUX))
                      .Build();
            result = new UserParamsCollator().CollateParams(request);

            Assert.Equal("firefox", result[UserParamsCollator.UserBrowserType]);
            Assert.Equal("58", result[UserParamsCollator.UserBrowserVersion]);
            Assert.Equal("linux", result[UserParamsCollator.UserPlatform]);

            request = new TargetDeliveryRequest.Builder()
                      .SetContext(new Context(ChannelType.Web, userAgent: CHROME_MAC))
                      .Build();
            result = new UserParamsCollator().CollateParams(request);

            Assert.Equal("chrome", result[UserParamsCollator.UserBrowserType]);
            Assert.Equal("36", result[UserParamsCollator.UserBrowserVersion]);
            Assert.Equal("mac", result[UserParamsCollator.UserPlatform]);

            request = new TargetDeliveryRequest.Builder()
                      .SetContext(new Context(ChannelType.Web, userAgent: SAFARI_MAC))
                      .Build();
            result = new UserParamsCollator().CollateParams(request);

            Assert.Equal("safari", result[UserParamsCollator.UserBrowserType]);
            Assert.Equal("7", result[UserParamsCollator.UserBrowserVersion]);
            Assert.Equal("mac", result[UserParamsCollator.UserPlatform]);

            request = new TargetDeliveryRequest.Builder()
                      .SetContext(new Context(ChannelType.Web, userAgent: OPERA_WIN))
                      .Build();
            result = new UserParamsCollator().CollateParams(request);

            Assert.Equal("opera", result[UserParamsCollator.UserBrowserType]);
            Assert.Equal("10", result[UserParamsCollator.UserBrowserVersion]);
            Assert.Equal("windows", result[UserParamsCollator.UserPlatform]);

            request = new TargetDeliveryRequest.Builder()
                      .SetContext(new Context(ChannelType.Web, userAgent: IPAD))
                      .Build();
            result = new UserParamsCollator().CollateParams(request);

            Assert.Equal("ipad", result[UserParamsCollator.UserBrowserType]);
            Assert.Equal("3", result[UserParamsCollator.UserBrowserVersion]);
            Assert.Equal("mac", result[UserParamsCollator.UserPlatform]);

            request = new TargetDeliveryRequest.Builder()
                      .SetContext(new Context(ChannelType.Web, userAgent: IPHONE))
                      .Build();
            result = new UserParamsCollator().CollateParams(request);

            Assert.Equal("iphone", result[UserParamsCollator.UserBrowserType]);
            Assert.Equal("4", result[UserParamsCollator.UserBrowserVersion]);
            Assert.Equal("mac", result[UserParamsCollator.UserPlatform]);
        }