xamarin / FacebookComponents

MIT License
88 stars 70 forks source link

Re-Update of "Please Update To Audience Network SDK 6.1.0 - September 28, 2020" #187

Open osmanghaziurdu opened 4 years ago

osmanghaziurdu commented 4 years ago

Latest Version Of Facebook Audience Network Is 6.1.0 but Current Nuget Version is 5.10.1 . Please Update the Package as soon As Possible as old SDKs effect Ads integration and Income. Thanks

Audience Network SDK 6.1.0 - September 28, 2020 : https://developers.facebook.com/docs/audience-network/changelog-android#6_1_0

osmanghaziurdu commented 3 years ago

Any Update ??????????????????????????

BilKaz commented 3 years ago

Still waiting for the update Nuget for Xamarin Android. Version 5.10.1 has unresolved issues forcing us to use deprecated methods

1) There is no extension method WithAdListener for IAdLoadConfigBuilder to add an Ad listener while loading Ad. 2) interstitial_ad.BuildLoadAdConfig() returns IAdLoadConfigBuilder instead of Interstitial.InterstitialLoadConfigBuilder

osmanghaziurdu commented 3 years ago

Just Because Of OLD SDK i moved my app to Android Studio (Java) and leave the Xamarin completely. 😽

BilKaz commented 3 years ago

Audience Network SDK for iOS has recently been updated version 6.3.0 (The latest). Can we expect the same for Android?

BilKaz commented 3 years ago

It's been a month and still no update. At least please share timeline for the update...

kenchan97 commented 3 years ago

same issue+1 "withAdListener" method not found
not able to add listener into FAN ad

YoussefR33 commented 3 years ago

the binding of facebook audience network its pretty easy , there is some gaps for methods 'WithAdListener' and 'Build' , but it can be override with few Jni calls. I have a ready DLL for sdk 6.4 , its just i m not familiar with making a Nuget Package , and i m not sure if its allowed to share a DLL link here.

mputnick commented 3 years ago

I had the same problem - missing WithAdListener method.

For those who encounter it or need fresh version of Audience Network SDK my solution is: 1) Download fresh version of SDK from Maven repo in AAR extension here: link 2) Create binding library for this AAR (documentation). While building this project I had error of type "Class does not implement interface method". The solution is on this page 3) Include this binding library project into your VS solution. Now you can use it by C#!

BilKaz commented 3 years ago

@r33software / @mputnick

Please share metadata.xml as I have tried to generate the dll (using existing dll metadata for 5.10.1) but there are too many warnings I don't understand. Should I ignore them?

My metadata.xml

<attr path="/api/package[@name='com.facebook.ads']/class[@name='MediaView']" name="extends">android.widget.RelativeLayout</attr>

  <remove-node path="/api/package[contains(@name, 'com.facebook.ads.internal')]" />

  <attr path="/api/package[@name='com.facebook.ads']/class[@name='InterstitialAd']/method[@name='buildLoadAdConfig' and count(parameter)=0]" name="managedReturn">IAdLoadConfigBuilder</attr>
  <attr path="/api/package[@name='com.facebook.ads']/class[@name='InterstitialAd']/method[@name='buildShowAdConfig' and count(parameter)=0]" name="managedReturn">IFullScreenAdShowConfigBuilder</attr>

  <attr path="/api/package[@name='com.facebook.ads']/class[@name='RewardedVideoAd']/method[@name='buildLoadAdConfig' and count(parameter)=0]" name="managedReturn">IAdLoadConfigBuilder</attr>
  <attr path="/api/package[@name='com.facebook.ads']/class[@name='RewardedVideoAd']/method[@name='buildShowAdConfig' and count(parameter)=0]" name="managedReturn">IFullScreenAdShowConfigBuilder</attr>

  <attr path="/api/package[@name='com.facebook.ads']/interface[@name='InterstitialAd.InterstitialAdLoadConfigBuilder']/method[@name='build' and count(parameter)=0]" name="managedReturn">IAdLoadAdConfig</attr>
  <attr path="/api/package[@name='com.facebook.ads']/interface[@name='InterstitialAd.InterstitialAdLoadConfigBuilder']/method[@name='withBid' and count(parameter)=1 and parameter[1][@type='java.lang.String']]" name="managedReturn">IAdLoadConfigBuilder</attr>
  <attr path="/api/package[@name='com.facebook.ads']/interface[@name='InterstitialAd.InterstitialAdShowConfigBuilder']/method[@name='build' and count(parameter)=0]" name="managedReturn">IFullScreenAdShowAdConfig</attr>

  <attr path="/api/package[@name='com.facebook.ads']/interface[@name='RewardedVideoAd.RewardedVideoAdLoadConfigBuilder']/method[@name='build' and count(parameter)=0]" name="managedReturn">IAdLoadAdConfig</attr>
  <attr path="/api/package[@name='com.facebook.ads']/interface[@name='RewardedVideoAd.RewardedVideoAdLoadConfigBuilder']/method[@name='withBid' and count(parameter)=1 and parameter[1][@type='java.lang.String']]" name="managedReturn">IAdLoadConfigBuilder</attr>
  <attr path="/api/package[@name='com.facebook.ads']/interface[@name='RewardedVideoAd.RewardedVideoAdShowConfigBuilder']/method[@name='build' and count(parameter)=0]" name="managedReturn">IFullScreenAdShowAdConfig</attr>

  <attr path="/api/package[@name='com.facebook.ads']/interface[@name='NativeAdBase.NativeAdLoadConfigBuilder']/method[@name='build' and count(parameter)=0]" name="managedReturn">IAdLoadAdConfig</attr>
  <attr path="/api/package[@name='com.facebook.ads']/interface[@name='NativeAdBase.NativeAdLoadConfigBuilder']/method[@name='withBid' and count(parameter)=1 and parameter[1][@type='java.lang.String']]" name="managedReturn">IAdLoadConfigBuilder</attr>

  <attr path="/api/package[@name='com.facebook.ads']/interface[@name='AdView.AdViewLoadConfigBuilder']/method[@name='build' and count(parameter)=0]" name="managedReturn">IAdLoadAdConfig</attr>
  <attr path="/api/package[@name='com.facebook.ads']/interface[@name='AdView.AdViewLoadConfigBuilder']/method[@name='withBid' and count(parameter)=1 and parameter[1][@type='java.lang.String']]" name="managedReturn">IAdLoadConfigBuilder</attr>
mputnick commented 3 years ago

@BilKaz

I didn't edit metadata.xml file. Instead of this I created partial classes definitions. I don't sure if it's OK to do so with void returning methods, but it helps to avoid any errors and warnings.

using Android.Content;
using Android.OS;
using Android.Runtime;
using Android.Views;
using Android.Widget;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

namespace Com.Facebook.Ads.Internal.Api
{
    public abstract partial class AdComponentFrameLayout
    {
        public void SetLayoutParams(ViewGroup.LayoutParams p0)
        {
            SetLayoutParams(p0);
        }
    }

    public abstract partial class AdNativeComponentView
    {
        public void SetLayoutParams(ViewGroup.LayoutParams p0)
        {
            SetLayoutParams(p0);
        }
    }

    internal partial class IInterstitialAdApiInvoker
    {
        IAdLoadConfigBuilder IFullScreenAd.BuildLoadAdConfig()
        {
            return BuildLoadAdConfig();
        }

        IFullScreenAdShowConfigBuilder IFullScreenAd.BuildShowAdConfig()
        {
            return BuildShowAdConfig();
        }
    }

    public partial class InitSettingsBuilder
    {
        AudienceNetworkAds.IInitSettingsBuilder AudienceNetworkAds.IInitSettingsBuilder.WithInitListener(AudienceNetworkAds.IInitListener p0)
        {
            return WithInitListener(p0);
        }

        AudienceNetworkAds.IInitSettingsBuilder AudienceNetworkAds.IInitSettingsBuilder.WithMediationService(string p0)
        {
            return WithMediationService(p0);
        }

        AudienceNetworkAds.IInitSettingsBuilder AudienceNetworkAds.IInitSettingsBuilder.WithPlacementIds(IList<string> p0)
        {
            return WithPlacementIds(p0);
        }
    }

    internal partial class IRewardedVideoAdApiInvoker
    {
        IAdLoadConfigBuilder IFullScreenAd.BuildLoadAdConfig()
        {
            return BuildLoadAdConfig();
        }

        IFullScreenAdShowConfigBuilder IFullScreenAd.BuildShowAdConfig()
        {
            return BuildShowAdConfig();
        }
    }
}

and

using Android.App;
using Android.Content;
using Android.OS;
using Android.Runtime;
using Android.Views;
using Android.Widget;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

namespace Com.Facebook.Ads
{
    public partial class AdView
    {
        internal partial class IAdViewLoadConfigBuilderInvoker
        {
            IAdLoadAdConfig IAdLoadConfigBuilder.Build()
            {
                return Build();
            }

            IAdLoadConfigBuilder IAdLoadConfigBuilder.WithBid(string p0)
            {
                return WithBid(p0);
            }
        }
    }

    public partial class InterstitialAd
    {
        IAdLoadConfigBuilder IFullScreenAd.BuildLoadAdConfig()
        {
            return BuildLoadAdConfig();
        }

        IFullScreenAdShowConfigBuilder IFullScreenAd.BuildShowAdConfig()
        {
            return BuildShowAdConfig();
        }

        internal partial class IInterstitialAdLoadConfigBuilderInvoker
        {
            IAdLoadAdConfig IAdLoadConfigBuilder.Build()
            {
                return Build();
            }

            IAdLoadConfigBuilder IAdLoadConfigBuilder.WithBid(string p0)
            {
                return WithBid(p0);
            }
        }

        internal partial class IInterstitialAdShowConfigBuilderInvoker
        {
            IFullScreenAdShowAdConfig IFullScreenAdShowConfigBuilder.Build()
            {
                return Build();
            }
        }
    }

    public abstract partial class NativeAdBase
    {
        internal partial class INativeAdLoadConfigBuilderInvoker
        {

            IAdLoadAdConfig IAdLoadConfigBuilder.Build()
            {
                return Build();
            }

            IAdLoadConfigBuilder IAdLoadConfigBuilder.WithBid(string p0)
            {
                return WithBid(p0);
            }
        }
    }

    public partial class RewardedVideoAd
    {
        IAdLoadConfigBuilder IFullScreenAd.BuildLoadAdConfig()
        {
            return BuildLoadAdConfig();
        }

        IFullScreenAdShowConfigBuilder IFullScreenAd.BuildShowAdConfig()
        {
            return BuildShowAdConfig();
        }

        internal partial class IRewardedVideoAdLoadConfigBuilderInvoker
        {
            IAdLoadAdConfig IAdLoadConfigBuilder.Build()
            {
                return Build();
            }

            IAdLoadConfigBuilder IAdLoadConfigBuilder.WithBid(string p0)
            {
                return WithBid(p0);
            }
        }

        internal partial class IRewardedVideoAdShowConfigBuilderInvoker
        {
            IFullScreenAdShowAdConfig IFullScreenAdShowConfigBuilder.Build()
            {
                return Build();
            }
        }
    }
}
eduardoqc183 commented 3 years ago

@BilKaz

I didn't edit metadata.xml file. Instead of this I created partial classes definitions. I don't sure if it's OK to do so with void returning methods, but it helps to avoid any errors and warnings.

using Android.Content;
using Android.OS;
using Android.Runtime;
using Android.Views;
using Android.Widget;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

namespace Com.Facebook.Ads.Internal.Api
{
    public abstract partial class AdComponentFrameLayout
    {
        public void SetLayoutParams(ViewGroup.LayoutParams p0)
        {
            SetLayoutParams(p0);
        }
    }

    public abstract partial class AdNativeComponentView
    {
        public void SetLayoutParams(ViewGroup.LayoutParams p0)
        {
            SetLayoutParams(p0);
        }
    }

    internal partial class IInterstitialAdApiInvoker
    {
        IAdLoadConfigBuilder IFullScreenAd.BuildLoadAdConfig()
        {
            return BuildLoadAdConfig();
        }

        IFullScreenAdShowConfigBuilder IFullScreenAd.BuildShowAdConfig()
        {
            return BuildShowAdConfig();
        }
    }

    public partial class InitSettingsBuilder
    {
        AudienceNetworkAds.IInitSettingsBuilder AudienceNetworkAds.IInitSettingsBuilder.WithInitListener(AudienceNetworkAds.IInitListener p0)
        {
            return WithInitListener(p0);
        }

        AudienceNetworkAds.IInitSettingsBuilder AudienceNetworkAds.IInitSettingsBuilder.WithMediationService(string p0)
        {
            return WithMediationService(p0);
        }

        AudienceNetworkAds.IInitSettingsBuilder AudienceNetworkAds.IInitSettingsBuilder.WithPlacementIds(IList<string> p0)
        {
            return WithPlacementIds(p0);
        }
    }

    internal partial class IRewardedVideoAdApiInvoker
    {
        IAdLoadConfigBuilder IFullScreenAd.BuildLoadAdConfig()
        {
            return BuildLoadAdConfig();
        }

        IFullScreenAdShowConfigBuilder IFullScreenAd.BuildShowAdConfig()
        {
            return BuildShowAdConfig();
        }
    }
}

and

using Android.App;
using Android.Content;
using Android.OS;
using Android.Runtime;
using Android.Views;
using Android.Widget;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

namespace Com.Facebook.Ads
{
    public partial class AdView
    {
        internal partial class IAdViewLoadConfigBuilderInvoker
        {
            IAdLoadAdConfig IAdLoadConfigBuilder.Build()
            {
                return Build();
            }

            IAdLoadConfigBuilder IAdLoadConfigBuilder.WithBid(string p0)
            {
                return WithBid(p0);
            }
        }
    }

    public partial class InterstitialAd
    {
        IAdLoadConfigBuilder IFullScreenAd.BuildLoadAdConfig()
        {
            return BuildLoadAdConfig();
        }

        IFullScreenAdShowConfigBuilder IFullScreenAd.BuildShowAdConfig()
        {
            return BuildShowAdConfig();
        }

        internal partial class IInterstitialAdLoadConfigBuilderInvoker
        {
            IAdLoadAdConfig IAdLoadConfigBuilder.Build()
            {
                return Build();
            }

            IAdLoadConfigBuilder IAdLoadConfigBuilder.WithBid(string p0)
            {
                return WithBid(p0);
            }
        }

        internal partial class IInterstitialAdShowConfigBuilderInvoker
        {
            IFullScreenAdShowAdConfig IFullScreenAdShowConfigBuilder.Build()
            {
                return Build();
            }
        }
    }

    public abstract partial class NativeAdBase
    {
        internal partial class INativeAdLoadConfigBuilderInvoker
        {

            IAdLoadAdConfig IAdLoadConfigBuilder.Build()
            {
                return Build();
            }

            IAdLoadConfigBuilder IAdLoadConfigBuilder.WithBid(string p0)
            {
                return WithBid(p0);
            }
        }
    }

    public partial class RewardedVideoAd
    {
        IAdLoadConfigBuilder IFullScreenAd.BuildLoadAdConfig()
        {
            return BuildLoadAdConfig();
        }

        IFullScreenAdShowConfigBuilder IFullScreenAd.BuildShowAdConfig()
        {
            return BuildShowAdConfig();
        }

        internal partial class IRewardedVideoAdLoadConfigBuilderInvoker
        {
            IAdLoadAdConfig IAdLoadConfigBuilder.Build()
            {
                return Build();
            }

            IAdLoadConfigBuilder IAdLoadConfigBuilder.WithBid(string p0)
            {
                return WithBid(p0);
            }
        }

        internal partial class IRewardedVideoAdShowConfigBuilderInvoker
        {
            IFullScreenAdShowAdConfig IFullScreenAdShowConfigBuilder.Build()
            {
                return Build();
            }
        }
    }
}

It worked !!! Thank you. !

akghasemi commented 2 years ago

@BilKaz

I didn't edit metadata.xml file. Instead of this I created partial classes definitions. I don't sure if it's OK to do so with void returning methods, but it helps to avoid any errors and warnings.

using Android.Content;
using Android.OS;
using Android.Runtime;
using Android.Views;
using Android.Widget;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

namespace Com.Facebook.Ads.Internal.Api
{
    public abstract partial class AdComponentFrameLayout
    {
        public void SetLayoutParams(ViewGroup.LayoutParams p0)
        {
            SetLayoutParams(p0);
        }
    }

    public abstract partial class AdNativeComponentView
    {
        public void SetLayoutParams(ViewGroup.LayoutParams p0)
        {
            SetLayoutParams(p0);
        }
    }

    internal partial class IInterstitialAdApiInvoker
    {
        IAdLoadConfigBuilder IFullScreenAd.BuildLoadAdConfig()
        {
            return BuildLoadAdConfig();
        }

        IFullScreenAdShowConfigBuilder IFullScreenAd.BuildShowAdConfig()
        {
            return BuildShowAdConfig();
        }
    }

    public partial class InitSettingsBuilder
    {
        AudienceNetworkAds.IInitSettingsBuilder AudienceNetworkAds.IInitSettingsBuilder.WithInitListener(AudienceNetworkAds.IInitListener p0)
        {
            return WithInitListener(p0);
        }

        AudienceNetworkAds.IInitSettingsBuilder AudienceNetworkAds.IInitSettingsBuilder.WithMediationService(string p0)
        {
            return WithMediationService(p0);
        }

        AudienceNetworkAds.IInitSettingsBuilder AudienceNetworkAds.IInitSettingsBuilder.WithPlacementIds(IList<string> p0)
        {
            return WithPlacementIds(p0);
        }
    }

    internal partial class IRewardedVideoAdApiInvoker
    {
        IAdLoadConfigBuilder IFullScreenAd.BuildLoadAdConfig()
        {
            return BuildLoadAdConfig();
        }

        IFullScreenAdShowConfigBuilder IFullScreenAd.BuildShowAdConfig()
        {
            return BuildShowAdConfig();
        }
    }
}

and

using Android.App;
using Android.Content;
using Android.OS;
using Android.Runtime;
using Android.Views;
using Android.Widget;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

namespace Com.Facebook.Ads
{
    public partial class AdView
    {
        internal partial class IAdViewLoadConfigBuilderInvoker
        {
            IAdLoadAdConfig IAdLoadConfigBuilder.Build()
            {
                return Build();
            }

            IAdLoadConfigBuilder IAdLoadConfigBuilder.WithBid(string p0)
            {
                return WithBid(p0);
            }
        }
    }

    public partial class InterstitialAd
    {
        IAdLoadConfigBuilder IFullScreenAd.BuildLoadAdConfig()
        {
            return BuildLoadAdConfig();
        }

        IFullScreenAdShowConfigBuilder IFullScreenAd.BuildShowAdConfig()
        {
            return BuildShowAdConfig();
        }

        internal partial class IInterstitialAdLoadConfigBuilderInvoker
        {
            IAdLoadAdConfig IAdLoadConfigBuilder.Build()
            {
                return Build();
            }

            IAdLoadConfigBuilder IAdLoadConfigBuilder.WithBid(string p0)
            {
                return WithBid(p0);
            }
        }

        internal partial class IInterstitialAdShowConfigBuilderInvoker
        {
            IFullScreenAdShowAdConfig IFullScreenAdShowConfigBuilder.Build()
            {
                return Build();
            }
        }
    }

    public abstract partial class NativeAdBase
    {
        internal partial class INativeAdLoadConfigBuilderInvoker
        {

            IAdLoadAdConfig IAdLoadConfigBuilder.Build()
            {
                return Build();
            }

            IAdLoadConfigBuilder IAdLoadConfigBuilder.WithBid(string p0)
            {
                return WithBid(p0);
            }
        }
    }

    public partial class RewardedVideoAd
    {
        IAdLoadConfigBuilder IFullScreenAd.BuildLoadAdConfig()
        {
            return BuildLoadAdConfig();
        }

        IFullScreenAdShowConfigBuilder IFullScreenAd.BuildShowAdConfig()
        {
            return BuildShowAdConfig();
        }

        internal partial class IRewardedVideoAdLoadConfigBuilderInvoker
        {
            IAdLoadAdConfig IAdLoadConfigBuilder.Build()
            {
                return Build();
            }

            IAdLoadConfigBuilder IAdLoadConfigBuilder.WithBid(string p0)
            {
                return WithBid(p0);
            }
        }

        internal partial class IRewardedVideoAdShowConfigBuilderInvoker
        {
            IFullScreenAdShowAdConfig IFullScreenAdShowConfigBuilder.Build()
            {
                return Build();
            }
        }
    }
}

Hi, I am having the same problem ,where should I add this codes? I built binding library and I had some issues and I removed them by following change in metadata.xml ` public

    <remove-node path="/api/package[@name='com.facebook.ads']/class[@name='InterstitialAd']" name="visibility">public</remove-node>

    <remove-node path="/api/package[@name='com.facebook.ads']/class[@name='RewardedInterstitialAd']" name="visibility">public</remove-node>

    <remove-node path="/api/package[@name='com.facebook.ads']/class[@name='RewardedVideoAd']" name="visibility">public</remove-node>

    <remove-node path="/api/package[@name='com.facebook.ads']/class[@name='NativeAdBase']" name="visibility">public</remove-node>

    <remove-node path="/api/package[@name='com.facebook.ads.internal.api']/class[@name='InitSettingsBuilder']" name="visibility">public</remove-node>

    <remove-node path="/api/package[@name='com.facebook.ads.internal.api']/class[@name='AdComponentFrameLayout']" name="visibility">public</remove-node>

    <remove-node path="/api/package[@name='com.facebook.ads.internal.api']/class[@name='AdNativeComponentView']" name="visibility">public</remove-node>`

but when I add those codes to my project that references the this binding library , then I have a lot of error.

mhdwaelanjo commented 8 months ago

We can use this library now Facebook Audience Network SDK for .NET for Android Anjo.Android.Facebook.AudienceNetwork (>= 6.16.0) and for login Anjo.Android.Facebook (>= 16.2.0)