Entegrasyon
Önce panelde uygulamanı ekle ve bir reklam alanı oluştur. Sana pk_ ile başlayan bir alan anahtarı verilir. Uygulaman onaylanınca reklamlar gelmeye başlar.
Telegram Mini App
Script'i ekle ve alanı göster. Kullanıcı ve dil Telegram'dan otomatik alınır. Banner ve bildirim tarzı için bir kapsayıcı ver; tam ekran biçimler kendisi açılır.
<script src="https://telegram.org/js/telegram-web-app.js"></script>
<script src="https://cleanads.ai/sdk/v1.js"></script>
<div id="ad"></div>
<script>
// Banner or push-style
CleanAds.show("pk_PLACEMENT", "#ad");
// Rewarded
CleanAds.show("pk_REWARDED").then(function (result) {
if (result.rewarded) unlockReward(result.tx);
});
</script>Panelde bot token kaydedersen her istek Telegram imzasıyla doğrulanır ve imzası tutmayan istekler reddedilir.
Telegram botu
Bot sunucundan reklam iste, kullanıcıya gönder, gösterimi bildir. Sunucu anahtarını yalnızca sunucunda tut.
import requests
SECRET = "sk_..."
HEADERS = {"x-cleanads-secret": SECRET}
ad = requests.get("https://cleanads.ai/api/v1/ad",
params={"placement": "pk_PLACEMENT", "user": telegram_user_id, "lang": "tr"},
headers=HEADERS).json()["ad"]
if ad:
bot.send_message(chat_id, f"{ad['title']}\n{ad['body']}\n\nAd",
reply_markup=url_button(ad["cta"], ad["click_url"]))
requests.post(ad["impression_url"], headers=HEADERS)iOS
SDK kaynak kodu depodaki sdks klasöründedir.
import CleanAds
CleanAds.initialize(userId: currentUser.id)
if let ad = await CleanAds.load("pk_PLACEMENT") {
present(CleanAdsFullscreenController(ad: ad), animated: true)
}
// Banner
let banner = CleanAdsBannerView()
banner.load(placementKey: "pk_BANNER")Android
CleanAds.init(userId = user.id)
CleanAds.load("pk_PLACEMENT") { ad ->
if (ad != null) CleanAdsFullscreenActivity.show(context, ad, onReward = { grantInUi() })
}
// Banner
findViewById<CleanAdsBannerView>(R.id.banner).load("pk_BANNER")Flutter
CleanAds.init(userId: user.id, openUrl: (uri) => launchUrl(uri));
final ad = await CleanAds.load('pk_PLACEMENT');
if (ad != null) await showCleanAdsFullscreen(context, ad);
// Banner
CleanAdsBanner(placementKey: 'pk_BANNER')React Native
import { init, CleanAdsBanner } from "cleanads-react-native";
init({ userId: user.id });
<CleanAdsBanner placement="pk_BANNER" />HTTP API
Kendi istemcini yazmak için üç çağrı yeterli.
- Reklam iste. Doldurma yoksa ad alanı null döner.
- Reklam ekranda göründüğünde impression_url adresine bir kez POST at.
- Dokunulunca click_url adresini sistem tarayıcısında aç.
GET https://cleanads.ai/api/v1/ad?placement=pk_PLACEMENT&user=USER_ID&lang=tr
{
"ad": {
"format": "native",
"label": "Ad",
"title": "...", "body": "...", "cta": "Open",
"icon": "https://...", "image": null, "video": null,
"impression_url": "https://cleanads.ai/api/v1/imp?t=...",
"click_url": "https://cleanads.ai/api/v1/click?t=...",
"complete_url": null
}
}Reklamı her zaman ad.label etiketiyle göster.
Ödül bildirimi
Ödüllü reklam bitince panelde girdiğin adrese imzalı istek gelir. Ödülü sunucunda bu istekle ver, istemciye güvenme. Aynı tx değerini ikinci kez işleme.
// GET your-url?placement=&user_id=&reward=&amount=&tx=&ts=&sig=
const canonical = [placement, user_id, reward, amount, tx, ts].join(".");
const expected = crypto.createHmac("sha256", SERVER_SECRET).update(canonical).digest("hex");
if (crypto.timingSafeEqual(Buffer.from(expected), Buffer.from(sig))) grantOnce(tx);Dönüşüm bildirimi
Hedef adresine {click_id} ekle, dönüşüm olunca sunucundan çağır. Adresin tamamı kampanya sayfanda hazırdır.
GET https://cleanads.ai/api/v1/postback?key=pb_KEY&click_id=CLICK_ID&event=install&value=1.50app-ads.txt
Mobil uygulamalar için bu satırı geliştirici sitenin kök dizinindeki app-ads.txt dosyasına ekle. Yayıncı numaran uygulama sayfanda yazar.
cleanads.ai, pub-XXXXXXXXXXXXXXXX, DIRECT