B4A Library Admob Interstitial Library

Because the old Admob SDK will be deprecated in August, I have written a library for interstitials using the new Google Play Services library. You'll need to follow initial steps noted in Erel's post for the Admob banner library to get your app ready for this library.

The new library should be compatible with your old code with the exception of a change to the AdFailedToReceive event. It should be declared in your app as follows.

B4X:
Sub mwadi_AdFailedToLoad (ErrorMessage As String)
    Log("failed to load ad: " & ErrorMessage)
End Sub

This new library also supports a new event that triggers when the user closes an ad. You can use this event to queue a new ad to load or run other code.

B4X:
Sub mwadi_AdClosed
    mwAdInterstitial.LoadAd
End Sub

The new library is called mwAdmobInterstitial2. I added the 2 to the end of the name so you can preserve your old library in case it is needed with other apps. The new library and example app for the library is attached at the end of this post.

============================================
Below is for the old version (not using Google Play Services)
============================================
I was able to put together a library to display interstitial ads from Admob. You'll need to create an interstitial ad unit in Admob and use it with the initialization process.

Make sure the following is added to your AndroidManifest.xml.
B4X:
AddApplicationText(<activity android:name="com.google.ads.AdActivity"
          android:configChanges="keyboard|keyboardHidden|orientation|screenLayout|uiMode|screenSize|smallestScreenSize"/>)

Here is code from the included sample app that shows how to use the library. Because the interstitial is running as an activity, I'm not able to raise an event in B4A when it is dismissed. Instead, you can check the status in Activity_Resume as shown in the code below.

A good practice would be to initialize the ad in Activity_Create, and then show the ad later when desired. This will allow the ad to fully load while other processes are taking place allowing you to show the ad immediately.

This is a beta version and the first library I've shared, so please report any problems.

NOTE: There is a bug in older versions of the SDK that causes a crash on some devices when you try to load the interstitial. Make sure you download an updated SDK from Admob.

1.1 Update: Fixed a bug in the library code used to raise the AdFailedToLoad event. Separated out the LoadAd routine from the Initialize routine. This allows you to load a new ad after an ad has been dismissed without re-initializing the class.

B4X:
Sub Globals
    'These global variables will be redeclared each time the activity is created.
    'These variables can only be accessed from this module.
    Dim mwAdInterstitial As mwAdmobInterstitial
    Dim Button1 As Button
    Dim Label2 As Label
End Sub

Sub Activity_Create(FirstTime As Boolean)
    'Do not forget to load the layout file created with the visual designer. For example:
    'Activity.LoadLayout("Layout1")
    mwAdInterstitial.Initialize("mwadi","INSERT_YOUR_AD_UNIT_ID")
    mwAdInterstitial.LoadAd
    Activity.LoadLayout("1")
    Label2.Text="Attempting to load ad...  Please wait."
End Sub

Sub Activity_Resume
    If mwAdInterstitial.Status=mwAdInterstitial.Status_Dismissed Then Label2.Text="Ad dismissed by user."
End Sub

Sub Activity_Pause (UserClosed As Boolean)

End Sub


Sub mwadi_AdLoaded
    Log("ad loaded")
    Label2.Text="Ad loaded - Click Show Ad to Display"

End Sub

Sub mwadi_AdFailedToLoad (ErrorCode As String)
    Label2.Text="Ad failed to load with error code: " & ErrorCode
    Log("failed to load ad: " & ErrorCode)
End Sub

Sub Button1_Click
    If mwAdInterstitial.Status=mwAdInterstitial.Status_AdReadyToShow Then mwAdInterstitial.Show
    If mwAdInterstitial.Status=mwAdInterstitial.Status_Dismissed Then
        Label2.Text="Attempting to load ad...  Please wait."
        mwAdInterstitial.LoadAd
    End If
End Sub
 

Attachments

  • interstitial.png
    interstitial.png
    86 KB · Views: 849
  • AdmobInterstitial1.1.zip
    10.6 KB · Views: 1,146
  • AdmobInterstitialPlayServices.zip
    11.5 KB · Views: 1,138
Last edited:

mlc

Active Member
Licensed User
Longtime User
Thanks Jack,

Works perfect, I ported one of my apps, to the new admob and I can show banners and interstitials.
 

Douglas Farias

Expert
Licensed User
Longtime User
where is the lib A referenced library is missing: googleadmobadssdk-6.4.1
i dont found this on android folder *-*
 

Croïd

Active Member
Licensed User
Longtime User
Hi Jack and thank for your lib. :)

I wanted to know if the 2 permissions are required (obligatory) ?

I have customers, who do not want to install the application for fear of safety.
 

Attachments

  • store.png
    store.png
    44.9 KB · Views: 206
Last edited:

holdemadvantage

Active Member
Licensed User
Longtime User
Hi, i woud like to know if is there a way to swow admob interstitials at app launch.

This
B4X:
mwAdInterstitial.Initialize("mwadi","ca-app-pub-xxxxxxxxxxxx")
mwAdInterstitial.LoadAd
mwAdInterstitial.Show

Doesn't work on activity create.

Thanks in advance
 

Croïd

Active Member
Licensed User
Longtime User
Hi, i woud like to know if is there a way to swow admob interstitials at app launch.

This
B4X:
mwAdInterstitial.Initialize("mwadi","ca-app-pub-xxxxxxxxxxxx")
mwAdInterstitial.LoadAd
mwAdInterstitial.Show

Doesn't work on activity create.

Thanks in advance


For me, Interstitial work only if you click a button.

Maybe, use a timer simulator for activity create !
 

Croïd

Active Member
Licensed User
Longtime User
Even for me, any suggestions?

have you tried ? (Currently the store is migrating I can not try)

B4X:
Sub Activity_Create(FirstTime As Boolean)
    ' For example: be careful #AdditionalRes:
  
    mwAdInterstitial.Initialize("Ad", "XXXXXXXXXXX")
    mwAdInterstitial.LoadAd

    Timer1.Initialize("Timer1",1000)
    Timer1.Enabled = True
End Sub

Sub Timer1_tick
If mwAdInterstitial.Status=mwAdInterstitial.Status_AdReadyToShow Then
mwAdInterstitial.Show
    If mwAdInterstitial.Status=mwAdInterstitial.Status_Dismissed Then
 mwAdInterstitial.LoadAd
Timer1.Enabled = false
    End If
End Sub

or if another solution to simulate a click with "sender"
 
Last edited:

holdemadvantage

Active Member
Licensed User
Longtime User
B4X:
Sub Process_Globals

Dim Timerintadmob As Timer

End Sub
Sub Activity_Create(FirstTime As Boolean)


mwAdInterstitial.Initialize("mwadi","ca-app-pub-xxxxxxxxxxxxxxxxx")
mwAdInterstitial.LoadAd
Timerintadmob.Initialize("Timerintadmob",1000)
Timerintadmob.Enabled=True

End sub

Sub Timerintadmob_tick
If mwAdInterstitial.Status=mwAdInterstitial.Status_AdReadyToShow Then
mwAdInterstitial.Show
Timerintadmob.enabled=False
End If
End Sub

This works
 

syncmaster13

Member
Licensed User
Longtime User
Hi
I implemented interstitial ads and during installing my app it asked me for new permission
"Phone calls -- read phone status and identity"
Is this required for showing interstitial ads?

Thank You
 

MarcoRome

Expert
Licensed User
Longtime User
I think you can probably use it without them. Try taking them out of the XML file and see what happens.

Hi all. Thank's Jack for this fantastic library.
Croid in your file AndroidManifest.xml ( folder object ) you found this code ( more or less :) )
B4X:
<?xml version="1.0" encoding="utf-8"?>
<manifest
    xmlns:android="http://schemas.android.com/apk/res/android"
    package="mobi.mindware.admob"
    android:versionCode="2"
    android:versionName="2.0"
    android:installLocation="internalOnly">
   
    <uses-sdk android:minSdkVersion="4" android:targetSdkVersion="14"/>
    <supports-screens android:largeScreens="true"
        android:normalScreens="true"
        android:smallScreens="true"
        android:anyDensity="true"/>
    <uses-permission android:name="android.permission.INTERNET"/>
    <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE"/>
    <uses-permission android:name="android.permission.ACCESS_WIFI_STATE"/>
    <uses-permission android:name="android.permission.READ_PHONE_STATE"/>
    <application
        android:icon="@drawable/icon"
        android:label="Admob Interstitial Example">
       
        <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"/>
        <activity
            android:windowSoftInputMode="stateHidden"
            android:launchMode="singleTop"
            android:name=".main"
            android:label="Admob Interstitial Example"
            android:screenOrientation="unspecified">
            <intent-filter>
              <action android:name="android.intent.action.MAIN" />
              <category android:name="android.intent.category.LAUNCHER" />
            </intent-filter>
           
        </activity>
    </application>
</manifest>

in particolary this permission:

B4X:
  <uses-permission android:name="android.permission.INTERNET"/>
    <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE"/>
    <uses-permission android:name="android.permission.ACCESS_WIFI_STATE"/>
    <uses-permission android:name="android.permission.READ_PHONE_STATE"/>

if you remove this line:

B4X:
<uses-permission android:name="android.permission.READ_PHONE_STATE"/>

in your application remove "Device ID & Call Information"

(dont forget after modified, check you androidmanifest.xml only for reading )

Bye :)
 
Top