В эти выходные я потратил некоторое время на интеграцию Admob Ads в приложения Android, которые разработано на Xamarin.Forms. Я писал об этом несколько дней назад, так что сначала ознакомитесь с той статьей! В этот раз я решил обратиться к iOS и внедрить Google/Firebase Admob Ads, используя такой же механизм. Я буду в чем-то здесь повторяться, чтобы каждый пост был самодостаточным.
Регистрация AdMob
В общем, сначала требуется зарегистрировать AdMob. То же самое я делал в случае с Android, но здесь мы имеем дело с проектом под iOS. В итоге у нас появятся две важные части информации: Application Code и Ad Unit Id. Нам они понадобятся позднее, но сейчас просто перейдите по ссылке, зарегистрируйте новое приложение, сделайте ссылку на какое-либо приложение в Firebase, и после этого можно переходить к дальнейшему.
Добавление GoogleService-Info.plist
Когда создается новое приложения в Admob/Firebase, там появляется файл Google Service config plist, который получается при загрузке. Добавьте его в корень проекта iOS и удостоверьтесь, что Build Action установлена в BundleResource. Это крайне важно!
Загрузка пакета NuGet
Самое приятное здесь то, что при интеграции рекламы в iOS можно совершенно не волноваться о вопросах, связанных с версиями Google Play. Наберите в поиске Xamarin.Google.iOS.MobileAds и первыми в списки должны появиться пакеты Xamarin. Желательно установить последнюю версию, и самая актуальная их них на сегодняшний день это — 7.11.0
Пользовательский элемент управления
В мое приложение я не добавил какие-либо привязки пользовательских данных или что-нибудь подобное для Ad Ids, поэтому я просто создаю элементарный пользовательский элемент управления в общем коде. Это тот же самый код, который является общим с моим проектом приложения под Android:
1 2 3 4 5 6 7 8 | using Xamarin.Forms; namespace MeetupManager.Controls { public class AdView : View { } } |
Рендерер рекламных View
Теперь следует перейти в наш iOS-проект и реализовать пользовательский элемент управления. Фактически просто метод для создания нативного AdView и последующей установки его при загрузке страницы.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 | using CoreGraphics; using Google.MobileAds; using System; using UIKit; using Xamarin.Forms; using Xamarin.Forms.Platform.iOS; using MeetupManager.UI; using MeetupManager.Views; [assembly: ExportRenderer(typeof(MeetupManager.Controls.AdView), typeof(MeetupManager.iOS.PlatformSpecific.AdViewRenderer))] namespace MeetupManager.iOS.PlatformSpecific { public class AdViewRenderer : ViewRenderer<Controls.AdView, BannerView> { string bannerId = "Your Ad Unit Id"; BannerView adView; BannerView CreateNativeControl() { if (adView != null) return adView; // Setup your BannerView, review AdSizeCons class for more Ad sizes. adView = new BannerView(size: AdSizeCons.SmartBannerPortrait, origin: new CGPoint(0, UIScreen.MainScreen.Bounds.Size.Height - AdSizeCons.Banner.Size.Height)) { AdUnitID = bannerId, RootViewController = GetVisibleViewController() }; // Wire AdReceived event to know when the Ad is ready to be displayed adView.AdReceived += (object sender, EventArgs e) => { //ad has come in }; adView.LoadRequest(GetRequest()); return 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 () }; return request; } /// /// Gets the visible view controller. /// /// The visible view controller. UIViewController GetVisibleViewController() { var 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; } protected override void OnElementChanged(ElementChangedEventArgs e) { base.OnElementChanged(e); if(Control == null) { CreateNativeControl(); SetNativeControl(adView); } } } } |
Обновление AppDelegate
Перейдите к файлу AppDelegate.cs и инициализируйте MobileAds из SDK в методе FinishedLaunching:
1 | MobileAds.Configure("Your Publishing App Id"); |
Обновление XAML
Сейчас можно добавить пользовательский элемент управления в нижнюю часть XAML.
Сначала добавим в пользовательский xmlns пространства имен:
1 | xmlns:controls="clr-namespace:MeetupManager.Controls;assembly=MeetupManager" |
После этого добавим в пользовательский элемент управления — и готово!
Успех!
Сейчас можно запустить приложение — и сюрприз! Тестовое рекламное объявление!
Тут, разумеется, появился простой «умный баннер», но его можно улучшить или же попробовать использовать другие рекламные объявления при помощи пользовательских рендереров. Кроме того, не забудьте добавить различные баннеры на основе идентификатора со страницы, на которой Вы находитесь!
Автор: James Montemagno
Источник: Статья в блоге автора
Написать ответ