Можно ли интегрировать AdMob в приложение Android с помощью платформы Uno - PullRequest
2 голосов
/ 22 января 2020

У меня есть несколько приложений UWP, которые я хотел бы перенести на Android.

. Я уже перенес некоторые из них с помощью Xamarin. Формы, которые я обнаружил, - это Uno Platform, которая кажется великолепной. Но я не нашел никакой информации об интеграции рекламы AdMob в Android проекте с использованием Uno Platform.

Кто-нибудь уже сделал это?

Ответы [ 2 ]

5 голосов
/ 23 января 2020

Да, это возможно, и я смог заставить его работать в моем приложении Uno Platform на Android и iOS. Я планирую написать blogpost о том, как AdMob и AdSense будут работать на Android, iOS и WASM, и опубликовать sh библиотеку Uno Platform на NuGet, которая сделает всю тяжелую работу за вас. Так что следите за обновлениями :-).

На данный момент, это неотредактированная, сырая версия элемента управления, который я использую в настоящее время. Для этого необходимо установить пакеты NuGet Ads Google Play Services в Android проекте и iOS проекте .

Android.

#if __ANDROID__
using Android.Gms.Ads;
using Android.Widget;
using System;
using System.Collections.Generic;
using System.Text;
using Uno.UI;
using Windows.UI.Xaml;
using Windows.UI.Xaml.Controls;

namespace SmsTicket.Core.Controls
{
    public partial class AdControl : ContentControl
    {
        public AdControl()
        {
            var adView = new AdView(ContextHelper.Current);
            adView.AdSize = AdSize.SmartBanner;
            adView.AdUnitId = "YOUR AD UNIT ID";
            HorizontalContentAlignment = HorizontalAlignment.Stretch;
            VerticalContentAlignment = VerticalAlignment.Stretch;
            var adParams = new LinearLayout.LayoutParams(
                LayoutParams.WrapContent, LayoutParams.WrapContent);
            adView.LayoutParameters = adParams;           
            adView.LoadAd(new AdRequest.Builder().AddTestDevice("YOUR TEST DEVICE ID").Build());
            Content = adView;
        }
    }
}
#endif

iOS

#if __IOS__
using Google.MobileAds;
using System;
using System.Collections.Generic;
using System.Text;
using UIKit;
using Windows.UI.Xaml.Controls;
using Windows.UI.Xaml;
using CoreGraphics;

namespace SmsTicket.Core.Controls
{
    public partial class AdControl : ContentControl
    {
        public AdControl()
        {
            HorizontalContentAlignment = HorizontalAlignment.Stretch;
            VerticalContentAlignment = VerticalAlignment.Stretch;
            Background = SolidColorBrushHelper.Red;
            Width = AdSizeCons.LargeBanner.Size.Width;
            Height = AdSizeCons.LargeBanner.Size.Height;
            Windows.UI.Xaml.Window.Current.Activated += Current_Activated;
        }

        private void LoadAd()
        {
            if (!(Content is BannerView))
            {
                var adView = new BannerView(AdSizeCons.LargeBanner)
                {
                    AdUnitID = "YOUR AD UNIT ID",
                    RootViewController = GetVisibleViewController()
                };
                adView.LoadRequest(GetRequest());
                Content = adView;
            }
        }

        Request GetRequest()
        {
            var request = Request.GetDefaultRequest();
            // Requests test ads on devices you specify. Your test device ID is printed to the console when
            // an ad request is made. GADBannerView automatically returns test ads when running on a
            // simulator. After you get your device ID, add it here
            request.TestDevices = new[] { Request.SimulatorId.ToString(), "YOUR TEST DEVICE ID" };
            return request;
        }

        UIViewController GetVisibleViewController()
        {
            UIViewController rootController;
            if (UIApplication.SharedApplication.KeyWindow == null)
            {
                return null;
            }
            else
            {
                rootController = UIApplication.SharedApplication.KeyWindow.RootViewController;
            }

            if (rootController.PresentedViewController == null)
                return rootController;

            if (rootController.PresentedViewController is UINavigationController)
            {
                return ((UINavigationController)rootController.PresentedViewController).VisibleViewController;
            }

            if (rootController.PresentedViewController is UITabBarController)
            {
                return ((UITabBarController)rootController.PresentedViewController).SelectedViewController;
            }

            return rootController.PresentedViewController;
        }

        private void Current_Activated(object sender, Windows.UI.Core.WindowActivatedEventArgs e)
        {
            LoadAd();
        }
    }
}
#endif

Также убедитесь, что элемент управления Ad включен только условно (как я указал только Android и iOS версия здесь).

0 голосов
/ 22 января 2020

Uno Platform не будет блокировать вас от использования какой-либо третьей стороной (особенно не на мобильном телефоне). Если есть привязка xamarin, вы можете использовать ее как есть в своем коде, как если бы вы использовали ее в приложении Xamarin.Forms. Если это библиотека, влияющая на представление, вы, скорее всего, создадите пользовательский элемент управления и будете взаимодействовать со сторонними классами через C#.

Если для библиотеки нет привязки xamarin, вы можете создать одну из следующих документов Microsoft .

Хорошие новости! Для admob есть привязка, поддерживаемая Microsoft nuget , и в прошлом она использовалась в приложении uno.

...