این راهنما برای ناشرانی است که میخواهند بدون استفاده از Firebase از یک برنامه ++C با AdMob کسب درآمد کنند. اگر قصد دارید Firebase را در برنامه خود قرار دهید - یا اگر در نظر دارید - به جای آن به نسخه AdMob با Firebase این راهنما مراجعه کنید.
ادغام Google Mobile Ads C++ SDK در یک برنامه اولین گام برای نمایش تبلیغات و کسب درآمد است. هنگامی که SDK را ادغام کردید، می توانید یک قالب تبلیغاتی، مانند بینابینی یا پاداش، انتخاب کنید و مراحل اجرای آن را دنبال کنید.
Google Mobile Ads C++ SDK، کیت توسعه نرم افزاری iOS و Android Ads Google Mobile را پوشش می دهد و فقط در آن پلتفرم ها در دسترس است. Google Mobile Ads C++ SDK از ساختارهای Firebase C++ برای پشتیبانی از عملیات ناهمزمان استفاده میکند، بنابراین در فضای نام firebase::gma
قرار دارد.
اگر اولین باری است که این راهنما را مرور میکنید، توصیه میکنیم با استفاده از برنامه آزمایشی C++ Google Mobile Ads را دانلود کرده و دنبال کنید.
پیش نیازها
اندروید
- از اندروید استودیو 3.2 یا بالاتر استفاده کنید
- مطمئن شوید که فایل ساخت برنامه شما از مقادیر زیر استفاده می کند:
-
minSdkVersion
16 یا بالاتر -
compileSdkVersion
28 یا بالاتر
-
iOS
- از Xcode 13 یا بالاتر استفاده کنید
- iOS 10.0 یا بالاتر را هدف قرار دهید
برنامه خود را در حساب AdMob خود تنظیم کنید
با انجام مراحل زیر، برنامه خود را به عنوان یک برنامه AdMob ثبت کنید:
برنامه خود را با AdMob ثبت کنید . این مرحله یک برنامه AdMob با شناسه برنامه AdMob منحصر به فرد ایجاد می کند که در ادامه این راهنما مورد نیاز است.
Google Mobile Ads C++ SDK را نصب کنید
از آنجایی که Google Mobile Ads C++ SDK در فضای نام firebase::gma
قرار دارد، Firebase C++ SDK را دانلود کنید و سپس آن را در فهرستی که انتخاب می کنید از حالت فشرده خارج کنید.
Firebase C++ SDK مختص پلتفرم نیست، اما به پیکربندی کتابخانه مخصوص پلتفرم نیاز دارد.
اندروید
ما استفاده از CMake را توصیه میکنیم، اما میتوانید دستورالعملهای مربوط به ساخت ndk را در راهنمای شروع Firebase C++ SDK برای پیوند libfirebase_app.a
و libfirebase_gma.a
به برنامه خود بیابید.
در فایل
gradle.properties
پروژه خود، محل SDK زیپ نشده را مشخص کنید:systemProp.firebase_cpp_sdk.dir=FULL_PATH_TO_SDK
به فایل
settings.gradle
پروژه خود، محتوای زیر را اضافه کنید:def firebase_cpp_sdk_dir = System.getProperty('firebase_cpp_sdk.dir') gradle.ext.firebase_cpp_sdk_dir = "$firebase_cpp_sdk_dir" includeBuild "$firebase_cpp_sdk_dir"
به فایل Gradle ماژول (سطح برنامه) - معمولاً
app/build.gradle
- محتوای زیر را اضافه کنید، که شامل وابستگی کتابخانه برای Google Mobile Ads C++ SDK است.android.defaultConfig.externalNativeBuild.cmake { arguments "-DFIREBASE_CPP_SDK_DIR=$gradle.firebase_cpp_sdk_dir" } # Add the dependency for the Google Mobile Ads C++ SDK apply from: "$gradle.firebase_cpp_sdk_dir/Android/firebase_dependencies.gradle" firebaseCpp.dependencies { gma }
به فایل
CMakeLists.txt
پروژه خود، محتوای زیر را اضافه کنید.# Add Firebase libraries to the target using the function from the SDK. add_subdirectory(${FIREBASE_CPP_SDK_DIR} bin/ EXCLUDE_FROM_ALL) # Add the Google Mobile Ads C++ SDK. # The Firebase C++ library `firebase_app` is required, # and it must always be listed last. set(firebase_libs firebase_gma firebase_app ) target_link_libraries(${target_name} "${firebase_libs}")
برنامه خود را همگام کنید تا مطمئن شوید که همه وابستگی ها نسخه های لازم را دارند.
iOS
مراحل این بخش نمونه ای از نحوه افزودن Google Mobile Ads C++ SDK به پروژه iOS خود است.
CocoaPods نسخه 1 یا بالاتر را با اجرای:
sudo gem install cocoapods --pre
غلاف تبلیغات Google Mobile را از SDK خارجشده اضافه کنید.
اگر قبلاً یک پادفایل ندارید ایجاد کنید:
cd APP_DIRECTORY
pod init
به Podfile خود، پادها را برای Google Mobile Ads C++ SDK، Google User Messaging Platform SDK، و حداقل SDK هسته Firebase (که توسط GMA C++ SDK مورد نیاز است) اضافه کنید:
pod 'Firebase/CoreOnly' pod 'Google-Mobile-Ads-SDK' pod 'GoogleUserMessagingPlatform'
پادها را نصب کنید، سپس فایل
.xcworkspace
را در Xcode باز کنید.pod install
open APP.xcworkspace
چارچوب های زیر را از Firebase C++ SDK به پروژه اضافه کنید:
-
xcframeworks/firebase.xcframework
-
xcframeworks/firebase_gma.xcframework
-
شما آماده اید! برنامه C++ شما برای استفاده از Google Mobile Ads C++ SDK بدون هیچ سرویس Firebase دیگری پیکربندی شده است.
شناسه برنامه AdMob برنامه خود را پیکربندی کنید
اندروید
مرحله 3 از پیکربندی برنامه خود را همانطور که توسط راهنمای Android SDK Ads Mobile توضیح داده شده است دنبال کنید و سپس به این صفحه بازگردید.
iOS
مرحله Update your Info.plist را همانطور که در راهنمای iOS SDK Ads Mobile توضیح داده شده است دنبال کنید و سپس به این صفحه بازگردید.
Google Mobile Ads SDK را راهاندازی کنید
قبل از بارگیری تبلیغات، از برنامه خود بخواهید با فراخوانی firebase::gma::Initialize()
که SDK را مقداردهی اولیه میکند و پس از تکمیل اولیه (یا پس از وقفه 30 ثانیهای) یک firebase::Future
تکمیل کند. این کار باید فقط یک بار انجام شود، ایده آل در هنگام راه اندازی برنامه.
تبلیغات ممکن است با فراخوانی Initialize()
توسط Google Mobile Ads C++ SDK یا SDK های شریک واسطه بارگذاری شوند. اگر نیاز به کسب رضایت از کاربران در منطقه اقتصادی اروپا (EEA) دارید، هر گونه پرچم مخصوص درخواست را تنظیم کنید (مانند tag_for_child_directed_treatment
یا tag_for_under_age_of_consent
)، یا در غیر این صورت قبل از بارگیری تبلیغات اقدامی انجام دهید، مطمئن شوید که این کار را با فراخوانی firebase::gma::SetRequestConfiguration()
قبل از مقداردهی اولیه Google Mobile Ads C++ SDK. برای اطلاعات بیشتر به راهنمای هدف گذاری ما مراجعه کنید.
در اینجا مثالی از نحوه فراخوانی Initialize()
آورده شده است:
اندروید
// Initialize the Google Mobile Ads library
firebase::InitResult result;
Future<AdapterInitializationStatus> future =
firebase::gma::Initialize(jni_env, j_activity, &result);
if (result != kInitResultSuccess) {
// Initialization immediately failed, most likely due to a missing
// dependency. Check the device logs for more information.
return;
}
// Monitor the status of the future.
// See "Use a Future to monitor the completion status of a method call" below.
if (future.status() == firebase::kFutureStatusComplete &&
future.error() == firebase::gma::kAdErrorCodeNone) {
// Initialization completed.
} else {
// Initialization on-going, or an error has occurred.
}
iOS
// Initialize the Google Mobile Ads library.
firebase::InitResult result;
Future<AdapterInitializationStatus> future =
firebase::gma::Initialize(&result);
if (result != kInitResultSuccess) {
// Initialization immediately failed, most likely due to a missing
// dependency. Check the device logs for more information.
return;
}
// Monitor the status of the future.
// See "Use a Future to monitor the completion status of a method call" below.
if (future.status() == firebase::kFutureStatusComplete &&
future.error() == firebase::gma::kAdErrorCodeNone) {
// Initialization completed.
} else {
// Initialization on-going, or an error has occurred.
}
از Future
برای نظارت بر وضعیت تکمیل فراخوانی متد استفاده کنید
Future
راهی برای تعیین وضعیت تکمیل فراخوانی های متد ناهمزمان در اختیار شما قرار می دهد.
به عنوان مثال، زمانی که برنامه شما firebase::gma::Initialize()
را فراخوانی می کند، یک firebase::Future
ایجاد و برگردانده می شود. سپس برنامه شما میتواند status()
Future
را نظرسنجی کند تا مشخص کند چه زمانی مقداردهی اولیه به پایان رسیده است. پس از تکمیل، برنامه شما می تواند result()
فراخوانی کند تا AdapterInitializationStatus
حاصل را به دست آورد.
روشهایی که Future
را برمیگردانند، روش «آخرین نتیجه» مربوطه دارند که برنامهها میتوانند از آن برای بازیابی جدیدترین Future
برای یک عملکرد معین استفاده کنند. به عنوان مثال، firebase::gma::Initialize()
دارای یک روش متناظر به نام firebase::gma::InitializeLastResult()
است که Future
برمی گرداند که برنامه شما می تواند از آن برای بررسی وضعیت آخرین تماس با firebase::gma::Initialize()
.
اگر وضعیت Future
کامل باشد و کد خطای آن firebase::gma::kAdErrorCodeNone
باشد، عملیات با موفقیت به پایان رسیده است.
همچنین میتوانید تماسهایی را برای فراخوانی پس از تکمیل Future
ثبت کنید. در برخی موارد، تماس برگشتی در یک رشته دیگر اجرا میشود، بنابراین مطمئن شوید که کد شما امن است. این قطعه کد از یک نشانگر تابع برای پاسخ به تماس استفاده می کند:
// Registers the OnCompletion callback. user_data is a pointer that is passed verbatim
// to the callback as a void*. This allows you to pass any custom data to the callback
// handler. In this case, the app has no data, so you must pass nullptr.
firebase::gma::InitializeLastResult().OnCompletion(OnCompletionCallback,
/*user_data=*/nullptr);
// The OnCompletion callback function.
static void OnCompletionCallback(
const firebase::Future<AdapterInitializationStatus>& future, void* user_data) {
// Called when the Future is completed for the last call to firebase::gma::Initialize().
// If the error code is firebase::gma::kAdErrorCodeNone,
// then the SDK has been successfully initialized.
if (future.error() == firebase::gma::kAdErrorCodeNone) {
// success!
} else {
// failure.
}
}
یک قالب تبلیغ را انتخاب کنید
Google Mobile Ads C++ SDK اکنون وارد شده است و شما آماده اجرای یک تبلیغ هستید. AdMob فرمتهای مختلف تبلیغاتی را ارائه میدهد، بنابراین میتوانید یکی را انتخاب کنید که به بهترین وجه با تجربه کاربری برنامهتان مطابقت دارد.
بنر
تبلیغات مستطیلی که در بالا یا پایین صفحه نمایش دستگاه ظاهر می شوند. تبلیغات بنری در حالی که کاربران در حال تعامل با برنامه هستند روی صفحه می مانند و می توانند پس از مدت زمان معینی به طور خودکار بازخوانی شوند. اگر در زمینه تبلیغات موبایلی تازه کار هستید، آنها مکان خوبی برای شروع هستند.
بینابینی
تبلیغات تمام صفحه که رابط یک برنامه را تا زمانی که توسط کاربر بسته شود پوشش می دهند. آنها به بهترین وجه در توقف های طبیعی در جریان اجرای برنامه، مانند بین سطوح یک بازی یا درست پس از اتمام یک کار، استفاده می شوند.
پاداش داده شد
تبلیغاتی که به کاربران برای تماشای ویدیوهای کوتاه و تعامل با تبلیغات و نظرسنجیهای قابل پخش پاداش میدهد. برای کسب درآمد از برنامه های بازی رایگان استفاده می شود.
،این راهنما برای ناشرانی است که میخواهند بدون استفاده از Firebase از یک برنامه ++C با AdMob کسب درآمد کنند. اگر قصد دارید Firebase را در برنامه خود قرار دهید - یا اگر در نظر دارید - به جای آن به نسخه AdMob با Firebase این راهنما مراجعه کنید.
ادغام Google Mobile Ads C++ SDK در یک برنامه اولین گام برای نمایش تبلیغات و کسب درآمد است. هنگامی که SDK را ادغام کردید، می توانید یک قالب تبلیغاتی، مانند بینابینی یا پاداش، انتخاب کنید و مراحل اجرای آن را دنبال کنید.
Google Mobile Ads C++ SDK، کیت توسعه نرم افزاری iOS و Android Ads Google Mobile را پوشش می دهد و فقط در آن پلتفرم ها در دسترس است. Google Mobile Ads C++ SDK از ساختارهای Firebase C++ برای پشتیبانی از عملیات ناهمزمان استفاده میکند، بنابراین در فضای نام firebase::gma
قرار دارد.
اگر اولین باری است که این راهنما را مرور میکنید، توصیه میکنیم با استفاده از برنامه آزمایشی C++ Google Mobile Ads را دانلود کرده و دنبال کنید.
پیش نیازها
اندروید
- از اندروید استودیو 3.2 یا بالاتر استفاده کنید
- مطمئن شوید که فایل ساخت برنامه شما از مقادیر زیر استفاده می کند:
-
minSdkVersion
16 یا بالاتر -
compileSdkVersion
28 یا بالاتر
-
iOS
- از Xcode 13 یا بالاتر استفاده کنید
- iOS 10.0 یا بالاتر را هدف قرار دهید
برنامه خود را در حساب AdMob خود تنظیم کنید
با انجام مراحل زیر، برنامه خود را به عنوان یک برنامه AdMob ثبت کنید:
برنامه خود را با AdMob ثبت کنید . این مرحله یک برنامه AdMob با شناسه برنامه AdMob منحصر به فرد ایجاد می کند که در ادامه این راهنما مورد نیاز است.
Google Mobile Ads C++ SDK را نصب کنید
از آنجایی که Google Mobile Ads C++ SDK در فضای نام firebase::gma
قرار دارد، Firebase C++ SDK را دانلود کنید و سپس آن را در فهرستی که انتخاب می کنید از حالت فشرده خارج کنید.
Firebase C++ SDK مختص پلتفرم نیست، اما به پیکربندی کتابخانه مخصوص پلتفرم نیاز دارد.
اندروید
ما استفاده از CMake را توصیه میکنیم، اما میتوانید دستورالعملهای مربوط به ساخت ndk را در راهنمای شروع Firebase C++ SDK برای پیوند libfirebase_app.a
و libfirebase_gma.a
به برنامه خود بیابید.
در فایل
gradle.properties
پروژه خود، محل SDK زیپ نشده را مشخص کنید:systemProp.firebase_cpp_sdk.dir=FULL_PATH_TO_SDK
به فایل
settings.gradle
پروژه خود، محتوای زیر را اضافه کنید:def firebase_cpp_sdk_dir = System.getProperty('firebase_cpp_sdk.dir') gradle.ext.firebase_cpp_sdk_dir = "$firebase_cpp_sdk_dir" includeBuild "$firebase_cpp_sdk_dir"
به فایل Gradle ماژول (سطح برنامه) - معمولاً
app/build.gradle
- محتوای زیر را اضافه کنید، که شامل وابستگی کتابخانه برای Google Mobile Ads C++ SDK است.android.defaultConfig.externalNativeBuild.cmake { arguments "-DFIREBASE_CPP_SDK_DIR=$gradle.firebase_cpp_sdk_dir" } # Add the dependency for the Google Mobile Ads C++ SDK apply from: "$gradle.firebase_cpp_sdk_dir/Android/firebase_dependencies.gradle" firebaseCpp.dependencies { gma }
به فایل
CMakeLists.txt
پروژه خود، محتوای زیر را اضافه کنید.# Add Firebase libraries to the target using the function from the SDK. add_subdirectory(${FIREBASE_CPP_SDK_DIR} bin/ EXCLUDE_FROM_ALL) # Add the Google Mobile Ads C++ SDK. # The Firebase C++ library `firebase_app` is required, # and it must always be listed last. set(firebase_libs firebase_gma firebase_app ) target_link_libraries(${target_name} "${firebase_libs}")
برنامه خود را همگام کنید تا مطمئن شوید که همه وابستگی ها نسخه های لازم را دارند.
iOS
مراحل این بخش نمونه ای از نحوه افزودن Google Mobile Ads C++ SDK به پروژه iOS خود است.
CocoaPods نسخه 1 یا بالاتر را با اجرای:
sudo gem install cocoapods --pre
غلاف تبلیغات Google Mobile را از SDK خارجشده اضافه کنید.
اگر قبلاً یک پادفایل ندارید ایجاد کنید:
cd APP_DIRECTORY
pod init
به Podfile خود، پادها را برای Google Mobile Ads C++ SDK، Google User Messaging Platform SDK، و حداقل SDK هسته Firebase (که توسط GMA C++ SDK مورد نیاز است) اضافه کنید:
pod 'Firebase/CoreOnly' pod 'Google-Mobile-Ads-SDK' pod 'GoogleUserMessagingPlatform'
پادها را نصب کنید، سپس فایل
.xcworkspace
را در Xcode باز کنید.pod install
open APP.xcworkspace
چارچوب های زیر را از Firebase C++ SDK به پروژه اضافه کنید:
-
xcframeworks/firebase.xcframework
-
xcframeworks/firebase_gma.xcframework
-
شما آماده اید! برنامه C++ شما برای استفاده از Google Mobile Ads C++ SDK بدون هیچ سرویس Firebase دیگری پیکربندی شده است.
شناسه برنامه AdMob برنامه خود را پیکربندی کنید
اندروید
مرحله 3 از پیکربندی برنامه خود را همانطور که توسط راهنمای Android SDK Ads Mobile توضیح داده شده است دنبال کنید و سپس به این صفحه بازگردید.
iOS
مرحله Update your Info.plist را همانطور که در راهنمای iOS SDK Ads Mobile توضیح داده شده است دنبال کنید و سپس به این صفحه بازگردید.
Google Mobile Ads SDK را راهاندازی کنید
قبل از بارگیری تبلیغات، از برنامه خود بخواهید با فراخوانی firebase::gma::Initialize()
که SDK را مقداردهی اولیه میکند و پس از تکمیل اولیه (یا پس از وقفه 30 ثانیهای) یک firebase::Future
تکمیل کند. این کار باید فقط یک بار انجام شود، ایده آل در هنگام راه اندازی برنامه.
تبلیغات ممکن است با فراخوانی Initialize()
توسط Google Mobile Ads C++ SDK یا SDK های شریک واسطه بارگذاری شوند. اگر نیاز به کسب رضایت از کاربران در منطقه اقتصادی اروپا (EEA) دارید، هر گونه پرچم مخصوص درخواست را تنظیم کنید (مانند tag_for_child_directed_treatment
یا tag_for_under_age_of_consent
)، یا در غیر این صورت قبل از بارگیری تبلیغات اقدامی انجام دهید، مطمئن شوید که این کار را با فراخوانی firebase::gma::SetRequestConfiguration()
قبل از مقداردهی اولیه Google Mobile Ads C++ SDK. برای اطلاعات بیشتر به راهنمای هدف گذاری ما مراجعه کنید.
در اینجا مثالی از نحوه فراخوانی Initialize()
آورده شده است:
اندروید
// Initialize the Google Mobile Ads library
firebase::InitResult result;
Future<AdapterInitializationStatus> future =
firebase::gma::Initialize(jni_env, j_activity, &result);
if (result != kInitResultSuccess) {
// Initialization immediately failed, most likely due to a missing
// dependency. Check the device logs for more information.
return;
}
// Monitor the status of the future.
// See "Use a Future to monitor the completion status of a method call" below.
if (future.status() == firebase::kFutureStatusComplete &&
future.error() == firebase::gma::kAdErrorCodeNone) {
// Initialization completed.
} else {
// Initialization on-going, or an error has occurred.
}
iOS
// Initialize the Google Mobile Ads library.
firebase::InitResult result;
Future<AdapterInitializationStatus> future =
firebase::gma::Initialize(&result);
if (result != kInitResultSuccess) {
// Initialization immediately failed, most likely due to a missing
// dependency. Check the device logs for more information.
return;
}
// Monitor the status of the future.
// See "Use a Future to monitor the completion status of a method call" below.
if (future.status() == firebase::kFutureStatusComplete &&
future.error() == firebase::gma::kAdErrorCodeNone) {
// Initialization completed.
} else {
// Initialization on-going, or an error has occurred.
}
از Future
برای نظارت بر وضعیت تکمیل فراخوانی متد استفاده کنید
Future
راهی برای تعیین وضعیت تکمیل فراخوانی های متد ناهمزمان در اختیار شما قرار می دهد.
به عنوان مثال، زمانی که برنامه شما firebase::gma::Initialize()
را فراخوانی می کند، یک firebase::Future
ایجاد و برگردانده می شود. سپس برنامه شما میتواند status()
Future
را نظرسنجی کند تا مشخص کند چه زمانی مقداردهی اولیه به پایان رسیده است. پس از تکمیل، برنامه شما می تواند result()
فراخوانی کند تا AdapterInitializationStatus
حاصل را به دست آورد.
روشهایی که Future
را برمیگردانند، روش «آخرین نتیجه» مربوطه دارند که برنامهها میتوانند از آن برای بازیابی جدیدترین Future
برای یک عملکرد معین استفاده کنند. به عنوان مثال، firebase::gma::Initialize()
دارای یک روش متناظر به نام firebase::gma::InitializeLastResult()
است که Future
برمی گرداند که برنامه شما می تواند از آن برای بررسی وضعیت آخرین تماس با firebase::gma::Initialize()
.
اگر وضعیت Future
کامل باشد و کد خطای آن firebase::gma::kAdErrorCodeNone
باشد، عملیات با موفقیت به پایان رسیده است.
همچنین میتوانید تماسهایی را برای فراخوانی پس از تکمیل Future
ثبت کنید. در برخی موارد، تماس برگشتی در یک رشته دیگر اجرا میشود، بنابراین مطمئن شوید که کد شما امن است. این قطعه کد از یک نشانگر تابع برای پاسخ به تماس استفاده می کند:
// Registers the OnCompletion callback. user_data is a pointer that is passed verbatim
// to the callback as a void*. This allows you to pass any custom data to the callback
// handler. In this case, the app has no data, so you must pass nullptr.
firebase::gma::InitializeLastResult().OnCompletion(OnCompletionCallback,
/*user_data=*/nullptr);
// The OnCompletion callback function.
static void OnCompletionCallback(
const firebase::Future<AdapterInitializationStatus>& future, void* user_data) {
// Called when the Future is completed for the last call to firebase::gma::Initialize().
// If the error code is firebase::gma::kAdErrorCodeNone,
// then the SDK has been successfully initialized.
if (future.error() == firebase::gma::kAdErrorCodeNone) {
// success!
} else {
// failure.
}
}
یک قالب تبلیغ را انتخاب کنید
Google Mobile Ads C++ SDK اکنون وارد شده است و شما آماده اجرای یک تبلیغ هستید. AdMob فرمتهای مختلف تبلیغاتی را ارائه میدهد، بنابراین میتوانید یکی را انتخاب کنید که به بهترین وجه با تجربه کاربری برنامهتان مطابقت دارد.
بنر
تبلیغات مستطیلی که در بالا یا پایین صفحه نمایش دستگاه ظاهر می شوند. تبلیغات بنری در حالی که کاربران در حال تعامل با برنامه هستند روی صفحه می مانند و می توانند پس از مدت زمان معینی به طور خودکار بازخوانی شوند. اگر در زمینه تبلیغات موبایلی تازه کار هستید، آنها مکان خوبی برای شروع هستند.
بینابینی
تبلیغات تمام صفحه که رابط یک برنامه را تا زمانی که توسط کاربر بسته شود پوشش می دهند. آنها به بهترین وجه در توقف های طبیعی در جریان اجرای برنامه، مانند بین سطوح یک بازی یا درست پس از اتمام یک کار، استفاده می شوند.
پاداش داده شد
تبلیغاتی که به کاربران برای تماشای ویدیوهای کوتاه و تعامل با تبلیغات و نظرسنجیهای قابل پخش پاداش میدهد. برای کسب درآمد از برنامه های بازی رایگان استفاده می شود.