Note
Cette page est affichée en anglais car elle n'est pas disponible dans votre langue. Analyze your data from anywhere in the customer journey using your Adobe Analytics segments.
Contentsquare allows you to use your Adobe Analytics segments in every Contentsquare feature (Journey Analysis, Page Comparator, Zoning Analysis, Session Replay).
Attention
Sessions without at least one screenview will be discarded.
You should implement your screen tracking plan first, to have your Adobe Analytics integration work.
See Track screens .
Follow the instructions from Adobe Analytics for mobile apps
Add the AEPAnalytics iOS SDK to your project
Note
Adobe SDK code requirements
Make sure you register at least AEPIdentity
and AEPAnalytics
extensions before starting AEPCore
.
Check the Adobe iOS AEPAnalytics SDK repository for that.
Why 30 minutes before sending a new csMatchingKey
30 minutes is Contentsquare default session duration.
Setting a value higher than 30 minutes would cause overlapping on our sessions, and would impact negatively the data import from Adobe.
Setting a value lower than 30 minutes would make you to send more data to Adobe.
This could cause the variable to reach Adobe’s threshold, causing Adobe to filter values, and potentially impact your billing.
See Low-traffic value in Adobe Analytics
func application ( _ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplication.LaunchOptionsKey : Any ] ? ) -> Bool {
// ... your existing code ..
MobileCore. registerExtensions ( [Identity. self , Analytics. self , .... ], {
// ... your existing code ..
self . sendCSMatchingKeyIfNeeded ()
// ... your existing code ..
func sendCSMatchingKeyIfNeeded () {
let csMatchingKeyTimestampKey = "csMatchingKey_ts"
let csMatchingKeyValidityMs = 1_800_000 // 30 minutes
let currentTimestamp = Int ( Date () .timeIntervalSince1970 * 1000 )
let csMatchingKeyIsPreviousTimestamp = UserDefaults.standard. integer ( forKey : csMatchingKeyTimestampKey )
guard ( currentTimestamp - csMatchingKeyIsPreviousTimestamp ) > csMatchingKeyValidityMs else {
UserDefaults.standard.set ( currentTimestamp, forKey : csMatchingKeyTimestampKey )
let csMatchingKey = "csMatchingKey"
let csMatchingKeyValue = " \( Double . random ( in : 0 ..< 1 ) ) _ \( currentTimestamp ) "
Contentsquare. send ( dynamicVar : DynamicVar ( key : csMatchingKey, value : csMatchingKeyValue ))
MobileCore. track ( state : "csMatchingKey_state" , data : [csMatchingKey : csMatchingKeyValue] )
- ( BOOL )application:(UIApplication * )application didFinishLaunchingWithOptions:( NSDictionary * )launchOptions {
// ... your existing code ..
[AEPMobileCore registerExtensions : @[AEPMobileEdgeIdentity.class , AEPMobileAnalytics.class] completion : ^ {
// ... your existing code ..
[ self sendCSMatchingKeyIfNeeded ] ;
// ... your existing code ..
- ( void )sendCSMatchingKeyIfNeeded {
NSString * csMatchingKeyTimestampKey = @"csMatchingKey_ts" ;
NSInteger csMatchingKeyValidityMs = 1800000 ; // 30 minutes
NSInteger currentTimestamp = ( NSInteger )([[ NSDate date ] timeIntervalSince1970 ] * 1000 ) ;
NSInteger csMatchingKeyIsPreviousTimestamp = [[ NSUserDefaults standardUserDefaults ] integerForKey : csMatchingKeyTimestampKey] ;
if ((currentTimestamp - csMatchingKeyIsPreviousTimestamp) <= csMatchingKeyValidityMs) {
[[ NSUserDefaults standardUserDefaults ] setInteger : currentTimestamp forKey : csMatchingKeyTimestampKey] ;
NSString * csMatchingKey = @"csMatchingKey" ;
NSString * csMatchingKeyValue = [ NSString stringWithFormat : @"%f_%f" , ( double ) arc4random () / UINT32_MAX , currentTimestamp] ;
DynamicVar * csMatchingKeyDynamicVar = [[DynamicVar alloc ] initWithKey : csMatchingKey
stringValue : csMatchingKeyValue
error : ( NSError * _Nullable __autoreleasing * _Nullable)] ;
[Contentsquare sendWithDynamicVar : csMatchingKeyDynamicVar] ;
[AEPMobileCore trackState : @"csMatchingKey_state" data : @{csMatchingKey:csMatchingKeyValue}] ;