Adobe Audience Manager - Stitching visitors across devices - adobe

Me and my team is new to Adobe Audience Manager and we are trying to figure out ways to stitch visitors cookies across devices (of the same visitor) once user does authentication (for ex: logins).
Have setup Adobe Analytics as well and have done integration to send data from Adobe Analytics to Adobe Audience Manager.
Primarily, we are trying to build a unified visitor's journey which as you would know will have endless benefits once we have it.
Any pointers/information or relevant doc will help a lot. Just ensuring we are moving in the right direction.
Regards,
Adwait

You can stitch user devices together (after authentication) by configuring ID sync and profile merge rules.
Here are the steps that you could follow
Configure a Cross device datasource (for merging online & offline data)
Go to Audience Data > Data Sources > Add New
name the data source as Cross Device ID Sync
Enter the following Integration code offlinesyncid, which is your own, unique ID for this data source.
In the ID Type choose Cross Device
In the ID Definition choose Person
In the Data Export Controls tick the No ristriction checkbox and make sure all other checkboxes are unticked.
In the Data Source Settings tick the Inbound checkbox and make sure the Customer ID radio button is chosen
In the Data Source Settings tick the Outbound checkbox
Make sure the Use as Authenticated Profile checkbox is ticked
Tick the Share associated visitor or device IDs across the Audience Manager platform checkbox
Save the datasource
Note the ID of the datasource you just created as we will use it in the following steps. Let's assume it is 123456
Configure an Online ID Sync datasource
Go to Audience Data > Data Sources > Add New
name the data source as Online ID Sync
Enter the following Integration code sitesyncid
In the ID Type choose Cookie
In the Data Export Controls tick the No ristriction checkbox and make sure all other checkboxes are unticked.
In the Data Source Settings tick the Inbound checkbox and make sure the Customer ID radio button is chosen
In the Data Source Settings tick the Outbound, Share Enabled, and Share associated visitor or device IDs across the Audience Manager platform checkboxes.
Save the datasource
Profile Merge Rule Setup
Go to Audience Data > Profile Merge Rules > Add New Rule
Name the new rule as Last Authenticated with Profile Link Device Graph
in the Profile Merge Rule Setup section choose the Last Authenticated Profiles radio button and tick the Cross Device ID Sync - Person datasource
From the Device Options section, choose the Profile Link Device Graph
Build the ID Sync code on your website
Assuming that you are using the dil.js code here is an example of how you can perform the ID sync
var customerID = "<customer ID e.g. 56789142>"; //Replace the text between the double quotes with your own authenticated customer ID
if (customerID) {
var yoursiteDIL = DIL.create({
partner : "<partner name>", //The partner name given to you by Adobe.
uuidCookie : {
name : "aam_uuid",
days : 30
},
visitorService: {
namespace: "XXXXXXXXXXXXXXXXXXXXX#AdobeOrg" //insert adobe org id here.
},
containerNSID: '0', // Recommended to have this set to zero. However, it could change depending on how many completely separate sites you run.
declaredId : {
dpid : "123456" , //This is the ID of the Cross Device datasource that you just created
dpuuid : customerID
}
});
var c = decodeURIComponent('%01');
var cidObject = {
cid_ic : 'sitesyncid' + c + customerID + c + '1' //this is the integration code you set for the Online ID Sync datasource
};
yoursiteDIL.api.signals(cidObject, 'd_');
yoursiteDIL.api.signals({c_sitesyncid: customerID});
} else {
var yoursiteDIL = DIL.create({
partner : "<partner name>",
uuidCookie : {
name : "aam_uuid",
days : 30
},
visitorService: {
namespace: "XXXXXXXXXXXXXXXXXXXXX#AdobeOrg" //insert adobe org id here.
}
});
}
yoursiteDIL.api.signals({ "signalKey": "signalValue"});

You can try setting up the Adobe Analytics s.visitorID based on the login details.
https://marketing.adobe.com/resources/help/en_US/sc/implement/visid_custom.html

Related

Can't insert a calendar to a user using service account

I have a service account setting up with wide domain delegation.
The domain contains about 300 accounts.
For each account, I want to create it own calendar called New_UserName_EDT other than the main calendar (called userName).
And for each New_UserName_EDT's user, I want to create an event depending on the user.
If it's possible, could you please tell me how can I add a calendar to a specific user under a domain using the service account ?.
If not, can I share the calendar New_UserName_EDT created with service account with event event1 (attendee is user1) with the user user1, without selecting the New_UserName_EDTand then on Settings and sharing > Share with specific people section, click on Add people and add user1 as described here ?.
Any suggestion will be appreciated.
Thanks in advance.
Just add required scope:
AclRule rule = new AclRule();
Scope scope = new Scope();
scope.setType("user").setValue("userName#domain");
rule.setScope(scope).setRole("reader");
// Insert new access rule
AclRule createdRule = service.acl().insert(createdCalendar.getId(), rule).execute();
HTH

Google Analytics UserID API extraction

Trying to extract a userID from GoogleAnalytics. This is to view which user is the using the website most and least.
I would to retrieve the top 5 user IDs and bottom 5 user IDs that were passed using either:
gtag('config', 'GA_TRACKING_ID', {
'user_id': 'USER_ID'
});
OR
using a custom dimension... ( https://support.google.com/analytics/answer/2709828?hl=en )
I'm (vaguely) aware of policies and TOS to keep 'non identifying' information on Google BUT there are posts online indicating you can link back to CMS data.
Steps so far
Google Analytics with UserID and view setup - Working in Google dashboard and showing filtered userID and All website data using the idea.
Requirements:
Extract page view and session data for each userId between a date
range (or all by default)
UserID via standard GA method
UserID via Custom dimension method
Any help, pointers or examples how someone has completed something like this are appreciated.
NOTE: This is to PULL data out of GA and manipulate/display it on an external system/dashboard.
Seen this which states it's not possible: Google analytics userID tracking
and this which states it (kind of) is google analytics API implementation for tracking a specific user activities in php
The solution I used:
Tracking
Create Google Analytics account
Create a new view by activating the UserID tracking (labeled NewView1)
Use https://developers.google.com/analytics/devguides/collection/gtagjs/custom-dims-mets
i.e. Define your custom dimension
Get Analytics tracking code + Add custom definition code
Create a Custom report using the 'metrics' you want to see and filtering by the 'custom dimension' I created earlier.
(note: data took ~ 12 hours to be visible so don't expect to work instantly)
Front end tracking additions
gtag('config', 'GA_TRACKING_ID', {
'custom_map': {'dimension<Index>': 'dimension_name'}
});
// Sends the custom dimension to Google Analytics.
gtag('event', 'any_event_name', {'dimension_name': dimension_value});
Extraction
Create New Google Developer Console Project (API)
Use a Service Account to connect the API with Analytics ( https://developers.google.com/analytics/devguides/reporting/core/v4/quickstart/service-php ) -- API -> credentials -> Create Credentials (Service Account key)
(assign role [mine was set to Project => View])
Save the Text file to your filesystem and rename to json as per examples
Add permissions to your Analytics project by copy/pasting the 'Email' from the Service account details into Analytics User Management.
Get the view ID of the data you wish to extract (Analtyics created in step 2 in tracking)
Use the sample Code (HelloAnalytics.php) to connect and extract data
Use your custom dimension to filter results
The dimension filter I used was $dimensions (see below)
...
$dimensions = new \Google_Service_AnalyticsReporting_Dimension();
$dimensions->setName('ga:dimension1'); // as per docs
// Create the ReportRequest object.
$request = new \Google_Service_AnalyticsReporting_ReportRequest();
$request->setViewId($VIEW_ID);
$request->setDateRanges($dateRange);
$request->setMetrics(array($sessions, $pageviews));
$request->setDimensions($dimensions);
From there I was able to see the same data via API that I could see in the custom report on analytics web.
NOTE: be careful of which Google project and view you're in while setting up
permissions and dimensions.
NOTE: using gtag() code and not Universal (ga()) js code
The answer is a very brief/rough summary of how I achieved my specific goal. It is not a one-size-fits all solution but hopefully it will give someone a better idea of how to set and extract custom variable data within Google.
The final result was data from the API. From there it's up to you.

Google analytics user explorer get user report

How do I get user report from user explorer, using GA API. Didn't manage to find any information about it here https://developers.google.com/analytics/. For instance in user explorer (audiences section) you can see a list of records having ids like 11111111111.2222222222 and I want to get information about user activity on the website for record with id 11111111111.2222222222 using GA API
While the latest GA release notes says the client ids have been "surfaced" (i.e. made visible) it is (at least currently) not available as a dimension via the API. So if you want to use it you'd have to add the client id as a custom dimension to your reports yourself. Off the top of my hat this should look something like this:
ga(function() {
var trackers = ga.getAll();
trackers.forEach(function(tracker) {
tracker.set('dimension1',tracker.get('clientId'));
});
});
Put before the pageview this would write the client id to your custom dimension with the index 1 (which you need to create in advance via the interface in properties->custom definitions). Should also work with multiple trackers on the same page.
This will of course not help you with data that's already been collected.

How to tie together front and back end events in google analytics?

I am tracking user events on the front end with google analytics, but I would also like to send back end events and be able to match up events for the same user in google analytics.
It looks like I should be able to pass the uid parameter: https://developers.google.com/analytics/devguides/collection/protocol/v1/parameters#uid but it looks like I also have to pass the tid parameter https://developers.google.com/analytics/devguides/collection/protocol/v1/parameters#tid .
The docs say that "All collected data is associated by this ID" (the tid).
What should I pass for the tid? Why can't I just pass the uid, if that is supposed to be a mechanism for tying events together?
I would like the backend to pass the uid to the front end (actually a one-way hash of the email), and then refer to the user in google analytics with this uid.
Is this feasible? I'm a bit confused about how to implement this.
Many thanks!
The "tid" - Tracking ID - is the Web Property, i.e. the "slot" in your Analytics account that the data goes to. If you do not send a tracking id the calls will disappear in limbo. You find the tid in your property settings under "Tracking Code". It is a string that starts "UA-" and so is also sometimes referred to as UA-ID).
The User ID will not help you to identify users, at least not by default, since it is not exposed in the Analytics interface (it should really be called the "cross device identification id", since that is what it's for). You need to create a custom dimension and pass the value of the User ID there if you want to identify users. Per TOS you must take care that no third party, including Google, can resolve your User ID (or any other datapoint) into something that identifies a person, altough of course you can use yourself to connect data to other data in your backend system.
Actually there is a proper way. I've implemented this for myself.
There's a Client ID parameter, that should be passed with your requests.
And here's you have two options:
Create this client id manually (by generating UUID) on server-side and pass it to front-end. Then use this value when you create your tracker and also use it for server-side requests.
//creating of a tracker with manually generated client id
ga('create', 'UA-XXXXX-Y', {
'storage': 'none',
'clientId': '76c24efd-ec42-492a-92df-c62cfd4540a3'
});
Of course, you'll need to implement some logic of storing client id in cookie, for example.
You can use client id that is being generated automatically by ga and then send it to the server-side by your method of choice. I've implemented it through cookies:
// Creates a default tracker.
ga('create', 'UA-XXXXX-Y', auto);
// Gets the client ID of the default tracker and logs it.
ga(function(tracker) {
var clientId = tracker.get('clientId');
//setting the cookie with jQuery help
$.cookie("client-id", clientId , { path : "/" });
});
Then on the back-end just access this cookie and use that client id for your requests.
Also some information con be found here: What is the client ID when sending tracking data to google analytics via the measurement protocol?

presence control in asp.net web applications

I've managed to implement the Name.NameCtrl.1 active x used in sharepoint in my own custom built apps for presence. All is working fine and I'm updating presence status correctly based on a users status on Office Comunication Server. However I'm not getting any other details on the user propulated in the presence control like it does in SharePoint. All I get is the sip address in the email field (rather than the real default email address in AD) and a link to schedule a meeting.
Can anyone tell me how to get the control to populate with details from AD (dept, email, phone etc) like it does in sharepoint?? Also I don't get an organization tab in the control like sharepoint.
Any ideas?
Thanks,
Keeney
NameCtrl gets the majority of its data from the running instance of Communicator (or Lync, if you're using that) on the client machine. No data is directly pulled back from SharePoint. To have NameCtrl work properly on your web pages, you need to make sure that:
Communicator (or Lync) is running on the client, and signed in
The web page you are calling NameCtrl from is in the Intranet or Trusted Sites zone in your browser
The recommended pattern is to call PresenceEnabled on the NameCtrl object before calling any other methods - if this returns false, then one (or both) of the above prereqs is false. The code below generally works for me
<script>
var sipUri = "your.contact#your.domain.com";
var nameCtrl = new ActiveXObject('Name.NameCtrl.1');
if (nameCtrl.PresenceEnabled)
{
nameCtrl.OnStatusChange = onStatusChange;
nameCtrl.GetStatus(sipUri, "1");
}
function onStatusChange(name, status, id)
{
// This function is fired when the contacts presence status changes.
// In a real world solution, you would want to update an image to reflect the users presence
alert(name + ", " + status + ", " + id);
}
function ShowOOUI()
{
nameCtrl.ShowOOUI(sipUri, 0, 15, 15);
}
function HideOOUI()
{
nameCtrl.HideOOUI();
}
</script>
<span onmouseover="ShowOOUI()" onmouseout="HideOOUI()" style="border-style:solid">Your Contact</span>
In case you haven't already seen it, there is a good(ish) NameCtrl reference here
I think in SharePoint, the control is populated with data that exists in the user profile service. If you want this in a non-sharepoint ASP.NET web app, then you'd have to build a repository of user profile details from AD (and cache it!) which your control will look to to display that information.

Resources