Appodeal Android Integration (Code)

Learn how integrate Appodeal Android SDK and get the best ad mediation! You will learn how to use banners, interstitials, rewarded videos and native ads . Native ads have templates but you can also build a fully customized native ad.

 

This post contains all the code that’s been written in this YouTube video.

 

You can also check out this GitHub repository: https://github.com/ResoCoder/AppodealAndroidIntegrationTutorial

 

Appodeal Android integration official website is here.

 

MainActivity.kt

package com.resocoder.appodealprep

import android.os.Bundle
import android.support.v7.app.AppCompatActivity
import android.widget.Toast
import com.appodeal.ads.Appodeal
import com.appodeal.ads.RewardedVideoCallbacks
import kotlinx.android.synthetic.main.activity_main.*


class MainActivity : AppCompatActivity() {

    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        setContentView(R.layout.activity_main)

        //change this app key
        val appKey = "64dba8c39bcae63c9d8529fe144186375774cbecccfd09a0"
        Appodeal.disableLocationPermissionCheck()
        Appodeal.setTesting(true)
        Appodeal.setBannerViewId(R.id.appodeal_banner_view)
        Appodeal.initialize(this, appKey, Appodeal.INTERSTITIAL or Appodeal.REWARDED_VIDEO
                or Appodeal.BANNER or Appodeal.NATIVE)

        //banners
        btn_show_banner.setOnClickListener {
            Appodeal.show(this, Appodeal.BANNER_VIEW)
        }

        btn_hide_banner.setOnClickListener {
            Appodeal.hide(this, Appodeal.BANNER)
        }

        //interstitials
        btn_show_interstitial.setOnClickListener {
            Appodeal.show(this, Appodeal.INTERSTITIAL)
        }

        //you can add callbacks to any ad format, not just Rewarded videos
        Appodeal.setRewardedVideoCallbacks(object : RewardedVideoCallbacks{
            override fun onRewardedVideoFinished(p0: Int, p1: String?) {
                showToastWithText("Rewarded Video Finished, added 30 coins to the inventory.")
            }

            override fun onRewardedVideoClosed(p0: Boolean) {
                showToastWithText("Rewarded Video Closed")
            }

            override fun onRewardedVideoLoaded() {
                showToastWithText("Rewarded Video Loaded")
            }

            override fun onRewardedVideoFailedToLoad() {
                showToastWithText("Rewarded Video Failed to Load")
            }

            override fun onRewardedVideoShown() {
                showToastWithText("Rewarded Video Shown")
            }

        })

        btn_show_rewarded.setOnClickListener {
            Appodeal.show(this, Appodeal.REWARDED_VIDEO)
        }

        //native ads
        Appodeal.cache(this, Appodeal.NATIVE)

        btn_show_native.setOnClickListener {
            val nativeAd = Appodeal.getNativeAds(1)[0]
            native_ad_view.setNativeAd(nativeAd)
            Appodeal.cache(this, Appodeal.NATIVE)
        }

        //you can also build a completely custom looking native ad
        //let's get the title of a native ad and display it
        btn_show_native_title.setOnClickListener {
            val nativeAd = Appodeal.getNativeAds(1)[0]
            textView_native_ad_title.text = nativeAd.title
            Appodeal.cache(this, Appodeal.NATIVE)
        }
    }

    public override fun onResume() {
        super.onResume()
        Appodeal.onResume(this, Appodeal.BANNER)
    }

    private fun showToastWithText(text: String){
        Toast.makeText(this, text, Toast.LENGTH_LONG).show()
    }
}

 

activity_main.xml

<?xml version="1.0" encoding="utf-8"?>
<android.support.constraint.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    tools:context="com.resocoder.appodealprep.MainActivity">

    <com.appodeal.ads.BannerView
        android:id="@+id/appodeal_banner_view"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:visibility="gone"
        app:layout_constraintBottom_toBottomOf="parent"
        app:layout_constraintEnd_toEndOf="parent"
        app:layout_constraintHorizontal_bias="0.0"
        app:layout_constraintLeft_toLeftOf="parent"
        app:layout_constraintRight_toRightOf="parent"
        app:layout_constraintStart_toStartOf="parent"
        app:layout_constraintTop_toTopOf="parent"
        app:layout_constraintVertical_bias="0.07"
        tools:visibility="visible" />

    <Button
        android:id="@+id/btn_show_banner"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_marginBottom="8dp"
        android:layout_marginEnd="8dp"
        android:layout_marginStart="8dp"
        android:layout_marginTop="8dp"
        android:text="Show Banner"
        app:layout_constraintBottom_toBottomOf="parent"
        app:layout_constraintEnd_toEndOf="parent"
        app:layout_constraintHorizontal_bias="0.032"
        app:layout_constraintLeft_toLeftOf="parent"
        app:layout_constraintStart_toStartOf="parent"
        app:layout_constraintTop_toTopOf="parent"
        app:layout_constraintVertical_bias="0.21" />

    <Button
        android:id="@+id/btn_hide_banner"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_marginBottom="8dp"
        android:layout_marginEnd="8dp"
        android:layout_marginStart="8dp"
        android:layout_marginTop="8dp"
        android:text="Hide Banner"
        app:layout_constraintBottom_toBottomOf="parent"
        app:layout_constraintEnd_toEndOf="parent"
        app:layout_constraintHorizontal_bias="0.968"
        app:layout_constraintLeft_toLeftOf="parent"
        app:layout_constraintStart_toStartOf="parent"
        app:layout_constraintTop_toTopOf="parent"
        app:layout_constraintVertical_bias="0.21" />

    <Button
        android:id="@+id/btn_show_interstitial"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_marginBottom="8dp"
        android:layout_marginEnd="8dp"
        android:layout_marginStart="8dp"
        android:layout_marginTop="8dp"
        android:text="Show Interstitial"
        app:layout_constraintBottom_toBottomOf="parent"
        app:layout_constraintEnd_toEndOf="parent"
        app:layout_constraintHorizontal_bias="0.038"
        app:layout_constraintLeft_toLeftOf="parent"
        app:layout_constraintStart_toStartOf="parent"
        app:layout_constraintTop_toTopOf="parent"
        app:layout_constraintVertical_bias="0.317" />

    <Button
        android:id="@+id/btn_show_rewarded"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_marginBottom="8dp"
        android:layout_marginEnd="8dp"
        android:layout_marginStart="8dp"
        android:layout_marginTop="8dp"
        android:text="Show Rewarded"
        app:layout_constraintBottom_toBottomOf="parent"
        app:layout_constraintEnd_toEndOf="parent"
        app:layout_constraintHorizontal_bias="0.964"
        app:layout_constraintLeft_toLeftOf="parent"
        app:layout_constraintStart_toStartOf="parent"
        app:layout_constraintTop_toTopOf="parent"
        app:layout_constraintVertical_bias="0.317" />

    <Button
        android:id="@+id/btn_show_native"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_marginBottom="8dp"
        android:layout_marginEnd="8dp"
        android:layout_marginStart="8dp"
        android:layout_marginTop="8dp"
        android:text="Show Native"
        app:layout_constraintBottom_toBottomOf="parent"
        app:layout_constraintEnd_toEndOf="parent"
        app:layout_constraintHorizontal_bias="0.032"
        app:layout_constraintLeft_toLeftOf="parent"
        app:layout_constraintStart_toStartOf="parent"
        app:layout_constraintTop_toTopOf="parent"
        app:layout_constraintVertical_bias="0.425" />

    <Button
        android:id="@+id/btn_show_native_title"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_marginBottom="8dp"
        android:layout_marginEnd="8dp"
        android:layout_marginStart="8dp"
        android:layout_marginTop="8dp"
        android:text="Show Native Title"
        app:layout_constraintBottom_toBottomOf="parent"
        app:layout_constraintEnd_toEndOf="parent"
        app:layout_constraintHorizontal_bias="0.961"
        app:layout_constraintLeft_toLeftOf="parent"
        app:layout_constraintStart_toStartOf="parent"
        app:layout_constraintTop_toTopOf="parent"
        app:layout_constraintVertical_bias="0.425" />

    <com.appodeal.ads.native_ad.views.NativeAdViewContentStream
        android:id="@+id/native_ad_view"
        android:layout_width="200dp"
        android:layout_height="200dp"
        android:layout_marginBottom="8dp"
        android:layout_marginTop="8dp"
        app:layout_constraintBottom_toBottomOf="parent"
        app:layout_constraintEnd_toEndOf="parent"
        app:layout_constraintLeft_toLeftOf="parent"
        app:layout_constraintRight_toRightOf="parent"
        app:layout_constraintStart_toStartOf="parent"
        app:layout_constraintTop_toTopOf="parent"
        app:layout_constraintVertical_bias="0.932" />

    <TextView
        android:id="@+id/textView_native_ad_title"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_marginBottom="8dp"
        android:layout_marginEnd="8dp"
        android:layout_marginRight="16dp"
        android:layout_marginStart="8dp"
        android:layout_marginTop="8dp"
        android:textAppearance="@style/Base.TextAppearance.AppCompat.Medium"
        app:layout_constraintBottom_toBottomOf="parent"
        app:layout_constraintEnd_toEndOf="parent"
        app:layout_constraintHorizontal_bias="0.973"
        app:layout_constraintRight_toRightOf="parent"
        app:layout_constraintStart_toStartOf="parent"
        app:layout_constraintTop_toTopOf="parent"
        app:layout_constraintVertical_bias="0.531"
        tools:text="Ad Title" />


</android.support.constraint.ConstraintLayout>

 

build.gradle for app module

...
dependencies {
    ...
    compile 'com.google.android.gms:play-services-ads:11.8.0'
    compile 'com.google.android.gms:play-services-location:11.8.0'
    compile project(':adcolony-sdk-3.1.2')
    compile 'com.squareup.picasso:picasso:2.5.2' //for Inmobi
}

 

AndroidManifest.xml

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    package="com.resocoder.appodealprep">

    <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
    <uses-permission android:name="android.permission.INTERNET" />
    <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" /> <!--optional -->
    <uses-permission android:name="android.permission.ACCESS_WIFI_STATE" /> <!--optional-->

    <application
        android:allowBackup="true"
        android:icon="@mipmap/ic_launcher"
        android:label="@string/app_name"
        android:roundIcon="@mipmap/ic_launcher_round"
        android:supportsRtl="true"
        android:theme="@style/AppTheme">
        <activity android:name=".MainActivity">
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />

                <category android:name="android.intent.category.LAUNCHER" />
            </intent-filter>
        </activity>

        <activity android:name="com.appodeal.ads.InterstitialActivity"
            android:configChanges="orientation|screenSize"
            android:theme="@android:style/Theme.Translucent.NoTitleBar" />
        <activity android:name="com.appodeal.ads.VideoActivity"
            android:configChanges="orientation|screenSize"
            android:theme="@android:style/Theme.Translucent.NoTitleBar" />
        <activity android:name="com.appodeal.ads.LoaderActivity"
            android:configChanges="orientation|screenSize"
            android:theme="@android:style/Theme.Translucent.NoTitleBar" />
        <activity android:name="com.appodeal.ads.VideoPlayerActivity"
            android:theme="@android:style/Theme.Black.NoTitleBar.Fullscreen"/>
        <receiver android:name="com.appodeal.ads.AppodealPackageAddedReceiver" android:exported="true" android:enabled="true">
            <intent-filter>
                <action android:name="android.intent.action.PACKAGE_ADDED" />
                <data android:scheme="package" />
            </intent-filter>
        </receiver>
        <activity android:name="com.appodeal.ads.TestActivity"
            android:theme="@android:style/Theme.Translucent.NoTitleBar" />

        <meta-data android:name="com.google.android.gms.version" android:value="@integer/google_play_services_version" />
        <activity android:name="com.google.android.gms.ads.AdActivity"
            android:configChanges="keyboard|keyboardHidden|orientation|screenLayout|uiMode|screenSize|smallestScreenSize"
            android:theme="@android:style/Theme.Translucent" />

        <activity android:name="com.chartboost.sdk.CBImpressionActivity" android:excludeFromRecents="true"
            android:hardwareAccelerated="true" android:theme="@android:style/Theme.Translucent.NoTitleBar.Fullscreen"
            android:configChanges="keyboardHidden|orientation|screenSize" />

        <activity android:name="com.applovin.adview.AppLovinInterstitialActivity" android:configChanges="orientation|screenSize"/>
        <activity android:name="com.applovin.adview.AppLovinConfirmationActivity" android:configChanges="orientation|screenSize"/>

        <activity android:name="com.mopub.mobileads.MoPubActivity"
            android:configChanges="keyboardHidden|orientation|screenSize"
            android:theme="@android:style/Theme.Translucent" />
        <activity android:name="com.mopub.common.MoPubBrowser"
            android:configChanges="keyboardHidden|orientation|screenSize" />
        <activity android:name="com.mopub.mobileads.MraidActivity"
            android:configChanges="keyboardHidden|orientation|screenSize" />
        <activity android:name="com.mopub.mobileads.MraidVideoPlayerActivity"
            android:configChanges="keyboardHidden|orientation|screenSize" />
        <activity android:name="com.mopub.mobileads.RewardedMraidActivity"
            android:configChanges="keyboardHidden|orientation|screenSize"/>

        <activity android:name="org.nexage.sourcekit.vast.activity.VASTActivity"
            android:theme="@android:style/Theme.NoTitleBar.Fullscreen"
            android:configChanges="keyboardHidden|orientation|screenSize"/>

        <activity android:name="org.nexage.sourcekit.vast.activity.VPAIDActivity"
            android:theme="@android:style/Theme.NoTitleBar.Fullscreen" />

        <activity android:name="com.appodeal.ads.networks.vpaid.VPAIDActivity"
            android:theme="@android:style/Theme.NoTitleBar.Fullscreen" />

        <activity android:name="com.amazon.device.ads.AdActivity" android:configChanges="keyboardHidden|orientation|screenSize"/>

        <activity android:name="com.my.target.ads.MyTargetActivity" android:configChanges="keyboard|keyboardHidden|orientation|screenLayout|uiMode|screenSize|smallestScreenSize"
            android:hardwareAccelerated="true"/>

        <!--suppress AndroidDomInspection -->
        <activity android:name="com.facebook.ads.AudienceNetworkActivity" android:configChanges="keyboardHidden|orientation|screenSize" />

        <!--suppress AndroidDomInspection -->
        <activity android:name="com.startapp.android.publish.ads.list3d.List3DActivity"
            android:theme="@android:style/Theme" />
        <!--suppress AndroidDomInspection -->
        <activity android:name="com.startapp.android.publish.adsCommon.activities.OverlayActivity"
            android:theme="@android:style/Theme.Translucent"
            android:configChanges="orientation|keyboardHidden|screenSize" />
        <!--suppress AndroidDomInspection -->
        <activity android:name="com.startapp.android.publish.adsCommon.activities.FullScreenActivity"
            android:theme="@android:style/Theme"
            android:configChanges="orientation|keyboardHidden|screenSize" />
        <!--suppress AndroidDomInspection -->
        <service android:name="com.startapp.android.publish.common.metaData.PeriodicMetaDataService" />
        <!--suppress AndroidDomInspection -->
        <service android:name="com.startapp.android.publish.common.metaData.InfoEventService" />


        <service android:name="com.yandex.metrica.MetricaService" android:enabled="true"
            android:exported="true" android:process=":Metrica">
            <intent-filter>
                <category android:name="android.intent.category.DEFAULT" />
                <action android:name="com.yandex.metrica.IMetricaService" />
                <data android:scheme="metrica" />
            </intent-filter>
            <meta-data android:name="metrica:api:level" android:value="58" />
        </service>
        <receiver android:name="com.yandex.metrica.MetricaEventHandler"
            android:enabled="true" android:exported="true">
            <intent-filter>
                <action android:name="com.android.vending.INSTALL_REFERRER" />
            </intent-filter>
        </receiver>

        <!--suppress AndroidDomInspection -->
        <activity android:name="com.yandex.mobile.ads.AdActivity"
            android:configChanges="keyboard|keyboardHidden|orientation|screenLayout|uiMode|screenSize|smallestScreenSize" />

        <activity android:name="com.unity3d.ads.adunit.AdUnitActivity"
            android:configChanges="fontScale|keyboard|keyboardHidden|locale|mnc|mcc|navigation|orientation|screenLayout|screenSize|smallestScreenSize|uiMode|touchscreen"
            android:theme="@android:style/Theme.NoTitleBar.Fullscreen" android:hardwareAccelerated="true" />
        <activity android:name="com.unity3d.ads.adunit.AdUnitSoftwareActivity"
            android:configChanges="fontScale|keyboard|keyboardHidden|locale|mnc|mcc|navigation|orientation|screenLayout|screenSize|smallestScreenSize|uiMode|touchscreen"
            android:theme="@android:style/Theme.NoTitleBar.Fullscreen" android:hardwareAccelerated="false" />
        <activity android:name="com.unity3d.ads2.adunit.AdUnitActivity"
            android:configChanges="fontScale|keyboard|keyboardHidden|locale|mnc|mcc|navigation|orientation|screenLayout|screenSize|smallestScreenSize|uiMode|touchscreen"
            android:theme="@android:style/Theme.NoTitleBar.Fullscreen" android:hardwareAccelerated="true" />
        <activity android:name="com.unity3d.ads2.adunit.AdUnitSoftwareActivity"
            android:configChanges="fontScale|keyboard|keyboardHidden|locale|mnc|mcc|navigation|orientation|screenLayout|screenSize|smallestScreenSize|uiMode|touchscreen"
            android:theme="@android:style/Theme.NoTitleBar.Fullscreen" android:hardwareAccelerated="false" />

        <!--suppress AndroidDomInspection -->
        <activity android:name="com.jirbo.adcolony.AdColonyOverlay"
            android:configChanges="keyboardHidden|orientation|screenSize"
            android:theme="@android:style/Theme.Translucent.NoTitleBar.Fullscreen" />
        <!--suppress AndroidDomInspection -->
        <activity android:name="com.jirbo.adcolony.AdColonyFullscreen"
            android:configChanges="keyboardHidden|orientation|screenSize"
            android:theme="@android:style/Theme.Black.NoTitleBar.Fullscreen" />
        <!--suppress AndroidDomInspection -->
        <activity android:name="com.jirbo.adcolony.AdColonyBrowser"
            android:configChanges="keyboardHidden|orientation|screenSize"
            android:theme="@android:style/Theme.Black.NoTitleBar.Fullscreen" />

        <!--suppress AndroidDomInspection -->
        <activity android:name="com.vungle.publisher.VideoFullScreenAdActivity"
            android:configChanges="keyboardHidden|orientation|screenSize|screenLayout|smallestScreenSize"
            android:theme="@android:style/Theme.NoTitleBar.Fullscreen"/>
        <!--suppress AndroidDomInspection -->
        <activity android:name="com.vungle.publisher.MraidFullScreenAdActivity"
            android:configChanges="keyboardHidden|orientation|screenSize|screenLayout|smallestScreenSize"
            android:theme="@android:style/Theme.Translucent.NoTitleBar.Fullscreen"/>
        <!--suppress AndroidDomInspection -->
        <activity android:name="com.vungle.publisher.FlexViewAdActivity"
            android:configChanges="keyboardHidden|orientation|screenSize|screenLayout|smallestScreenSize"
            android:theme="@android:style/Theme.Translucent.NoTitleBar.Fullscreen"/>

        <!--suppress AndroidDomInspection -->
        <activity android:name="com.flurry.android.FlurryFullscreenTakeoverActivity"
            android:configChanges="keyboard|keyboardHidden|orientation|screenLayout|uiMode|screenSize|smallestScreenSize"
            android:theme="@android:style/Theme.Translucent.NoTitleBar" />
        <!--suppress AndroidDomInspection -->
        <activity android:name="com.flurry.android.FlurryShareActivity"
            android:configChanges="keyboard|keyboardHidden|orientation|screenLayout|uiMode|screenSize|smallestScreenSize"
            android:theme="@android:style/Theme.Translucent.NoTitleBar" />
        <!--suppress AndroidDomInspection -->
        <activity android:name="com.flurry.android.FlurryTileAdActivity"
            android:configChanges="keyboard|keyboardHidden|orientation|screenLayout|uiMode|screenSize|smallestScreenSize"
            android:screenOrientation="portrait"
            android:theme="@android:style/Theme.Translucent.NoTitleBar" />
        <!--suppress AndroidDomInspection -->
        <activity android:name="com.flurry.android.FlurryBrowserActivity"
            android:configChanges="keyboard|keyboardHidden|orientation|screenLayout|uiMode|screenSize|smallestScreenSize"
            android:theme="@android:style/Theme.Translucent.NoTitleBar" />

        <!--suppress AndroidDomInspection -->
        <activity android:name="com.tapjoy.TJAdUnitActivity" android:configChanges="orientation|keyboardHidden|screenSize"
            android:hardwareAccelerated="true" android:theme="@android:style/Theme.Translucent.NoTitleBar.Fullscreen" />
        <!--suppress AndroidDomInspection -->
        <activity android:name="com.tapjoy.mraid.view.ActionHandler" android:configChanges="orientation|keyboardHidden|screenSize" />
        <!--suppress AndroidDomInspection -->
        <activity android:name="com.tapjoy.mraid.view.Browser" android:configChanges="orientation|keyboardHidden|screenSize" />
        <!--suppress AndroidDomInspection -->
        <activity android:name="com.tapjoy.TJContentActivity" android:configChanges="orientation|keyboardHidden|screenSize"
            android:theme="@android:style/Theme.Translucent.NoTitleBar" android:hardwareAccelerated="true" />

        <!--suppress AndroidDomInspection -->
        <activity android:name="com.ironsource.sdk.controller.ControllerActivity" android:configChanges="orientation|screenSize"
            android:hardwareAccelerated="true" />
        <!--suppress AndroidDomInspection -->
        <activity android:name="com.ironsource.sdk.controller.InterstitialActivity" android:configChanges="orientation|screenSize"
            android:hardwareAccelerated="true" android:theme="@android:style/Theme.Translucent" />
        <!--suppress AndroidDomInspection -->
        <activity android:name="com.ironsource.sdk.controller.OpenUrlActivity" android:configChanges="orientation|screenSize"
            android:hardwareAccelerated="true" android:theme="@android:style/Theme.Translucent" />

        <!--suppress AndroidDomInspection -->
        <activity android:name="com.adcolony.sdk.AdColonyInterstitialActivity" android:configChanges="keyboardHidden|orientation|screenSize"
            android:hardwareAccelerated="true"/>
        <!--suppress AndroidDomInspection -->
        <activity android:name="com.adcolony.sdk.AdColonyAdViewActivity" android:configChanges="keyboardHidden|orientation|screenSize"
            android:hardwareAccelerated="true"/>

        <activity android:name="com.inmobi.rendering.InMobiAdActivity" android:configChanges="keyboardHidden|orientation|keyboard|smallestScreenSize|screenSize|screenLayout"
            android:hardwareAccelerated="true" android:resizeableActivity="false" android:theme="@android:style/Theme.NoTitleBar" />
        <receiver android:name="com.inmobi.commons.core.utilities.uid.ImIdShareBroadCastReceiver" android:enabled="true" android:exported="true">
            <intent-filter>
                <action android:name="com.inmobi.share.id"/>
            </intent-filter>
        </receiver>


    </application>

</manifest>

 

About the author 

Matt Rešetár

Matt is an app developer with a knack for teaching others. Working as a freelancer and most importantly developer educator, he is set on helping other people succeed in their Flutter app development career.

You may also like

  • Поддерживаю, хотелось бы по подробнее про Java, пожалуйста.

  • {"email":"Email address invalid","url":"Website address invalid","required":"Required field missing"}
    >