ا SDK تبلیغات HamrahAds برای اندروید (Kotlin/Java) با پشتیبانی از بنر، بینابینی (Interstitial) و نیتیو (Native).
- حداقل نسخه اندروید: API 21
- پیشنهاد: Android Gradle Plugin و Kotlin بهروز
در فایل settings.gradle یا build.gradle (سطح پروژه)، ریپازیتوری JitPack را اضافه کنید:
Gradle (Groovy)
dependencyResolutionManagement {
repositories {
google()
mavenCentral()
maven { url "https://jitpack.io" }
}
}Gradle (Kotlin DSL)
dependencyResolutionManagement {
repositories {
google()
mavenCentral()
maven(url = "https://jitpack.io")
}
}در build.gradle ماژول اپ:
dependencies {
implementation("com.github.ayantech:HamrahAds:0.1.44")
}روال کلی SDK به این شکل است:
- یکبار در شروع اپ، SDK را با AppKey مقداردهی اولیه کنید.
- برای هر Zone، ابتدا Request بزنید (دریافت آگهی و ذخیره داخلی).
- بعد از موفقیت Request، Show/View را اجرا کنید.
این مرحله AppKey را ذخیره میکند و برای Requestها لازم است.
import ir.ayantech.hamrahads.HamrahAds
import ir.ayantech.hamrahads.listener.InitListener
import ir.ayantech.hamrahads.model.error.HamrahAdsError
HamrahAds.Initializer()
.setContext(applicationContext)
.initId("YOUR_APP_KEY")
.initListener(object : InitListener {
override fun onSuccess() {
// آماده استفاده
}
override fun onError(error: HamrahAdsError) {
// خطا در init
}
})
.build()import ir.ayantech.hamrahads.HamrahAds
import ir.ayantech.hamrahads.listener.RequestListener
import ir.ayantech.hamrahads.model.error.HamrahAdsError
val request = HamrahAds.RequestBannerAds()
.setContext(requireContext())
.initId("YOUR_BANNER_ZONE_ID")
.initListener(object : RequestListener {
override fun onSuccess() {
// حالا میتونید بنر رو نمایش بدید
}
override fun onError(error: HamrahAdsError) {
// خطا در دریافت بنر
}
})
.build()
// در صورت نیاز:
// request?.cancelRequest()اگر ViewGroup بدهید بنر داخل همان اضافه میشود؛ اگر ViewGroup ندهید، بنر به صورت پیشفرض پایین صفحه به Activity اضافه میشود.
import androidx.appcompat.app.AppCompatActivity
import ir.ayantech.hamrahads.HamrahAds
import ir.ayantech.hamrahads.listener.ShowListener
import ir.ayantech.hamrahads.model.enums.BannerSize
import ir.ayantech.hamrahads.model.error.HamrahAdsError
val bannerView = HamrahAds.ShowBannerAds()
.setContext(requireActivity() as AppCompatActivity)
.setSize(BannerSize.BANNER_320x50)
.initId("YOUR_BANNER_ZONE_ID")
.setViewGroup(binding.bannerContainer) // اختیاری
.initListener(object : ShowListener {
override fun onLoaded() {}
override fun onDisplayed() {}
override fun onClick() {}
override fun onClose() {}
override fun onError(error: HamrahAdsError) {
// خطا در نمایش بنر
}
})
.build()
// در onDestroy/onDestroyView:
// bannerView?.destroyAds()import ir.ayantech.hamrahads.HamrahAds
import ir.ayantech.hamrahads.listener.RequestListener
import ir.ayantech.hamrahads.model.error.HamrahAdsError
val request = HamrahAds.RequestInterstitialAds()
.setContext(requireContext())
.initId("YOUR_INTERSTITIAL_ZONE_ID")
.initListener(object : RequestListener {
override fun onSuccess() {
// آماده نمایش
}
override fun onError(error: HamrahAdsError) {
// خطا در دریافت
}
})
.build()
// request?.cancelRequest()نمایش بینابینی به صورت تمامصفحه انجام میشود.
import androidx.appcompat.app.AppCompatActivity
import ir.ayantech.hamrahads.HamrahAds
import ir.ayantech.hamrahads.listener.ShowListener
import ir.ayantech.hamrahads.model.error.HamrahAdsError
val interstitialView = HamrahAds.ShowInterstitialAds()
.setContext(requireActivity() as AppCompatActivity)
.initId("YOUR_INTERSTITIAL_ZONE_ID")
.initListener(object : ShowListener {
override fun onLoaded() {}
override fun onDisplayed() {}
override fun onClick() {}
override fun onClose() {}
override fun onError(error: HamrahAdsError) {
// خطا در نمایش
}
})
.build()
// در onDestroy/onDestroyView:
// interstitialView?.destroyAds()در ViewGroupای که به SDK میدهید، SDK به دنبال این IDها میگردد و آنها را پر میکند:
hamrah_ad_native_titlehamrah_ad_native_descriptionhamrah_ad_native_ctahamrah_ad_native_logohamrah_ad_native_bannerhamrah_ad_native_cta_view(اختیاری؛ یک لایه کلیکگیر)
نمونهی ساده:
<androidx.cardview.widget.CardView
android:id="@+id/nativeContainer"
android:layout_width="match_parent"
android:layout_height="wrap_content">
<View
android:id="@+id/hamrah_ad_native_cta_view"
android:layout_width="match_parent"
android:layout_height="200dp" />
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="vertical">
<ImageView
android:id="@+id/hamrah_ad_native_banner"
android:layout_width="match_parent"
android:layout_height="200dp"
android:scaleType="centerCrop" />
<TextView
android:id="@+id/hamrah_ad_native_title"
android:layout_width="match_parent"
android:layout_height="wrap_content" />
<TextView
android:id="@+id/hamrah_ad_native_description"
android:layout_width="match_parent"
android:layout_height="wrap_content" />
<Button
android:id="@+id/hamrah_ad_native_cta"
android:layout_width="wrap_content"
android:layout_height="wrap_content" />
<ImageView
android:id="@+id/hamrah_ad_native_logo"
android:layout_width="72dp"
android:layout_height="72dp" />
</LinearLayout>
</androidx.cardview.widget.CardView>import ir.ayantech.hamrahads.HamrahAds
import ir.ayantech.hamrahads.listener.RequestListener
import ir.ayantech.hamrahads.model.error.HamrahAdsError
val request = HamrahAds.RequestNativeAds()
.setContext(requireContext())
.initId("YOUR_NATIVE_ZONE_ID")
.initListener(object : RequestListener {
override fun onSuccess() {}
override fun onError(error: HamrahAdsError) {}
})
.build()
// request?.cancelRequest()import androidx.appcompat.app.AppCompatActivity
import ir.ayantech.hamrahads.HamrahAds
import ir.ayantech.hamrahads.listener.ShowListener
import ir.ayantech.hamrahads.model.error.HamrahAdsError
val nativeView = HamrahAds.ShowNativeAds()
.setContext(requireActivity() as AppCompatActivity)
.setViewGroup(binding.nativeContainer)
.initId("YOUR_NATIVE_ZONE_ID")
.initListener(object : ShowListener {
override fun onLoaded() {}
override fun onDisplayed() {}
override fun onClick() {}
override fun onClose() {}
override fun onError(error: HamrahAdsError) {}
})
.build()
// در onDestroy/onDestroyView:
// nativeView?.destroyAds()برای جلوگیری از نشت حافظه:
- برای Requestها از
cancelRequest()درonDestroy/onDestroyViewاستفاده کنید. - برای Viewها از
destroyAds()درonDestroy/onDestroyViewاستفاده کنید.
در همه Callbackها، خطا از نوع HamrahAdsError برمیگردد:
code: کد خطا (مثلG00019)description: توضیح خطاtype: نوع خطا (LocalیاRemote)
کدهای عمومی موجود:
| شناسه داخلی | کد | توضیح |
|---|---|---|
| 0 | G00010 | اطلاعات وارد شده کامل نیست |
| 1 | G00011 | بدنه پاسخ (body) خالی است |
| 2 | G00012 | بدنه خطا (error body) خالی است |
| 3 | G00013 | خطا در تبدیل پاسخ خطا |
| 4 | G00014 | خطا در درخواست شبکه |
| 5 | G00015 | دانلود تصویر تبلیغ ناموفق بود |
| 6 | G00017 | اطلاعات تبلیغ موجود نیست |
| 7 | G00018 | نمایش وب دچار مشکل شد |
| 8 | G00019 | AppKey خالی است |
این SDK به صورت پیشفرض در Manifest خودش موارد زیر را اضافه میکند:
INTERNETACCESS_WIFI_STATEcom.google.android.gms.permission.AD_ID
اگر میخواهید SDK موقعیت مکانی را هم استفاده کند، در اپ خودتان این مجوز را اضافه کنید:
<uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" />- قبل از هر Request، حتما Initialization را با AppKey انجام دهید؛ در غیر اینصورت خطای
G00019دریافت میکنید. - نمایش (Show/View) از دادههای ذخیرهشده داخلی استفاده میکند؛ پس اگر Request موفق نباشد، Show هم خطا میدهد.