> ## Documentation Index
> Fetch the complete documentation index at: https://docs.topsort.com/llms.txt
> Use this file to discover all available pages before exploring further.

# SDKs Upgrade

> Upgrades of our Low Code SDKs for iOS and Android, adding callbacks logic to the banner components.

export const ChangelogActions = () => {
  return <>
      <style>{`
        .changelog-actions {
          display: flex;
          justify-content: center;
          gap: 12px;
          margin-top: 2rem;
          padding-top: 1.5rem;
          border-top: 1px solid #e5e7eb;
        }
        
        [data-theme="dark"] .changelog-actions {
          border-top-color: #374151;
        }
        
        .changelog-btn {
          display: inline-flex;
          align-items: center;
          gap: 6px;
          padding: 8px 16px;
          border-radius: 9999px;
          border: 1px solid #d1d5db;
          background: transparent;
          color: #6b7280;
          font-size: 14px;
          cursor: pointer;
          transition: all 0.2s ease;
        }
        
        .changelog-btn:hover {
          border-color: #9ca3af;
          background: #f9fafb;
        }
        
        [data-theme="dark"] .changelog-btn {
          border-color: #4b5563;
          color: #9ca3af;
        }
        
        [data-theme="dark"] .changelog-btn:hover {
          border-color: #6b7280;
          background: #1f2937;
        }
      `}</style>
      <div className="changelog-actions">
        <button className="changelog-btn" onClick={() => {
    const btn = event.target.closest("button");
    btn.innerHTML = "❤️ Like";
    btn.style.borderColor = "#ec4899";
  }}>
          🤍 Like
        </button>
        <button className="changelog-btn" onClick={() => {
    const btn = event.target.closest("button");
    navigator.clipboard.writeText(window.location.href);
    const originalContent = btn.innerHTML;
    btn.innerHTML = "✓ Copied";
    btn.style.borderColor = "#22c55e";
    btn.style.color = "#22c55e";
    setTimeout(() => {
      btn.innerHTML = originalContent;
      btn.style.borderColor = "";
      btn.style.color = "";
    }, 2000);
  }}>
          ↗ Share
        </button>
      </div>
    </>;
};

<div style={{ display: "flex", gap: "8px", flexWrap: "wrap", marginBottom: "16px" }}>
  <Badge color="gray" size="sm" icon="calendar">May 13, 2025</Badge>
  <Badge color="purple" size="sm" icon="server">Ad Server</Badge>
  <Badge color="orange" size="sm" icon="arrow-up">Improvement</Badge>
</div>

We've upgraded our **Low Code SDKs for iOS and Android**, adding callbacks logic to the banner components. This improvement enhances control and flexibility over banner behavior, requiring small changes to the implementations.

**iOS (Swift)**

This new version introduces structured callbacks to TopsortBanner, such as onNoWinners, onError, onImageLoad, and buttonClickedAction, allowing better control of the behavior of the banner. The library implementation changes from:

```
TopsortBanner(apiKey:..., url:..., ...)
```

To:

```
TopsortBanner(bannerAuctionBuilder: .init(slotId: ..., deviceType: ...))
    .onNoWinners { ... }
    .onError { error in ... }
    .onImageLoad { ... }
    .buttonClickedAction { response in ... }
    .frame(maxHeight: 50)
    .clipped()
```

Please refer to our [Online Documentation](/en/ad-platform/sdks/ios/ "iOS SDK") for more information.

**Android (Kotlin and Java)**

The Kotlin SDK v2.0.0 now supports callbacks for TopsortBanner, including onNoWinners, onError, onImageLoad, and onButtonClicked. This improves banner interaction logic and simplifies integration within Android UI flows:

```
TopsortBanner(...)
    .onNoWinners { /* handle no winner */ }
    .onError { error -> /* handle error */ }
    .onImageLoad { /* handle success */ }
    .onButtonClicked { response -> /* handle click */ }
```

The Java SDK follows the same changes as Kotlin. Java 17 or higher is required to use this SDK version.

Please refer to our [Online Documentation](/en/ad-platform/sdks/android/ "Android SDK") for more information.

 

<ChangelogActions />
