본문 바로가기
[개발] 이야기/[DotNet] 이야기

xamarin android admob 광고 붙이기 - 2일간 삽질의 결과물 (삽질했던 내용도 공유!) - 1

by 헤이나우
반응형

이번에 자마린을 통해서 xamarin에 admob광고를 붙이는 기능을 알려드리고자 합니다.

우선 결과를 먼저 보여드리겠습니다.

아직 앱이 배포가 안되었기 때문에 테스트 광고라는 글자가 떴씁니다. 이게 매우...중요합니다.

그 이유는 나중에 알려드리도록 하겠습니다.

 

이번 포스팅은 크게 1부와 2부 이렇게 나눠서 진행할것이고 1부는 광고를 붙이는 기본 방법, 2부는 1부그대로 진행했을 때 광고가 왜 안뜨는지 제 경험담을 이야기 해보겠습니다.

 

우선 포스팅하는 날짜 방금 실행해본 결과라 현시점의 최신버전을 설치하여 진행했습니다.

 

그럼 admob광고 붙이는 방법을 알려드리겠습니다.

* 참고로 아래 순서는 제가 임의대로 진행한거라 변경이 되어도 크게 문제없습니다.

 

혹시나 진행했는데 광고가 안나오시는 분들은 이 글을 먼저 보시면 좋을거 같네요

xamarin android admob 광고 붙이기 - 삽질여정기 - 2

 

Admob 가입 및 Test Project 생성, 광고 생성

https://apps.admob.com/ 여기 사이트를 들어가서 가입을 해줍니다.

처음 가입후 승인은 하루정도 걸리더라구요 이게 승인이 되면 메일로 알려줍니다.

구글에서 이런 이메일이 오면 가입승이 완료된겁니다. 이제 네이티브앱에 광고를 붙일 수 있습니다.

 

승인이 된 후에 admob사이트에 가서 test프로젝트와 테스트 광고를 하나 만들어 줍니다. 

간단하고 배너타입으로 만들어줍니다.

 

프로젝트 만들기 - 앱추가후 아무 이름이나 넣어서 만들어 줍니다.
만든 프로젝트에서 '광고 단위'를 눌러 배너를 만듭니다.

*중요

AppId

프로젝트 선택 후 앱설정 클릭하시면 자신 계정의 appid가 보입니다.

이걸 잘 복사해서 저장해 둡니다.

 

광고단위id

 

광고를 만들면 광고 단위id가 만들어지는데 저걸 잘 복사해서 코드에 넣어줄겁니다.

 

참고)

appid에는 중간에 ~이 있고 광고단위id는 중간에 /가 있습니다.

잘 구분하셔야 합니다.

 

마지막으로 자신의 테스트 기기 등록

저는 이걸 안해줘서 광고가 안떠서 2틀 정도 삽질 했네요 ㅠㅠ 이런 실수 하지 맙시다.

설정-기기 테스트에 개발을 진행할 기기를 등록해 줘야 합니다.

자신의 기기 또는 에뮬의 광고ID를 넣어줍니다.

 

광고ID찾는법

안드로이드 폰의 설정 - Google - 광고 - 내 광고 ID : 

저걸 넣어줍니다. (왜 복사가 안되는거야 ㅠㅠ )

자 이제 AppId와 광고단위ID, 테스트 기기를 등록했으면 admob설정은 끝났습니다.

이제 코드 개발만 해주시면 됩니다.

 

Android 프로젝트에 nuget에서 Xamarin.GooglePlayServices.Ads 다운로드

물론 최신버전을 받아서 설치 하였습니다.

이 패키지를 Android, iOS 프로젝트에 설치하시면 됩니다.

* xamarin 프로젝트를 생성하면

App

App.Android

App.iOS

이렇게 프로젝트가 생성이 되는데 xxx.Android, xxx.iOS여기다 각각 설치를 해야 합니다.

 

Admob 노출을 위한 연동 클래스 생성

App.Android프로젝트와 App프로젝트에 Admob을 연동할 클래스를 각각 만들어 줍니다.

App - AdMobView.cs

public class AdMobView : View
	{
		public static readonly BindableProperty AdUnitIdProperty = BindableProperty.Create(
					   nameof(AdUnitId),
					   typeof(string),
					   typeof(AdMobView),
					   string.Empty);

		public string AdUnitId
		{
			get => (string)GetValue(AdUnitIdProperty);
			set => SetValue(AdUnitIdProperty, value);
		}
	}

 

 

 

App.Android - AdMobViewRenderer.cs

using Android.Content;
using Android.Gms.Ads;
using Android.Widget;
using App;
using App.Droid;
using System.ComponentModel;
using Xamarin.Forms;
using Xamarin.Forms.Platform.Android;

[assembly: ExportRenderer(typeof(AdMobView), typeof(AdMobViewRenderer))]
namespace App.Droid
{
	public class AdMobViewRenderer : ViewRenderer<AdMobView, AdView>
	{
		public AdMobViewRenderer(Context context) : base(context) { }

		protected override void OnElementChanged(ElementChangedEventArgs<AdMobView> e)
		{
			base.OnElementChanged(e);

			if (e.NewElement != null && Control == null)
			{
				SetNativeControl(CreateAdView());
			}
		}

		protected override void OnElementPropertyChanged(object sender, PropertyChangedEventArgs e)
		{
			base.OnElementPropertyChanged(sender, e);

			if (e.PropertyName == nameof(AdView.AdUnitId))
				Control.AdUnitId = Element.AdUnitId;
		}

		private AdView CreateAdView()
		{
			var adView = new AdView(Context)
			{
				AdSize = AdSize.Banner,
				AdUnitId = Element.AdUnitId
			};

			adView.LayoutParameters = new LinearLayout.LayoutParams(LayoutParams.MatchParent, LayoutParams.MatchParent);

			adView.LoadAd(new AdRequest
							.Builder()
							.Build());

			return adView;
		}

	}
}

 

 

AndroidManifest.xml application에 key, value추가
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android" android:versionCode="1" android:versionName="1.0" package="com.companyname.adtest" android:installLocation="auto">
	<uses-sdk android:minSdkVersion="21" android:targetSdkVersion="31" />
	<application android:label="App7.Android" android:theme="@style/MainTheme">
		<!-- Google Mobile Ads Activity -->
		<activity android:name="com.google.android.gms.ads.AdActivity" android:configChanges="keyboard|keyboardHidden|orientation|screenLayout|uiMode|screenSize|smallestScreenSize"></activity>
		<meta-data android:name="com.google.android.gms.version" android:value="@integer/google_play_services_version" />
		<meta-data android:name="com.google.android.gms.ads.APPLICATION_ID" android:value="ca-app-pub-4619884321108266~5387843842" />
	</application>
	<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
	<uses-permission android:name="android.permission.INTERNET" />
</manifest>

application안에1한개의 activity와 두개의 meta-data를 넣어주시면 됩니다.

물론 application_id는 자신의 admo app id를 넣어주시면 됩니다.

App 프로젝트 xaml에 광고 추가 

이제 거의 다왔습니다.

App프로젝트에 admob광고를 넣어주시면 됩니다.

<?xml version="1.0" encoding="utf-8" ?>
<ContentPage xmlns="http://xamarin.com/schemas/2014/forms"
             xmlns:x="http://schemas.microsoft.com/winfx/2009/xaml"
             xmlns:local="clr-namespace:App"
             x:Class="App.MainPage">

    <Grid>
        <Grid.RowDefinitions>
            <RowDefinition Height="*" />
            <RowDefinition Height="Auto"/>
        </Grid.RowDefinitions>

        <Label Text="Welcome to Xamarin Forms!"
               VerticalOptions="Center"
               HorizontalOptions="Center" />
        <local:AdMobView HeightRequest="60" AdUnitId="ca-app-pub-4619884321108266/7714586294" Grid.Row="1" />

    </Grid>

</ContentPage>

편의를 위해서 전체 예제페이지 올려드립니다.

우선 xmlns:local="clr-namespace:App" 를 넣어서 아까 만든 클래스에 접근 가능하도록 using을 해주고

 <local:AdMobView HeightRequest="60" AdUnitId="ca-app-pub-4619884321108266/7714586294" Grid.Row="1" />

를 통해서 광고 영역을 잡아주시면 됩니다. 여기서 HeightRequest="60"은 영역의 높이로 이걸 안해주면 광고가 안뜨더라구요 (저만 그러는지 모르겠네요 이것도 엄청 삽질해서 알아냈죠)

 

 

자........이제 빌드해서 해당 광고 페이지를 보시면 광고가 잘 나올거라 생각이 됩니다.

 

안나오시면...이제 삽질의 영역으로 빠질수밖에 없습니다. ㅠㅠ

 

그래서 제가 이것저것했던 방법을 알려드리겠습니다. __)

xamarin android admob 광고 붙이기 - 삽질여정기 - 2

 

 

이 글이 도움이 되셨다면 광고 클릭한번씩 해주시면 감사하겠습니다.! 

더 좋은 글로 보답해 드리겠습니다.

 

 

반응형

댓글