xamarin / GooglePlayServicesComponents

Other
316 stars 147 forks source link

Xamarin Android - Rewarded Interstitial Error - Name Clash OnAdLoaded #550

Open vinoch1992 opened 2 years ago

vinoch1992 commented 2 years ago

Xamarin.Android Version: 12.0

Operating System & Version: Mac OSX 11.6

Google Play Services Version

Describe your Issue

I am trying to implement Rewarded Interstitial in Xamarin Android and getting an error when running the app. There are no build issue.

Relevant information

using earnista.Common.AdsView;
using earnista.Droid.Helpers.AdsView;
using Android.Gms.Ads;
using Android.Gms.Ads.RewardedInterstitial;
using System;
using Android.Gms.Ads.Rewarded;
using Xamarin.Essentials;

[assembly: Xamarin.Forms.Dependency(typeof(RewardedInterstitial))]
namespace xxxx.Droid.Helpers.AdsView
{
    public class RewardedInterstitial : IRewardedInterstitial
    {
        RewardedInterstitialAd rewardedInterstitialAd;

        public void ShowRewardedInterstitialAd()
        {
            var context = Android.App.Application.Context;

            AdRequest adRequest = new AdRequest.Builder().Build();

            var rewardListener = new OnUserEarnedRewardListener();
            rewardListener.OnRewarded += (s, e) =>
            {
                //Handle the reward
            };

            var listener = new RewardedInterstitialAdLoadCallback();
            listener.OnLoaded += (s, e) =>
            {
                rewardedInterstitialAd = (RewardedInterstitialAd)s;
                rewardedInterstitialAd.Show(Platform.CurrentActivity, rewardListener);
            };

            RewardedInterstitialAd.Load(context, "ca-app-pub-3940256099942544/5354046379",
                adRequest, listener);
        }
    }

    public class RewardedInterstitialAdLoadCallback : Android.Gms.Ads.RewardedInterstitial.RewardedInterstitialAdLoadCallback
    {
        public event EventHandler OnLoaded;

        public override void OnAdLoaded(Java.Lang.Object p0)
        {
            OnLoaded?.Invoke(p0, EventArgs.Empty);
        }

        public override void OnAdFailedToLoad(LoadAdError p0)
        {
            base.OnAdFailedToLoad(p0);
        }
    }

    public class OnUserEarnedRewardListener : Java.Lang.Object, IOnUserEarnedRewardListener
    {
        public event EventHandler OnRewarded;

        public void OnUserEarnedReward(IRewardItem rewardItem)
        {
            OnRewarded?.Invoke(this, EventArgs.Empty);
        }
    }
}

Above is my complete implementation up to now. I am getting an error like below,

xxxx.Android/obj/Debug/android/src/crc64039b71ce541340e9/RewardedInterstitialAdLoadCallback.java(14,14): Error JAVAC0000:  error: name clash: onAdLoaded(Object) in RewardedInterstitialAdLoadCallback and onAdLoaded(AdT) in AdLoadCallback have the same erasure, yet neither overrides the other
    public void onAdLoaded (java.lang.Object p0)
  where AdT is a type-variable:
    AdT extends Object declared in class AdLoadCallback
 (JAVAC0000) (xxxx.Android) javac
mhdwaelanjo commented 1 year ago

I fixed the problem.. we can use my libraries :

 <PackageReference Include="Anjo.Android.GoogleServices.Ads" Version="22.0.0" />
 <PackageReference Include="Anjo.Android.GoogleServices.AdsBase" Version="22.0.0" />
 <PackageReference Include="Anjo.Android.GoogleServices.AdsLite" Version="22.0.0" />

Supports fixing the problem of Loading ads using :