I'm trying to update this code (base in this code) to use the native ads with the new lib FirebaseAdmob2 and new Mobile SDK (20).
The problem is in this part of the code below, that check if the ad has a video and, if don't, show an image.
Native ads with video has a better revenue than an ad with only image.
	
	
	
	
	
	
	
		
			
			
			
			
			
		
	
	
	
		
	
	
		
	
I get this error (and I don't know what has changed in the new sdk to this method "getVideoController"):
	
	
	
	
	
	
	
		
			
			
			
			
			
		
	
	
	
		
	
	
		
	
	
	
		
			
	
	
	
	
	
	
	
		
			
			
			
			
			
		
	
	
	
		
	
	
		
	
		
	
Links used to update the code:
	
	
		
			
				
					
						 
					
				
			
			
				
					
						
							 developers.google.com
						
					
					developers.google.com
				
			
		
	
	
	
		
			
				
					
						 
					
				
			
			
				
					
						
							 developers.google.com
				
			
		
	
Thanks in advance for any help.
						
					
					developers.google.com
				
			
		
	
Thanks in advance for any help.
			
			The problem is in this part of the code below, that check if the ad has a video and, if don't, show an image.
Native ads with video has a better revenue than an ad with only image.
			
				B4X:
			
		
		
		    'check if ad has a video
    Dim vid As JavaObject = NativeAd.RunMethod("getVideoController", Null)
   
    If vid.IsInitialized Then
        Dim MediaView As JavaObject
        MediaView.InitializeNewInstance("com/google/android/gms/ads/formats/MediaView".Replace("/", "."), Array(ctxt))
        content.AddView(MediaView, 10dip, 120dip, 200dip, 200dip)
        NativeAdView.RunMethod("setMediaView", Array(MediaView))
    Else
        'If don't has video, check if is there are images
        Dim images As List = NativeAd.RunMethod("getImages", Null)
        If images.IsInitialized And images.Size > 0 Then
            Dim MediaView As JavaObject
            MediaView.InitializeNewInstance("com/google/android/gms/ads/formats/MediaView".Replace("/", "."), Array(ctxt))
            content.AddView(MediaView, 10dip, 120dip, 200dip, 200dip)
            NativeAdView.RunMethod("setImageView", Array(MediaView))
        End If
    End If
			
				B4X:
			
		
		
		main$ResumableSub_LoadNativeAdresume (java line: 548)
java.lang.RuntimeException: Method: getVideoController not found in: com.google.android.gms.internal.ads.zzatp
    at anywheresoftware.b4j.object.JavaObject$MethodCache.getMethod(JavaObject.java:363)
    at anywheresoftware.b4j.object.JavaObject.RunMethod(JavaObject.java:120)
    at br.com.as2.testes.main$ResumableSub_LoadNativeAd.resume(main.java:548)
			
				B4X:
			
		
		
		Sub LoadNativeAd
    Dim AdUnitId As String = "ca-app-pub-3940256099942544/2247696110"  'Native Advanced TEST
'    Dim AdUnitId As String = "ca-app-pub-3940256099942544/1044960115"  'Native Advanced with Video TEST
   
    Dim ctxt As JavaObject
    ctxt.InitializeContext
 
    Dim builder As JavaObject
    builder.InitializeNewInstance("com.google.android.gms.ads.AdLoader.Builder", Array(ctxt, AdUnitId))
 
    Dim onUnifiedAdLoadedListener As Object = builder.CreateEventFromUI("com/google/android/gms/ads/nativead/NativeAd.OnNativeAdLoadedListener".Replace("/", "."), _
       "UnifiedAdLoaded", Null)
    builder.RunMethod("forNativeAd", Array(onUnifiedAdLoadedListener))
 
    Dim Listener As JavaObject
    Listener.InitializeNewInstance(Application.PackageName & ".main$MyAdListener", Array("NativeAd"))  'change 'main' with the current activity module name
    builder.RunMethod("withAdListener", Array(Listener))
 
'    Sends a request To AdMob, requesting an ad.
    Dim AdLoader As JavaObject = builder.RunMethod("build", Null)
   
    Dim AdRequestBuilder As JavaObject
    AdRequestBuilder.InitializeNewInstance("com/google/android/gms/ads/AdRequest.Builder".Replace("/", "."), Null)
    AdLoader.RunMethod("loadAd", Array(AdRequestBuilder.RunMethod("build", Null)))
 
    Wait For (builder) UnifiedAdLoaded_Event (MethodName As String, Args() As Object)
   
    Dim NativeAd As JavaObject = Args(0)
   
    LogColor("LoadNativeAd", Colors.Green)
    Log("getHeadline: " & NativeAd.RunMethod("getHeadline", Null))
    Log("getBody: " & NativeAd.RunMethod("getBody", Null))
    Log("getAdvertiser: " & NativeAd.RunMethod("getAdvertiser", Null))
    Log("getCallToAction: " & NativeAd.RunMethod("getCallToAction", Null))
    Log("getPrice: " & NativeAd.RunMethod("getPrice", Null))
    Log("getStarRating: " & NativeAd.RunMethod("getStarRating", Null))
    Log("getStore: " & NativeAd.RunMethod("getStore", Null))
    Log("getExtras: " & NativeAd.RunMethod("getExtras", Null))
 
    Dim NativeAdView As JavaObject
     
    NativeAdView.InitializeNewInstance("com/google/android/gms/ads/nativead/NativeAdView".Replace("/", "."), _
       Array(ctxt))  
           
    Dim pNativeAdView As Panel = NativeAdView
 
    Dim content As Panel
    content.Initialize("")
    pNativeAdView.AddView(content, 0, 0, 100%x, 300dip)
 
    Dim lbl As Label
    lbl.Initialize("")
    lbl.TextSize = 20
    lbl.TextColor = Colors.Black
    lbl.Text = NativeAd.RunMethod("getHeadline", Null)
    content.AddView(lbl, 10dip, 10dip, 300dip, 50dip)
    NativeAdView.RunMethod("setHeadlineView", Array(lbl))
 
    Dim lbl2 As Label
    lbl2.Initialize("")
    lbl2.TextColor = Colors.Black
    lbl2.Text = NativeAd.RunMethod("getBody", Null)
    content.AddView(lbl2, 10dip, 60dip, 300dip, 50dip)
    NativeAdView.RunMethod("setBodyView", Array(lbl2))
 
    Dim logo As JavaObject = NativeAd.RunMethod("getIcon", Null)
    If logo.IsInitialized Then
        Dim logoView As Panel
        logoView.Initialize("")
        logoView.Background = logo.RunMethod("getDrawable", Null)
        content.AddView(logoView, 250dip, 10dip, 80dip, 80dip)
        NativeAdView.RunMethod("setIconView", Array(logoView))
    End If
   
    'check if ad has a video
    Dim vid As JavaObject = NativeAd.RunMethod("getVideoController", Null)
   
    If vid.IsInitialized Then
        Dim MediaView As JavaObject
        MediaView.InitializeNewInstance("com/google/android/gms/ads/formats/MediaView".Replace("/", "."), Array(ctxt))
        content.AddView(MediaView, 10dip, 120dip, 200dip, 200dip)
        NativeAdView.RunMethod("setMediaView", Array(MediaView))
    Else
        'If don't has video, check if is there are images
        Dim images As List = NativeAd.RunMethod("getImages", Null)
        If images.IsInitialized And images.Size > 0 Then
            Dim MediaView As JavaObject
            MediaView.InitializeNewInstance("com/google/android/gms/ads/formats/MediaView".Replace("/", "."), Array(ctxt))
            content.AddView(MediaView, 10dip, 120dip, 200dip, 200dip)
            NativeAdView.RunMethod("setImageView", Array(MediaView))
        End If
    End If
     
    '*** new button to action
    Dim btAction As Button
    btAction.Initialize("")
    Dim cd As ColorDrawable
    cd.Initialize(Colors.RGB(65,105,225),3dip)
    btAction.Background = cd
    btAction.Text = NativeAd.RunMethod("getCallToAction", Null)
    content.AddView(btAction, 10dip, 120dip, 100dip, 50dip)
    NativeAdView.RunMethod("setCallToActionView", Array(btAction))
 
    NativeAdView.RunMethod("setNativeAd", Array(NativeAd))
 
    Activity.AddView(pNativeAdView, 0, 0, 100%x, 200dip)
End Sub
#if Java
public static class MyAdListener extends com.google.android.gms.ads.AdListener {  
   String eventName;
   public MyAdListener(String s) {
       eventName = s.toLowerCase(BA.cul);
   }
 
   public void onAdClosed() {
       processBA.raiseEventFromDifferentThread(null, null, 0, eventName + "_adclosed", false, null);
   }
 
   public void onAdFailedToLoad(int arg0) {
       processBA.raiseEventFromDifferentThread(null, null, 0, eventName + "_failedtoreceivead", false, new Object[] {String.valueOf(arg0)});
   }
 
   public void onAdLeftApplication() {
       processBA.raiseEventFromDifferentThread(null, null, 0, eventName + "_adleftapplication", false, null);
   }
 
   public void onAdLoaded() {
       processBA.raiseEventFromDifferentThread(null, null, 0, eventName + "_receivead", false, null);
   }  
 
   public void onAdClicked() {
       processBA.raiseEventFromDifferentThread(null, null, 0, eventName + "_clicked", false, null);
   }
}
#End If 
					
				Native advanced | Android | Google for Developers
 developers.google.com
						
					
					developers.google.com
				 
					
				NativeAdView | Google Play services | Google Developers
 developers.google.com
						
					
					developers.google.com
				
			
				Last edited: 
			
		
	
								
								
									
	
								
							
							 
				 
 
		 
 
		 
					
				 
						
					 
 
		 
 
		