How to solve the LCP Issue/ problem on core web vitals due to google adsense ads?

 

Performance blogs or websites will eventually drop when advertised by third parties such as ads on Google Adsense and other digital advertising. To avoid that, a special method is needed to load ads so that loading or website performance is maintained.


Generally the method used to load ads so as not to affect the performance of the website/blog is to apply lazy load to fish (adsense), therefore here I will give a fairly complete review of lazy load adsense.


You can solved the LCP Issue/ problem on core web vitals due to google adsense ads with Lazy Load Adsense.


Without Lazy Load Adsense your LCP can be poor or higher than 4s. The best LCP is lower than 2,5 s.



What is Lazy Load Adsense?

lcp issue adsense 1

Lazy load adsense is a lazy loading or smart loading script on adsense ads to reduce the impact of third party code on the website and maintain optimal website performance.




There are several methods for making smart loading on adsense ads including Ad event listeners, Event-based ad requests and Lazy loading, all three of which can be referred to as lazy load adsense.



Why Should You Use Lazy Load Adsense?


Currently there is no better method than lazy load adsense to solve all kinds of website performance issues caused by third party ads.

There are many things that can be solved with lazy load adsense, related to website/blog performance problems, including:
  • Third party webfont load
  • JavaScript execution time
  • Main-thread work
  • Impact of third party code, etc
That's why in my title tag it says, lazy load adsense is the best solution for the performance of websites or blogs that are installed with third-party ads.

Immediately I will share the lazy load adsense script with all of you, there are 3 (three) lazy load adsense scripts that I will share and both lazy load scripts are equally good for maintaining the performance of your website and also support auto ads.



Instructions for Using Lazy Load Adsense


How to use the lazy load adsense script is very easy, you only need to install one of the lazy load adsense script codes in the head or body of the website, then remove all adsense javascript library tags from the website/blog template.

Change your adsense script :


<script async="async" src="https://pagead2.googlesyndication.com/pagead/js/adsbygoogle.js"/>

//or a new version of the javascript library
<script async="async" data-ad-client="ca-pub-1234567890123456" src="https://pagead2.googlesyndication.com/pagead/js/adsbygoogle.js"/>

//or updated version
<script async src="https://pagead2.googlesyndication.com/pagead/js/adsbygoogle.js?client=ca-pub-4209467777280582" crossorigin="anonymous"></script>


To :


<script type="text/javascript">//<![CDATA[
var lazyloadads=false;window.addEventListener("scroll",function(){(0!=document.documentElement.scrollTop&&false===lazyloadads||0!=document.body.scrollTop&&false===lazyloadads)&&(!function(){var e=document.createElement("script");e.type="text/javascript",e.async=true,e.src="https://pagead2.googlesyndication.com/pagead/js/adsbygoogle.js?client=ca-pub-420946777728xxxx";var a=document.getElementsByTagName("script")[0];a.parentNode.insertBefore(e,a)}(),lazyloadads=true)},true);
//]]></script>

Change the red text with your adsense publisher code



How the Lazy Load Adsense Script Works ?


Lazy Load Adsense is completely different from lazy load images because basically lazy load adsense is a scroll event listener, the adsense javascript library in the lazy load adsense script will only be loaded or run when the user scrolls your page.

And that means that adsense ads will only appear when the user scrolls through your blog or website, if there is no page scrolling activity from the user, the ad will also not be loaded (not displayed).
lcp issue adsense 2



Lazy Load Adsense From Adsense Policy Side


Google is very open to implementing lazy loading on their ads (adsense), Please see the google help center entitled "Viewability best practices". On that page, Google recommends the use of lazy load adsense or also known as smart loading.





For detail step by step yo can watch this video below.


 



That means Google doesn't care about the use of lazy laod adsense. But according to google the best practice for implementing lazy load adsense is to use the Google Publisher Tag (GPT).



Reference


https://www.cordialblogger.com/2021/04/lazy-load-adsense.html
https://nanokaryamandiri.com/

How to fix send button not working or Blogger contact form not working?

 

 

     A blog should have a contact us page. This is to help users when they want to contact the blog admin, and also the requirements if the blog will be registered with google adsense later. There are several ways to add a contact us page in

How to Adding Google AdMob Ads to an Android application ?




 


AdMob is Google’s advertising platform specifically designed for mobile applications. AdMob allows you to monetize your apps by serving ads selected according to criteria you define. So if you’ve developed an Android app and now you want to make money with your app, in this article I show you how to do it, how to add different ad formats to your apps.


To get started, make sure you have integrated Firebase into your project. If you haven’t already done so, here’s how to do it.


Set up your application in your AdMob account :

  1. To get started you need to create an AdMob account or sign in if you already have one.
  2. Login to AdMob and open your dashboard. Now, go to Applications> Add an Application> Fill out the information required by AdMob> Click Add, which will generate an AdMob ID for your application.
  3. To link your newly added application to Firebase. Select the application, access the application settings and under Application Information you will see an option to link the application to Firebase.
  4. Add your AdMob Application ID to your AndroidManifest.xml file by adding the <meta-data>tag. 

<meta-data
    android:name="com.google.android.gms.ads.APPLICATION_ID"
    android:value="ADMOB_APP_ID"
    />
5. Add and initialize the Mobile Ads SDK. Add the dependency of the Google Mobile Ads SDK to            the build.gradle module file

implementation 'com.google.android.gms:play-services-ads:19.1.0'


You must initialize the Mobile Ads SDK, before you can broadcast any type of announcement made in one of your activities at the start of your application. Call this method only once and as soon as possible, ideally at the launch of the application.

class MainActivity : AppCompatActivity() {

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

        MobileAds.initialize(this, "YOUR_ADMOB_APP_ID")
    }
}


Choose an ad format to implement in your application



AdMob offers different ad formats (Banner, Interstitial and Rewarded). You can choose the format that best suits your application’s user experience.

1. Creation of advertising banners

Banner ads take up space in the layout of an application, at the top or bottom of the device screen. They remain on the screen while users interact with the application and may refresh automatically after a period of time. To add a banner ad to one of your activities / fragments, you will need to use AdView . In your layout file, add the following code:


<?xml version="1.0" encoding="utf-8"?>
<LinearLayout 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"
    xmlns:ads="http://schemas.android.com/apk/res-auto"
    tools:context=".MainActivity"
    android:orientation="vertical">
    <com.google.android.gms.ads.AdView
        android:id="@+id/adView"
        android:layout_height="wrap_content"
        android:layout_width="match_parent"
        ads:adSize = "BANNER"
        ads:adUnitId = "ca-app-pub-3940256099942544~3347511713">

    </com.google.android.gms.ads.AdView>
</LinearLayout>

There are two settings to note here adSize which defines the size of your banner, there are different sizes of banners available that need to be viewed and adUnitId is the unique ID that identifies your unique ad block.


Loading an ad

The ad loading is done with the method loadAd() of AdViewclass. it take as parameter a object ot typeAdRequest, which contains execution information (such as targeting information) on a single ad request.

import android.os.Bundle
import androidx.appcompat.app.AppCompatActivity
import com.google.android.gms.ads.AdRequest
import com.google.android.gms.ads.AdView
import com.google.android.gms.ads.MobileAds


class MainActivity : AppCompatActivity() {

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

        MobileAds.initialize(this) {}

        val mAdView = findViewById<AdView> (R.id.adView)
        val adRequest = AdRequest.Builder (). build ()
        mAdView.loadAd (adRequest)
    }
}
Admob


2. Creation of interstitial ad

Interstitial announcements are full screen announcements that cover the interface of their host application. When creating interstitial advertisements, we do not need to define a view in your layout file, they can only be created by programming.

Interstitial announcements are requested and displayed by InterstitialAd objects. Start by instantiating InterstitialAd to set its announcement block ID. This is done in the onCreate() method of an activity.


class MainActivity : AppCompatActivity() {

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

        MobileAds.initialize(this) {}

        val mInterstitialAd = InterstitialAd(this)
        mInterstitialAd.adUnitId = "ca-app-pub-3940256099942544/1033173712"
    }
}

Loading ad

To load an interstitial announcement, call the method loadAd() ofInterstitialA object, this method accept a object to typeAdRequest as unique parameter

mInterstitialAd.loadAd(AdRequest.Builder().build())

Showing the Ad

To display an interstitial, use the method isLoaded() to check that the loading is complete, then call show().


clickButton.setOnClickListener {
            if (mInterstitialAd.isLoaded) {
                mInterstitialAd.show()
            } else {
                Log.d("TAG", "The ads wasn't loaded yet.")
            }
        }



For testing purposes, you can use the sample AdMob Application ID provided by Google:

App Id = ca-app-pub-3940256099942544~3347511713
Ads Id  =ca-app-pub-3940256099942544/1033173712


Working with Webview in android studio and project example

 



If we want to deliver a web application (or just a web page) as a part of a client application, we can do it using WebView. The WebView class is an extension of Android's View class that allows you to display web pages as a part of your activity layout. It does not include any features of a fully developed web browser, such as navigation controls or an address bar. All that WebView does, by default, is show a web page.


A common scenario in which using WebView is helpful is when you want to provide information in your app that you might need to update, such as an end-user agreement or a user guide. Within your Android app, you can create an Activity that contains a WebView, then use that to display your document that's hosted online.


To add a WebViewto your app in the layout, add the following code to your activity's layout XML file:


<WebView

    android:id="@+id/webview"

    android:layout_width="match_parent"

    android:layout_height="match_parent"

/>


To load a web page in the WebView, use loadUrl(). For example in Java :


WebView myWebView = (WebView) findViewById(R.id.webview);

myWebView.loadUrl("http://www.example.com");


in Kotlin :


val myWebView: WebView = findViewById(R.id.webview)

myWebView.loadUrl("http://www.example.com")


All links the user clicks load in your WebView.



If you want more control over where a clicked link loads, create your own WebViewClient that overrides the shouldOverrideUrlLoading() method. The following example assumes that MyWebViewClient is an inner class of Activity. In Java :


private class MyWebViewClient extends WebViewClient {

    @Override

    public boolean shouldOverrideUrlLoading(WebView view, WebResourceRequest request) {

        if ("www.example.com".equals(request.getUrl().getHost())) {

      // This is my website, so do not override; let my WebView load the page

      return false;

    }

    // Otherwise, the link is not for a page on my site, so launch another Activity that handles URLs

    Intent intent = new Intent(Intent.ACTION_VIEW, request.getUrl());

    startActivity(intent);

    return true;

  }

}


In Kotlin :


private class MyWebViewClient : WebViewClient() {

    override fun shouldOverrideUrlLoading(view: WebView?, url: String?): Boolean {

        if (Uri.parse(url).host == "www.example.com") {

            // This is my web site, so do not override; let my WebView load the page

            return false

        }

        // Otherwise, the link is not for a page on my site, so launch another Activity that handles URLs

        Intent(Intent.ACTION_VIEW, Uri.parse(url)).apply {

            startActivity(this)

        }

        return true

    }

}




Here is an example basic project android studio with Webview


1. Create New Project


   The first thing we have to do is of course create a new project in android studio. In this tutorial I named the project "My Application".


Webview4

2. Create desain user interface


   Open activity_main.xml in the folder layout, then add element as follows


<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout 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"
android:orientation="vertical"
tools:context=".MainActivity">
<LinearLayout
android:layout_width="match_parent"
android:orientation="vertical"
android:gravity="center"
android:layout_height="wrap_content"
android:layout_marginTop="100dp">
<Button
android:id="@+id/btn_1"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Go to Website 1"/>
<Button
android:id="@+id/btn_2"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Go to Website 2"/>

</LinearLayout>
</RelativeLayout>


 Right click on layout folder then select "New" and "Layout resource file " and then fill the file name with webview_activity , then add element as follows


<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout 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=".MainActivity">

<WebView
android:layout_width="match_parent"
android:layout_height="match_parent"
android:layout_alignParentTop="true"
android:layout_alignParentLeft="true"
android:layout_alignParentStart="true"
android:id="@+id/webView"

/>

<ProgressBar
style="?android:attr/progressBarStyle"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_centerHorizontal="true"
android:layout_marginTop="110dp"
android:id="@+id/progressBar2"
/>

</RelativeLayout>


4. Add Java File

Open MainActivity in java folder, then copy the code below


package com.nano.mywebview;

import androidx.appcompat.app.AppCompatActivity;

import android.content.Intent;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;

public class MainActivity extends AppCompatActivity {
Button btn1,btn2;

@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
btn1=findViewById(R.id.btn_1);
btn2=findViewById(R.id.btn_2);
btn1.setOnClickListener(web1);
btn2.setOnClickListener(web2);

}
private final View.OnClickListener web1 = v -> {
Intent theIntent = new Intent(this, WebViewActivity.class);
theIntent.putExtra("url", "https://nanokaryamandiri.com");
startActivity(theIntent);

};
private final View.OnClickListener web2 = v -> {
Intent theIntent = new Intent(this, WebViewActivity.class);
theIntent.putExtra("url", "https://www.thrizthan.com");
startActivity(theIntent);

};

}



Right click on java folder then select "New" and "Java Class File"  and then fill the file name with "WebViewActivity" then copy the code below


package com.nano.mywebview;

import androidx.appcompat.app.AppCompatActivity;

import android.annotation.SuppressLint;
import android.graphics.Bitmap;
import android.os.Bundle;
import android.util.Log;
import android.view.KeyEvent;
import android.view.View;
import android.webkit.WebView;
import android.webkit.WebViewClient;
import android.widget.ProgressBar;

public class WebViewActivity extends AppCompatActivity {

WebView webView;
ProgressBar progressBar;
String dataUrl;
@SuppressLint("SetJavaScriptEnabled")
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_web_view);
webView = findViewById(R.id.webView);
progressBar= findViewById(R.id.progressBar2);
webView.setWebViewClient(new myWebclient());
webView.getSettings().setJavaScriptEnabled(true);
getIntent2();
Log.e("testwebview",dataUrl);
webView.loadUrl(dataUrl);
WebViewClient webViewClient = new WebViewClient() {
@Override
public void onPageFinished(WebView view, String url) {
super.onPageFinished(view, url);
Log.e("PAGE_URL", url);
if(url.equals(dataUrl)){
finish();

}
}
};

}
private void getIntent2() {
dataUrl = getIntent().getStringExtra("url");
};
public class myWebclient extends WebViewClient{
@Override
public void onPageFinished(WebView view, String url) {
super.onPageFinished(view, url);
progressBar.setVisibility(View.GONE);
}

@Override
public void onPageStarted(WebView view, String url, Bitmap favicon) {
super.onPageStarted(view, url, favicon);
}

@Override
public boolean shouldOverrideUrlLoading(WebView view, String url) {
view.loadUrl(url);
return super.shouldOverrideUrlLoading(view, url);
}
}

@Override
public boolean onKeyDown(int keyCode, KeyEvent event) {
if((keyCode==KeyEvent.KEYCODE_BACK) && webView.canGoBack()){
finish();
webView.goBack();
return true;
}

return super.onKeyDown(keyCode, event);
}
@Override
public void onBackPressed() {
finish();
}
}


5. Edit AndroidManifest XML


<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.nano.mywebview">
<uses-permission android:name="android.permission.INTERNET"/>
<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/Theme.MyWebView">
<activity
android:name=".WebViewActivity"
android:exported="false" />
<activity
android:name=".MainActivity"
android:exported="true">
<intent-filter>
<action android:name="android.intent.action.MAIN" />

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

</manifest>




6. Run the project



Webview1


7. Then click "Go To Website 1"


Webview2



Then Click back and Then click "Go To Website 2"


Webview3




 Okay, that's enough for now from me, if you have any questions, please comment in the comments column. If something goes wrong I apologize. Hopefully helpful, and thank you.

Featured Post

My google play console account was terminated

A few days ago I received a notification email from Google that my Play Console account has been terminated. The message content is as below...