이전 포스팅에서 광고적용 코드를 알아보았는데 .NET6 기준이라 현재 사용하는데 문제가 있습니다
2024.05.09 - [코딩/.NET MAUI] - .NET MAUI AdMob 광고 적용하기 (전면, 배너, 보상)
.NET8 버전으로 알아보겠습니다.
먼저 아래 Nuget Package 를 설치합니다.
Plugin.MauiMTAdmob
Xamarin.Google.iOS.MobileAds
Plugin.MauiMTAdmob 패키지는 ios, android 만 지원하여 csproj 파일 편집이 필요합니다.
csproj 파일의 PropertyGroup 에서 TargetFrameworks 를 아래처럼 android, ios 만 두고 모두 삭제합니다.
<TargetFrameworks>net8.0-android;net8.0-ios</TargetFrameworks>
SupportedOSPlatformVersion 또한 android, ios 만 두고 모두 삭제합니다.
<SupportedOSPlatformVersion Condition="$([MSBuild]::GetTargetPlatformIdentifier('$(TargetFramework)')) == 'ios'">11.0</SupportedOSPlatformVersion>
<SupportedOSPlatformVersion Condition="$([MSBuild]::GetTargetPlatformIdentifier('$(TargetFramework)')) == 'android'">21.0</SupportedOSPlatformVersion>
MauiProgram.cs 에 .UseMauiMTAdmob() 을 추가합니다.
using Microsoft.Extensions.Logging;
using Plugin.MauiMTAdmob;
namespace AdmobTest
{
public static class MauiProgram
{
public static MauiApp CreateMauiApp()
{
var builder = MauiApp.CreateBuilder();
builder
.UseMauiApp<App>()
.UseMauiMTAdmob() // 추가
.ConfigureFonts(fonts =>
{
fonts.AddFont("OpenSans-Regular.ttf", "OpenSansRegular");
fonts.AddFont("OpenSans-Semibold.ttf", "OpenSansSemibold");
});
#if DEBUG
builder.Logging.AddDebug();
#endif
return builder.Build();
}
}
}
먼저 AdMob 사이트로 가서 광고 ID 를 발급받아야합니다.
test 앱을 추가해 ios, android 별 광고 ID 를 추가해야합니다.
여기에서 ca-app-pub.... 항목을 사용하게됩니다.
Android 는 AndroidManifest.xml 에 APPLICATION_ID 에 Android 용 Admob 광고 ID 를 추가합니다.
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android">
<application android:allowBackup="true" android:icon="@mipmap/appicon" android:roundIcon="@mipmap/appicon_round" android:supportsRtl="true">
<meta-data android:name="com.google.android.gms.ads.APPLICATION_ID" android:value="ca-app-pub-2643538289217660~5183062697" />
</application>
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
<uses-permission android:name="android.permission.INTERNET" />
</manifest>
iOS 는 info.list 에 GADApplicationIdentifier 에 iOS 용 Admob 광고 ID 를 추가합니다.
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
<key>LSRequiresIPhoneOS</key>
<true/>
<key>UIDeviceFamily</key>
<array>
<integer>1</integer>
<integer>2</integer>
</array>
<key>UIRequiredDeviceCapabilities</key>
<array>
<string>arm64</string>
</array>
<key>UISupportedInterfaceOrientations</key>
<array>
<string>UIInterfaceOrientationPortrait</string>
<string>UIInterfaceOrientationLandscapeLeft</string>
<string>UIInterfaceOrientationLandscapeRight</string>
</array>
<key>UISupportedInterfaceOrientations~ipad</key>
<array>
<string>UIInterfaceOrientationPortrait</string>
<string>UIInterfaceOrientationPortraitUpsideDown</string>
<string>UIInterfaceOrientationLandscapeLeft</string>
<string>UIInterfaceOrientationLandscapeRight</string>
</array>
<key>XSAppIconAssets</key>
<string>Assets.xcassets/appicon.appiconset</string>
<key>GADApplicationIdentifier</key>
<string>ca-app-pub-2643538289217660~9889428618</string>
</dict>
</plist>
광고앱 ID 설정이 끝나면 CrossMauiMTAdmob.Current.Init 메서드를 호출해 줘야합니다.
호출하지 않으면 아래와 같은 에러 메세지가 발생됩니다.
System.Exception: 'MTAdmob not initialised. You need to initialise it using CrossMauiMTAdmob.Current.Init in your platform projects!'
Android 는 MainActivity.cs 에 아래처럼 처리합니다.
using Foundation;
using Plugin.MauiMTAdmob;
using UIKit;
namespace AdmobTest
{
[Register("AppDelegate")]
public class AppDelegate : MauiUIApplicationDelegate
{
protected override MauiApp CreateMauiApp() => MauiProgram.CreateMauiApp();
public AppDelegate()
{
// 추가
CrossMauiMTAdmob.Current.Init();
}
// 추가
public override void OnActivated(UIApplication application)
{
base.OnActivated(application);
CrossMauiMTAdmob.Current.OnResume();
}
}
}
iOS 는 AppDelegate.cs 에 아래처럼 처리합니다.
using Foundation;
using Plugin.MauiMTAdmob;
using UIKit;
namespace AdmobTest
{
[Register("AppDelegate")]
public class AppDelegate : MauiUIApplicationDelegate
{
protected override MauiApp CreateMauiApp() => MauiProgram.CreateMauiApp();
public AppDelegate()
{
// 추가
CrossMauiMTAdmob.Current.Init();
}
// 추가
public override void OnActivated(UIApplication application)
{
base.OnActivated(application);
CrossMauiMTAdmob.Current.OnResume();
}
}
}
MainPage.xaml
<?xml version="1.0" encoding="utf-8" ?>
<ContentPage
x:Class="AdmobTest.MainPage"
xmlns="http://schemas.microsoft.com/dotnet/2021/maui"
xmlns:x="http://schemas.microsoft.com/winfx/2009/xaml"
xmlns:admob="clr-namespace:Plugin.MauiMTAdmob.Controls;assembly=Plugin.MauiMTAdmob">
<Grid>
<StackLayout VerticalOptions="Start">
<Button
Margin="10"
BorderColor="Blue"
BorderWidth="1"
Clicked="Button_Clicked"
HeightRequest="50"
Text="AdMob Interstitialid Test"
TextColor="Black"
VerticalOptions="Start" />
<Button
Margin="10"
BorderColor="Blue"
BorderWidth="1"
Clicked="RewardButton_Clicked"
HeightRequest="50"
Text="AdMob Reward Test"
TextColor="Black"
VerticalOptions="Start" />
</StackLayout>
<StackLayout VerticalOptions="End">
<Label
HorizontalTextAlignment="Center"
Text="AdMob Banner Test"
TextColor="Black"
VerticalTextAlignment="Center" />
<admob:MTAdView
x:Name="mtAdView"
AdSize="Banner"
BackgroundColor="Transparent" />
</StackLayout>
</Grid>
</ContentPage>
MainPage.xaml.cs
using Plugin.MauiMTAdmob;
namespace AdmobTest
{
public partial class MainPage : ContentPage
{
public MainPage()
{
InitializeComponent();
/* Test ID
Android
https://developers.google.com/admob/android/test-ads?hl=ko
앱 오프닝 광고 ca-app-pub-3940256099942544/3419835294
배너 광고 ca-app-pub-3940256099942544/6300978111
전면 광고 ca-app-pub-3940256099942544/1033173712
전면 동영상 광고 ca-app-pub-3940256099942544/8691691433
보상형 광고 ca-app-pub-3940256099942544/5224354917
보상형 전면 광고 ca-app-pub-3940256099942544/5354046379
네이티브 광고 고급형 ca-app-pub-3940256099942544/2247696110
네이티브 동영상 광고 고급형 ca-app-pub-3940256099942544/1044960115
iOS
https://developers.google.com/admob/ios/test-ads#demo_ad_units
앱 오프닝 광고 ca-app-pub-3940256099942544/5662855259
배너 광고 ca-app-pub-3940256099942544/2934735716
전면 광고 ca-app-pub-3940256099942544/4411468910
전면 동영상 광고 ca-app-pub-3940256099942544/5135589807
보상형 광고 ca-app-pub-3940256099942544/1712485313
보상형 전면 광고 ca-app-pub-3940256099942544/6978759866
네이티브 광고 고급형 ca-app-pub-3940256099942544/3986624511
네이티브 동영상 광고 고급형 ca-app-pub-3940256099942544/2521693316
*/
if (DeviceInfo.Platform.Equals(DevicePlatform.Android))
{
this.mtAdView.AdsId = "ca-app-pub-3940256099942544/6300978111";
}
else
{
this.mtAdView.AdsId = "ca-app-pub-3940256099942544/2934735716";
}
// 전면광고 Loaded 완료시 전면광고 표시
CrossMauiMTAdmob.Current.OnInterstitialLoaded += (s, e) => CrossMauiMTAdmob.Current.ShowInterstitial();
// 전면광고 Close 시 이벤트
CrossMauiMTAdmob.Current.OnInterstitialClosed += (s, e) => DisplayAlert("AdMobTest", "Interstitial Close", "OK");
// 보상광고 Loaded 완료시 보상광고 표시
CrossMauiMTAdmob.Current.OnRewardedLoaded += (s, e) => CrossMauiMTAdmob.Current.ShowRewarded();
// 보상광고 Click 시 이벤트
CrossMauiMTAdmob.Current.OnRewardedClicked += (s, e) => DisplayAlert("AdMobTest", "RewardedClicked", "OK");
// 보상광고 Close 시 이벤트
CrossMauiMTAdmob.Current.OnRewardedClosed += (s, e) => DisplayAlert("AdMobTest", "RewardedClosed", "OK");
}
private void Button_Clicked(object sender, EventArgs e)
{
/* 전면 광고 표시 */
// 이미 로드되어있는 확인
bool isInterstitialLoaded = CrossMauiMTAdmob.Current.IsInterstitialLoaded();
if (!isInterstitialLoaded)
{
if (DeviceInfo.Platform.Equals(DevicePlatform.Android))
{
CrossMauiMTAdmob.Current.LoadInterstitial("ca-app-pub-3940256099942544/1033173712");
}
else
{
CrossMauiMTAdmob.Current.LoadInterstitial("ca-app-pub-3940256099942544/4411468910");
}
}
}
private void RewardButton_Clicked(object sender, EventArgs e)
{
/* 보상 광고 표시 */
// 이미 로드되어있는 확인
bool IsRewardedLoaded = CrossMauiMTAdmob.Current.IsRewardedLoaded();
if (!IsRewardedLoaded)
{
if (DeviceInfo.Platform.Equals(DevicePlatform.Android))
{
CrossMauiMTAdmob.Current.LoadRewarded("ca-app-pub-3940256099942544/5224354917");
}
else
{
CrossMauiMTAdmob.Current.LoadRewarded("ca-app-pub-3940256099942544/1712485313");
}
}
}
}
}
iOS 디버깅 시 아래 에러가 발생된다면
MT2301 The linker step 'Setup' failed during processing: This version of Microsoft.iOS requires the iOS 17.2 SDK (shipped with Xcode 15.1). Either upgrade Xcode to get the required header files or set the managed linker behaviour to Link Framework SDKs Only in your project's iOS Build Options > Linker Behavior (to try to avoid the new APIs). AdmobTest (net8.0-ios) C:\Program Files\dotnet\packs\Microsoft.iOS.Windows.Sdk\17.2.8053\tools\msbuild\iOS\Xamarin.iOS.Common.After.targets 364
프로젝트 속성에서 링커 동작을 '프레임워크 SDK만 링크' 로 바꿔줍니다.
Android
iOS
MtAdmob 은 라이센스를 구매하는 경우 더 많은 광고를 지원받을수 있습니다.
무료버전은 배너와 전면광고, 보상광고를 사용할 수 있습니다.
https://hightouchinnovation.com/MMTAdmob
소스
https://github.com/kei-soft/AdmobTest
참고
https://github.com/marcojak/MauiMTAdmob
.NET MAUI 다국어 적용하기 (0) | 2024.11.09 |
---|---|
Syncfusion MAUI 소스를 오픈소스로 공개 (0) | 2024.10.23 |
.NET MAUI Google Vision 사용하기 (0) | 2024.06.15 |
.NET MAUI ViewModel 단에서 DisplayPromptAsync 사용하기 (0) | 2024.05.16 |
.NET MAUI Picker 사용 방법 (0) | 2024.05.16 |