ಕ್ಲೈಂಟ್-ಸೈಡ್ ಈವೆಂಟ್ ಟ್ರ್ಯಾಕಿಂಗ್ ಅನ್ನು ಸಾಮಾನ್ಯವಾಗಿ ಮೂರು ವರ್ಗಗಳಾಗಿ ವಿಭಜಿಸಬಹುದು:

  • ಕೋಡ್ ಆಧಾರಿತ ಟ್ರ್ಯಾಕಿಂಗ್
  • ದೃಶ್ಯ ಟ್ರ್ಯಾಕಿಂಗ್
  • ಸ್ವಯಂಚಾಲಿತ ಟ್ರ್ಯಾಕಿಂಗ್

ಈ ಲೇಖನವು ಮುಖ್ಯವಾಗಿ ಸ್ವಯಂಚಾಲಿತ ಟ್ರ್ಯಾಕಿಂಗ್ನ ಕಲ್ಪನೆಗಳು ಮತ್ತು ಅನುಷ್ಠಾನ ಪ್ರಕ್ರಿಯೆಯನ್ನು ಪರಿಚಯಿಸುತ್ತದೆ.

1. ಕೋಡ್ ಆಧಾರಿತ ಟ್ರ್ಯಾಕಿಂಗ್

ಕೋಡ್ ಆಧಾರಿತ ಟ್ರ್ಯಾಕಿಂಗ್ ಎಂದರೆ ನೀವು ಟ್ರ್ಯಾಕ್ ಮಾಡಲು ಬಯಸುವ ಪ್ರತಿಯೊಂದು ಬಿಂದುವಿನಲ್ಲಿ ಇಂಟರ್ಫೇಸ್ ಕರೆದು ಈವೆಂಟ್ ಡೇಟಾವನ್ನು ನೇರವಾಗಿ ಅಪ್‌ಲೋಡ್ ಮಾಡುವುದು. ಹೆಚ್ಚಿನ ಮೂರನೇ ಪಕ್ಷದ ವಿಶ್ಲೇಷಣಾ ಸೇವೆಗಳು ಅನುಕೂಲಕರವಾದ ಕೋಡ್-ಆಧಾರಿತ ಟ್ರ್ಯಾಕಿಂಗ್ api ನೀಡುತ್ತವೆ.

ಆದರೆ ಇದರಿಂದ ಸಮಸ್ಯೆ ಬರುತ್ತದೆ: ಟ್ರ್ಯಾಕಿಂಗ್ ಕೋಡ್ ವ್ಯವಹಾರ ತರ್ಕದ ಎಲ್ಲೆಡೆ ಹರಡಿಕೊಂಡು ಅದಕ್ಕೆ ಬಿಗಿಯಾಗಿ ಜೋಡಿಸುತ್ತದೆ. ಪರದೆ ಅಥವಾ ವ್ಯವಹಾರ ಹರಿವು ಬದಲಾದಾಗ ಹಳೆಯ ಈವೆಂಟ್‌ಗಳಿಗೆ ಏನು ಮಾಡಬೇಕು, ಹೊಸವು ಬೇಕೇ ಎಂಬುದು ಸ್ಪಷ್ಟವಿಲ್ಲ. ಈವೆಂಟ್‌ಗಳ ಸಂಖ್ಯೆ ಹೆಚ್ಚಿದಂತೆ ಹರಡಿದ ಟ್ರ್ಯಾಕಿಂಗ್ ಕೋಡ್ ನಿರ್ವಹಣೆ ದುಃಸ್ವಪ್ನವಾಗುತ್ತದೆ. ಮ್ಯಾಕ್ರೋ ಮತ್ತು ಫ್ಯಾಕ್ಟರಿ ಕ್ಲಾಸ್‌ಗಳು ಕೋಡ್ ಸರಳಗೊಳಿಸಬಹುದು, ಆದರೆ ಮೂಲ ಸಮಸ್ಯೆ ಬದಲಾಗುವುದಿಲ್ಲ.

- (void)viewDidDisappear:(BOOL)animated {
    [super viewDidDisappear:animated];
    // 埋点
    APE(kEvent4001);
}

2. ದೃಶ್ಯ ಟ್ರ್ಯಾಕಿಂಗ್

ದೃಶ್ಯ ಟ್ರ್ಯಾಕಿಂಗ್ ಒಂದು ದೃಶ್ಯ ಉಪಕರಣದ ಮೂಲಕ ಸಂಗ್ರಹ ಬಿಂದುಗಳನ್ನು ಸಂರಚಿಸುತ್ತದೆ. ಕ್ಲೈಂಟ್ ಸಂರಚನೆಯನ್ನು ಸ್ವಯಂಚಾಲಿತವಾಗಿ ವಿಶ್ಲೇಷಿಸಿ ಈವೆಂಟ್‌ಗಳನ್ನು ವರದಿ ಮಾಡುತ್ತದೆ; ಇದನ್ನು “ಗುರುತುಬಾರದ ಟ್ರ್ಯಾಕಿಂಗ್” ಎನ್ನುತ್ತಾರೆ. ಪ್ರತಿನಿಧಿ ಮುಕ್ತಮೂಲ ಪರಿಹಾರವೆಂದರೆ Mixpanel.

3. ಸ್ವಯಂಚಾಲಿತ ಟ್ರ್ಯಾಕಿಂಗ್

ಪೂರ್ಣ-ಈವೆಂಟ್ ಟ್ರ್ಯಾಕಿಂಗ್ ಎಂದೂ ಕರೆಯುವ ಸ್ವಯಂಚಾಲಿತ ಟ್ರ್ಯಾಕಿಂಗ್‌ನಲ್ಲಿ ನಿಜವಾಗಿ instrumentation ಇಲ್ಲ ಎಂದಲ್ಲ. ಅದು ಎಲ್ಲ ಈವೆಂಟ್‌ಗಳನ್ನು ಸಂಗ್ರಹಿಸಿ ವರದಿ ಮಾಡುತ್ತದೆ; ಉಪಯುಕ್ತ ಡೇಟಾವನ್ನು ಸರ್ವರ್ ಫಿಲ್ಟರ್ ಮಾಡುತ್ತದೆ.

ಮತ್ತಷ್ಟು ಸುಧಾರಣೆಗೆ, ಸರ್ವರ್ ಸಂರಚನಾ ಫೈಲ್ ಕಳುಹಿಸಿದರೆ ಕ್ಲೈಂಟ್‌ನಲ್ಲೇ ಈವೆಂಟ್‌ಗಳನ್ನು ಫಿಲ್ಟರ್ ಮಾಡಬಹುದು.

KPIಗಳಿಗಾಗಿ, ಈ ಕಲ್ಪನೆಯ ಮೇಲೆ ಚಕ್ರವನ್ನು ಮತ್ತೆ ಕಂಡುಹಿಡಿದು WKTrackingData ನಿರ್ಮಿಸಿದೆ.

ಇಲ್ಲಿ, WKTrackingData ಅನುಷ್ಠಾನದಲ್ಲಿ ಎದುರಿಸಿದ ಕೆಲವು ಸಮಸ್ಯೆಗಳು ಮತ್ತು ಕಲ್ಪನೆಗಳನ್ನು ದಾಖಲಿಸುತ್ತೇನೆ.

ಅನುಷ್ಠಾನದ ಕಲ್ಪನೆ ಸರಳ. ಕೋಡ್ ಹೀಗೆ ವ್ಯವಸ್ಥಿತವಾಗಿದೆ:

ಮೂಲ WKTrackingData ಆರ್ಕಿಟೆಕ್ಚರ್: ಮ್ಯಾನೇಜರ್, ಈವೆಂಟ್ ಪಾಥ್‌ಗಳು ಮತ್ತು AOP ಮಾಡ್ಯೂಲ್‌ಗಳು

ಇಲ್ಲಿ WKTrackingDataManager ಎಲ್ಲ ಡೇಟಾ ನಿರ್ವಹಣೆ ಮತ್ತು ಈವೆಂಟ್ ಟ್ರ್ಯಾಕಿಂಗ್ ಸಂರಚನೆಯನ್ನು ನೋಡಿಕೊಳ್ಳುತ್ತದೆ.

ಈವೆಂಟ್ ಟ್ರ್ಯಾಕಿಂಗ್ ಸಂರಚನೆಯ ಮೂಲ ಬಳಕೆಯ ಉದಾಹರಣೆ

WKTrackingDataViewPathHelper ಎಂಬುದು event_path ಮೌಲ್ಯಗಳನ್ನು ರಚಿಸುತ್ತದೆ.

AOP ಪ್ರತಿ ಈವೆಂಟ್ ಟ್ರ್ಯಾಕ್ ಮಾಡುವ ಮಾಡ್ಯೂಲ್.

ವಿವರವಾದ ಬಳಕೆಗೆ GitHub ನೋಡಿ.

ಒಂದು ಈವೆಂಟ್ ಅನ್ನು ವಿಶಿಷ್ಟವಾಗಿ ಹೇಗೆ ಗುರುತಿಸಬೇಕು?

ಎರಡು ಪ್ರಶ್ನೆಗಳಿವೆ: ಈವೆಂಟ್ ಅನ್ನು ಹೇಗೆ ಪ್ರತಿನಿಧಿಸಬೇಕು ಮತ್ತು ಅದರ ವಿಶಿಷ್ಟತೆಯನ್ನು ಹೇಗೆ ಖಚಿತಪಡಿಸಬೇಕು?

ಈವೆಂಟ್ ಪ್ರತಿನಿಧಿಸುವುದು

ಈವೆಂಟ್‌ಗಳನ್ನು event_path ಬಳಸಿ ಪ್ರತಿನಿಧಿಸಲಾಗುತ್ತದೆ. ಈವೆಂಟ್ ಪ್ರಚೋದಿಸುವ responderಗೆ ಅದರ responder chain ಅನುಸರಿಸಿ ಆ ಸರಣಿಯ path ನಿರ್ಮಿಸುವುದೇ ಮೂಲ ಕಲ್ಪನೆ.

ಫಲಿತಾಂಶದ responder path ಹೀಗಿರುತ್ತದೆ:

"event_path" = "#buttonClick:#UIButton#UIButton[0]#UIView[0]#ViewController#...#UIApplication#AppDelegate
ಈವೆಂಟ್ ಅನ್ನು ವಿಶಿಷ್ಟವಾಗಿ ಗುರುತಿಸುವುದು

ಕೆಲವು ವ್ಯವಹಾರ ಪರಿಸ್ಥಿತಿಗಳಲ್ಲಿ ಒಂದೇ button ಅಥವಾ ಇತರ ನಿಯಂತ್ರಣದ ಗುಣಲಕ್ಷಣ ಬದಲಾದಾಗ ಅದು ವಿಭಿನ್ನ ವ್ಯವಹಾರ ಈವೆಂಟ್‌ಗಳನ್ನು ಪ್ರತಿನಿಧಿಸುತ್ತದೆ.

ಉದಾಹರಣೆಗೆ, ಹೋಮ್ ಪರದೆಯ button ಸೈನ್ ಔಟ್ ಆಗಿದ್ದಾಗ ಸೈನ್ ಇನ್ ಮಾಡಲು ಟ್ಯಾಪ್ ಮಾಡಿ ಎಂದು ತೋರಿಸಬಹುದು; ಸೈನ್ ಇನ್ ಆದ ಬಳಿಕ ಗುರುತು ಪರಿಶೀಲನೆ ಮುಗಿಯದಿದ್ದರೆ ಗುರುತು ಪರಿಶೀಲಿಸಿ ಎಂದು ತೋರಿಸಬಹುದು.

ಅದೇ buttonಗೆ view tree ಬದಲಾಗಿಲ್ಲ; ಆದ್ದರಿಂದ ನಿರ್ಮಿಸಲಾದ responder path ಅದೇ ಇರುತ್ತದೆ.

ಇಂತಹ ಇತರ ಸಂದರ್ಭಗಳಲ್ಲಿ UISwitch on/off ಸ್ಥಿತಿ, UISegmentedControlನ indexSelect ಗುಣಲಕ್ಷಣ, UIStepper, ಮತ್ತು UITableView ಅಥವಾ UICollectionViewಯ cell ಸಂವಹನ ಸೇರಿವೆ.

ಇದನ್ನು ನಿರ್ವಹಿಸಲು WKTrackingData ನಿಯಂತ್ರಣದ ಕೆಲವು ಗುಣಲಕ್ಷಣಗಳನ್ನು ಆಯ್ದು ಸೇರಿಸಿ event_path ನಿರ್ಮಿಸುತ್ತದೆ. ನಂತರದ event_path ಹೀಗಿರುತ್ತದೆ:

"event_path" = "#buttonClick:#UIButton#UIButton[0]#UIView[0]#ViewController#...#UIApplication#AppDelegate#currentTitle=Button#state=1#enabled=1#selected=0";
ವ್ಯವಹಾರ-ನಿರ್ದಿಷ್ಟ ವಿಸ್ತರಣೆಗಳು

ಮತ್ತೊಂದು ಸಂದರ್ಭ ಪರಿಗಣಿಸಿ: ಹೋಮ್ ಪರದೆಯ banner ಕ್ಯಾರಸೆಲ್.

ಪ್ರತಿ banner ಸ್ಥಾನಕ್ಕೆ ಚಿತ್ರ ಮತ್ತು ಗಮ್ಯಸ್ಥಾನದ url ಅನ್ನು ಸರ್ವರ್ ನೀಡುತ್ತದೆ; ಅವುಗಳ ಸ್ಥಾನ ಸಂರಚಿಸಬಹುದು.

ಇಲ್ಲಿ ಪ್ರತಿ indexನ bannerಗೆ ಸ್ಥಿರ ಗಮ್ಯಸ್ಥಾನವಿಲ್ಲ. ಸ್ಥಾನ 0ಯ ಈವೆಂಟ್ ಅನ್ನು event_path ಒಂದರಿಂದ ಮಾತ್ರ ನಿರ್ಧರಿಸಲಾಗುವುದಿಲ್ಲ.

ಈವೆಂಟ್ ವಿಶಿಷ್ಟವಾಗಿ ಗುರುತಿಸಲು url ಹೋಲುವ ವ್ಯವಹಾರ-ನಿರ್ದಿಷ್ಟ ಪರಾಮೀಟರ್ ಸೇರಿಸಬೇಕು.

WKTrackingData ವ್ಯವಹಾರ ಪರಾಮೀಟರ್ ವಿಸ್ತರಣೆಯನ್ನೂ ಬೆಂಬಲಿಸುತ್ತದೆ; ಕರೆ ಮಾಡುವವರು ಕಸ್ಟಮ್ ಪರಾಮೀಟರ್ ಸೇರಿಸಬಹುದು:

ವ್ಯವಹಾರ ಪರಾಮೀಟರ್‌ಗಳಿಂದ ಈವೆಂಟ್ ವಿಸ್ತರಿಸುವ ಮೂಲ ಕೋಡ್ ಉದಾಹರಣೆ

ಟ್ರ್ಯಾಕ್ ಮಾಡಬಾರದ ನಿಯಂತ್ರಣಗಳನ್ನು wk_ignoreTracking ಬಳಸಿ ಹೊರಗಿಡಬಹುದು:

self.slider.wk_ignoreTracking = YES;

ಇತರ ಸಮಸ್ಯೆಗಳು

ವಿಭಿನ್ನ ಈವೆಂಟ್‌ಗಳನ್ನು ಟ್ರ್ಯಾಕ್ ಮಾಡಲು WKTrackingData aspect-oriented ವಿಧಾನ ಅನುಸರಿಸಿ runtime ಮೂಲಕ ವಿಧಾನಗಳನ್ನು ನೇರವಾಗಿ swizzle ಮಾಡುತ್ತದೆ.

ಆದರೆ UIAlertView, UIActionSheet, UITableView ಮತ್ತು UICollectionView ಟ್ರ್ಯಾಕ್ ಮಾಡಲು ಅವುಗಳ delegate ವಿಧಾನಗಳನ್ನು swizzle ಮಾಡಬೇಕು.

  • ಒಂದು delegate class ಈಗಾಗಲೇ ವಿಧಾನವನ್ನು ಅನುಷ್ಠಾನಗೊಳಿಸಿದ್ದರೆ ಅದನ್ನು ಸರಳವಾಗಿ swizzle ಮಾಡಿ.

  • ಒಂದು delegate class ಅದನ್ನು ಅನುಷ್ಠಾನಗೊಳಿಸದಿದ್ದರೂ ಈವೆಂಟ್ ಟ್ರ್ಯಾಕ್ ಮಾಡಲು ಬಯಸಿದರೆ, ಸಂಬಂಧಿತ delegate methodನ ಅನುಷ್ಠಾನವನ್ನು ಕೈಯಿಂದ ಸೇರಿಸಬೇಕು.

- (void)wk_swizzleInstanceSelector:(SEL)origSel_ fromClass:(Class)fromClass replaceSelector:(SEL)replaceSel_ originNotImp:(SEL)notImpSel_ {
    Method originalMethod = class_getInstanceMethod([self class], origSel_);
    if (originalMethod) {
        [self wk_swizzleInstanceSelector:origSel_ fromClass:fromClass replaceSelector:replaceSel_];
    } else {
        Method notImpMethod = class_getInstanceMethod(fromClass, notImpSel_);
        // 如果delegateClass没有实现 origSel_ 方法
        // 则给delegateClass的 origSel_ 添加 orginReplaceMethod 的实现
        BOOL didAddNotImpMethod =
        class_addMethod([self class],
                        origSel_,
                        method_getImplementation(notImpMethod),
                        method_getTypeEncoding(notImpMethod));
        if (didAddNotImpMethod) {
            NSLog(@"%@ did add not imp method %@" , NSStringFromClass([self class]) , NSStringFromSelector(notImpSel_));
        }
    }
}

ಅನುಷ್ಠಾನ ಇಲ್ಲಿದೆ

ಆದರೆ ಕಾರ್ಯಪ್ರಯೋಗದಲ್ಲಿ, UITableView ಮತ್ತು UICollectionViewಗಳ delegate object ವಿಧಾನವನ್ನು ಅನುಷ್ಠಾನಗೊಳಿಸದಿದ್ದಾಗ, tableView:didSelectRowAtIndexPath:ಗೆ ಕೈಯಿಂದ implementation ಸೇರಿಸಿದರೂ ಅದು ಕಾರ್ಯಗತವಾಗಲಿಲ್ಲ.

ಮೊದಲು ಸಾಮಾನ್ಯ tableView:didSelectRowAtIndexPath: call stack ನೋಡೋಣ:

ಟೇಬಲ್-ವ್ಯೂ ಸಾಲಿನ ಆಯ್ಕೆಗಾಗಿ ಮೂಲ ಡಿಬಗ್ಗರ್ ಕಾಲ್ ಸ್ಟ್ಯಾಕ್

ಇಲ್ಲಿ UITableView ಒಂದು cell ಟ್ಯಾಪ್‌ಗೆ ಪ್ರತಿಕ್ರಿಯಿಸಲು ಈ ನಾಲ್ಕು ವಿಧಾನಗಳನ್ನು ಕ್ರಮವಾಗಿ ಕರೆಯುತ್ತದೆ:

  • 1. [UITableView _userSelectRowAtPendingSelectionIndexPath:]
  • 2. [UITableView _selectRowAtIndexPath:animated:scrollPosition:notifyDelegate:]
  • 3. [UITableView _selectRowAtIndexPath:animated:scrollPosition:notifyDelegate:isCellMultiSelect:]
  • 4. [TableViewController tableView:didSelectRowAtIndexPath:]

ಕರೆ ಕ್ರಮದಿಂದ, UITableView ತನ್ನ _selectRowAtIndexPath:animated:scrollPosition:notifyDelegate:isCellMultiSelect: ವಿಧಾನವನ್ನು ಮೊದಲು ಕರೆದು ನಂತರವೇ delegate classನ tableView:didSelectRowAtIndexPath: ವಿಧಾನವನ್ನು ಕರೆಯುತ್ತದೆ ಎಂಬುದು ತಿಳಿಯುತ್ತದೆ.

ಈ _selectRowAtIndexPath:animated:scrollPosition:notifyDelegate:isCellMultiSelect:ನಲ್ಲಿ breakpoint ಇಟ್ಟು assembly ಪರಿಶೀಲಿಸಿ:

delegate-method ಶಾಖೆ ತೋರಿಸುವ ಮೂಲ assembly ದೃಶ್ಯ

ಒಂದು delegate class ಎನ್ನುವುದು tableView:didSelectRowAtIndexPath: ಅನುಷ್ಠಾನಗೊಳಿಸಿದ್ದರೆ ಎಲ್ಲವೂ ಕೆಲಸ ಮಾಡಿ tableView:didSelectRowAtIndexPath: ಕರೆ ಪೂರ್ಣಗೊಳ್ಳುತ್ತದೆ.

ಆದರೆ delegate class ಎಂಬುದು tableView:didSelectRowAtIndexPath: ಅನುಷ್ಠಾನಗೊಳಿಸದಿದ್ದರೆ, ಕೈಯಿಂದ tableView:didSelectRowAtIndexPath:ಗೆ implementation ಸೇರಿಸಿದರೂ tableView:didSelectRowAtIndexPath:ಗೆ ಪ್ರತಿಕ್ರಿಯಿಸಲು ಪ್ರಯತ್ನಿಸುವುದಿಲ್ಲ.

assembly ಅನುಸರಿಸಿದಾಗ ನೇರವಾಗಿ ಮತ್ತೊಂದು ಸೂಚನೆಗೆ jump ಆಗುತ್ತದೆ.

WKTrackingData ಇಲ್ಲಿ ಬೇರೆ ವಿಧಾನ ಬಳಸುತ್ತದೆ: ನೇರವಾಗಿ [UITableView _userSelectRowAtPendingSelectionIndexPath:] ಅನ್ನು swizzle ಮಾಡುತ್ತದೆ (UICollectionViewಗೂ ಸಮಾನ ವಿಧಾನ). ಹೀಗಾಗಿ delegate object ಸಂಬಂಧಿತ cell event ವಿಧಾನವನ್ನು ಅನುಷ್ಠಾನಗೊಳಿಸದಿದ್ದರೂ UITableView ಮತ್ತು UICollectionView ಸಂವಹನಗಳನ್ನು ಟ್ರ್ಯಾಕ್ ಮಾಡಬಹುದು.

4. ಕೊನೆಯ ಆಲೋಚನೆಗಳು

ಒಂದೇ ಈವೆಂಟ್‌ಗೆ ಅನೇಕ event_path ಮೌಲ್ಯಗಳು

ಪರದೆಯಲ್ಲಿ ಚಿಕ್ಕ ವ್ಯತ್ಯಾಸಗಳಿರುವ ಅನೇಕ ಬಿಡುಗಡೆಯಾದ ಆವೃತ್ತಿಗಳನ್ನು ಪರಿಗಣಿಸಿ. ಒಂದೇ ಈವೆಂಟ್‌ಗೆ ಆಗ ಅನೇಕ event_path ಮೌಲ್ಯಗಳಿರಬಹುದು.

ಕಾರ್ಯಪ್ರಯೋಗದಲ್ಲಿ ಈ ಮ್ಯಾಪಿಂಗ್‌ಗೆ ಸರ್ವರ್-ಸೈಡ್ ಸಹೋದ್ಯೋಗಿಗಳ ಸಹಕಾರ ಬೇಕು. ಅದನ್ನು ಬ್ಯಾಕೆಂಡ್‌ನಲ್ಲಿ ಸಂರಚಿಸಬಹುದಾಗಿ ಮಾಡಬಹುದು.

ಈವೆಂಟ್ ವಿಶ್ಲೇಷಣೆ ಉತ್ತಮಗೊಳಿಸುವುದು

ಈ ವ್ಯವಹಾರ-ನಿರ್ದಿಷ್ಟ ವಿಸ್ತರಣೆಗಳು ವಿಭಾಗವು ವ್ಯವಹಾರ ಪರಾಮೀಟರ್ ಸೇರಿಸುವುದನ್ನು ವಿವರಿಸಿತು. WKTrackingData ಅದನ್ನು categories ಮೂಲಕ ಅನುಷ್ಠಾನಗೊಳಿಸುತ್ತದೆ.

ಕಾರ್ಯಪ್ರಯೋಗದಲ್ಲಿ ಪೂರ್ಣ-ಈವೆಂಟ್ ಟ್ರ್ಯಾಕಿಂಗ್ ಬಹಳ bandwidth ವ್ಯರ್ಥ ಮಾಡಿತು. ಅನೇಕ ಈವೆಂಟ್‌ಗಳು ಅಗತ್ಯವೇ ಇರಲಿಲ್ಲ [(ŏ_ŏ)].

ಮತ್ತೊಂದು ಸುಧಾರಣೆ ಎಂದರೆ, ವರದಿ ಮಾಡಬೇಕಾದ ಎಲ್ಲ ಈವೆಂಟ್‌ಗಳ ಸಂರಚನಾ ಫೈಲ್ ಅನ್ನು ಸರ್ವರ್ ಕಳುಹಿಸುವುದು. ಸಂರಚನೆಗೆ ಹೊಂದುವ event_path ಮಾತ್ರ ಅಪ್‌ಲೋಡ್ ಆಗುತ್ತದೆ.

ಈ ಹಂತದಲ್ಲಿ WKTrackingData ಇಲ್ಲದೇ ವ್ಯವಹಾರ ಪರಾಮೀಟರ್ ಪಡೆಯಬಹುದು: ನೇರವಾಗಿ kvc ಬಳಸಿ.

ಉದಾಹರಣೆಗೆ:

key_path = "viewController.banner.url"

ಇಷ್ಟು ದೂರ ಓದಿದ್ದರೆ WKTrackingData ತೆರೆಯಿರಿ ಮತ್ತು star ನೀಡಿ. ಪ್ರಶ್ನೆಗಳಿದ್ದರೆ GitHubನಲ್ಲಿ issue ತೆರೆಯಿರಿ ಅಥವಾ ಕೆಳಗೆ ಕಾಮೆಂಟ್ ಮಾಡಿ!