# AT Internet

The AT Internet dispatcher automatically dispatches events to the [AT Internet SDK](https://developers.atinternet-solutions.com/apple-universal-en/getting-started-apple-universal-en/operating-principle-apple-universal-en/), including the XTOR tag when it's available.

{% hint style="warning" %}
This dispatcher should not be used in new integrations in favor of Piano Analytics
{% endhint %}

{% tabs %}
{% tab title="SPM" %}

```
github "BatchLabs/Batch-iOS-atinternet-dispatcher"
```

{% endtab %}

{% tab title="CocoaPods" %}
{% code title="Podfile" %}

```
pod 'BatchATInternetDispatcher'
```

{% endcode %}
{% endtab %}
{% endtabs %}

Then, register the dispatcher:

{% tabs %}
{% tab title="Swift" %}

```swift
import BatchATInternetDispatcher

@UIApplicationMain
class AppDelegate: UIResponder, UIApplicationDelegate {
    
    func application(_ application: UIApplication,
                     didFinishLaunchingWithOptions launchOptions: [UIApplication.LaunchOptionsKey: Any]?) -> Bool {
        BatchEventDispatcher.add(BatchATInternetDispatcher.instance())
        
        [...]

        BatchSDK.start(withAPIKey: "YOUR_API_KEY")
        return true
    }
}

```

{% endtab %}

{% tab title="Objective-C" %}

```objectivec

// MYAppDelegate.h

@interface MYAppDelegate : UIResponder <UIApplicationDelegate>

[...]

@end

// MYAppDelegate.m

@import BatchATInternetDispatcher;

@implementation MYAppDelegate

- (BOOL)application:(UIApplication *)application 
didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
{
    [BatchEventDispatcher addDispatcher:[BatchATInternetDispatcher instance]];

    [...]

    [BatchSDK startWithAPIKey:@"MY_API_KEY"];
    return YES;
}

@end
```

{% endtab %}
{% endtabs %}

Batch AT Internet Dispatcher 1.1.0+ will automatically instantiate `Tracker` instances using the default AT Internet configuration, which comes in a plist.\
If you're not using plist-based configuration and would like to manually configure your Tracker in code, you can tell Batch which tracker instance to use:

{% tabs %}
{% tab title="Swift" %}

```swift
// Put this right after BatchEventDispatcher.add(BatchATInternetDispatcher.instance())
let tracker = <your ATInternet tracker initialization code>
BatchATInternetDispatcher.instance().trackerOverride = tracker
```

{% endtab %}

{% tab title="Objective-C" %}

```objectivec
// Put this right after [BatchEventDispatcher addDispatcher:[BatchATInternetDispatcher instance]];
Tracker *myTracker = ...;
[[BatchATInternetDispatcher instance].trackerOverride = myTracker;
```

{% endtab %}
{% endtabs %}
