
애드몹(AdMob)
Google AdMob: 모바일 앱 수익 창출
인앱 광고를 사용하여 모바일 앱에서 더 많은 수익을 창출하고, 사용이 간편한 도구를 통해 유용한 분석 정보를 얻고 앱을 성장시켜 보세요.
admob.google.com
구글 애드몹은 우리가 어플에서 흔히 보는 광고 서비스를 도와주는 구글의 광고 서비스다.
간단하게 광고를 붙여서 수익을 얻을 수 있다.
우리가 광고를 어플에 재생시킬수 있다고 하더라도, 개인이 광고를 물어오긴 어렵기때문에..
구글을 통해 쉽게 광고 서비스를 붙이는 것이다.
오늘은 테스트만..
광고는 수익이 연결되어있기 때문에,
제대로 연동하려면 어플 출시도 해야하고 출시를 하려면 개발자 등록도 해야하고.. 근본적으로 완성된 어플이 있어야 하기때문에 까다롭다.
그 과정은 나중에 어플이 완성이 되면 테스트해보면 되기 때문에 따로 애드몹에 가입하고 어플을 등록하는 과정은 생략했다.
(굳이 등록하지 않더라도 테스트는 가능하다.)
직접 출시하고 애드몹에 어플을 등록하면 앱ID라는게 주어지는데,
실제로 출시도 안하고 등록만 한다음 그 앱ID를 사용하면 계정이 정지될 수 있다고 한다.
대신 테스트용 앱ID를 제공하니 우리는 저 앱ID를 사용하면 된다.
유니티용 구글 애드몹 SDK 받기
Releases · googleads/googleads-mobile-unity (github.com)
Releases · googleads/googleads-mobile-unity
Official Unity Plugin for the Google Mobile Ads SDK - googleads/googleads-mobile-unity
github.com
깃허브 링크로 들어가서 유니티용 구글 애드몹 SDK를 받아준다.
난 겁도없이 2주전에 올라온 최신버전을 받았다.
다운받은 SDK 유니티로 임포트
다운받은 유니티 패키지 파일을 임포트 해준다.
받자마자 Google.IOSResolver 어쩌구.. 에러가 뜨길래
Validate References 항목을 체크 해제해주니 에러가 없어졌다.
빌드 세팅으로 들어가서 안드로이드로 바꿔주면, 창이 하나 뜬다.
Enable을 눌러주면 된다.
(사진을 못찍어서 스택 오버플로우에서 퍼왔다.)
이렇게하면 사전 세팅은 끝이다.
보상형 광고 스크립트 작업
애드몹 광고 종류
애드몹의 광고 종류는 여러가지가 있다.
난 그중에서 일반적으로 사용하는 버튼을 눌러 광고를 보면 보상을 지급하는.. 그런 형식을 바랬기 때문에 보상형 광고로 테스트를 했다.
기본 정보
using GoogleMobileAds.Api;
첫번째로 스크립트를 만들어서 위의 네임스페이스를 추가해주고,
private RewardedAd rewardedAd;
public int gold;
public Text gold_txt;
public GameObject messageBox;
테스트를위해 위의 변수들을 선언해주었다.
RewardedAd 클래스는 광고의 로드와 재생까지 대부분을 담당하는 클래스다.
애드몹 가이드 확인하기
보상형 광고 | Unity | Google Developers
보상형 광고 | Unity | Google Developers
이 페이지는 Cloud Translation API를 통해 번역되었습니다. Switch to English 보상형 광고 컬렉션을 사용해 정리하기 내 환경설정을 기준으로 콘텐츠를 저장하고 분류하세요. 보상형 광고는 상호작용하
developers.google.com
이곳에서 유니티 보상형광고의 가이드를 볼 수있는데...
공식 사이트의 가이드를 보고 따라 쳤더니?
최신 버전이라 그런지 RewardedAd.Load()를 사용하라고 한다..
또 LoadAd(AdRequest request),Show() 함수도 다른 함수를 사용하라고 나온다.
검색만 해봐도 그냥 위의 가이드를 따라한 자료들만 나오기에 그냥 혼자 스크립트를 짜봤다.
광고 초기화 함수
광고 초기화를 위해서 우리는 RewardedAd.Load()를 확인해봐야 한다.
앱 ID, AdRequest , 로드 콜백 함수를 매개변수로 받는다.
콜백 함수가 널이면 에러를 뱉어내고,
로드에 성공하면 콜백 함수의 매개변수로 있는 RewardedAd형 인스턴스를 새로 생성하고,
반대로 실패하면 LoadAdError 형 인스턴스를 생성한다.
광고 로드에 성공, 실패를 알고싶으면 저 값이 널인지 널이 아닌지 체크만 하면 된다.
//광고 초기화 함수
public void InitAds()
{
string adUnitId;
#if UNITY_ANDROID
adUnitId = "ca-app-pub-3940256099942544/5224354917";
#elif UNITY_IPHONE
adUnitId = "ca-app-pub-3940256099942544/1712485313";
#else
adUnitId = "unexpected_platform";
#endif
RewardedAd.Load(adUnitId, new AdRequest.Builder().Build(), LoadCallback);
}
//로드 콜백 함수
public void LoadCallback(RewardedAd rewardedAd, LoadAdError loadAdError)
{
if(rewardedAd != null)
{
this.rewardedAd = rewardedAd;
Debug.Log("로드성공");
}
else
{
Debug.Log(loadAdError.GetMessage());
}
}
1. 광고를 초기화하고 로드하기위한 InitAds 함수를 만들었다.
2.
첫번째로 앱ID를 받기위한 adUnitID 변수를 지역변수로 선언해서
안드로이드,아이폰마다 앱ID를 다르게 설정하기위한 코드를 작성해주었다.
(작성한 앱ID는 테스트 앱ID이다.)
3.
RewardedAd.Load 함수를 사용해서 로드를 시켜주는데,
하단에 LoadCallback 함수도 꼭 만들어주어서 Load함수의 인자값으로 넘겨주어야한다.
위에 언급했듯이 콜백 함수를 null로 입력하면 에러를 낸다.
4.
rewardedAd가 null이 아니라면 로드에 성공했다는 뜻이기 때문에,
아까전에 변수로 선언해둔 rewardedAd에 콜백받은 변수를 넣어주었다.
반대로 rewardedAd가 null이라면 에러 메세지를 받게 했다.
광고 띄우기
이제 초기화와 로드는 끝났고, 광고를 보여주기만 하면 된다.
광고를 보여주기위한 Show 함수를 살펴보면 매개변수가 없는 Show는 더이상 쓰지 말라고 한다.
우리는 아래의 Show함수를 사용하면 되는데, Reward를 매개변수로 받는 콜백함수를 넘겨주면 된다.
//광고 보여주는 함수
public void ShowAds()
{
if(rewardedAd.CanShowAd())
{
rewardedAd.Show(GetReward);
}
else
{
Debug.Log("광고 재생 실패");
}
}
//보상 함수
public void GetReward(Reward reward)
{
messageBox.SetActive(true);
gold += (int)reward.Amount;
gold_txt.text = "골드 : "+gold.ToString();
InitAds();
}
아까 넘겨받은 rewardedAd 변수를 활용해서 CanShowAd 함수로 광고 재생이 가능한지 체크하고,
가능하다면 Show 함수를 호출하고 인자값으로는 보상 함수를 넘겨주었다.
보상함수는 그냥 10골드를 획득했다는 메세지와 함께 골드 텍스트가 갱신되게 하였다.
맨 아래에 광고 초기화를 다시 해준 이유는 한번 광고를 보고나면 rewardedAd의 값이 Null이 된다.
즉, 광고를 볼때마다 로드를 해주어야 되는 것 같다.
전체 코드
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.UI;
using GoogleMobileAds.Api;
public class TestAdmob : MonoBehaviour
{
private RewardedAd rewardedAd;
public int gold;
public Text gold_txt;
public GameObject messageBox;
public void Start()
{
InitAds();
}
//광고 초기화 함수
public void InitAds()
{
string adUnitId;
#if UNITY_ANDROID
adUnitId = "ca-app-pub-3940256099942544/5224354917";
#elif UNITY_IPHONE
adUnitId = "ca-app-pub-3940256099942544/1712485313";
#else
adUnitId = "unexpected_platform";
#endif
RewardedAd.Load(adUnitId, new AdRequest.Builder().Build(), LoadCallback);
}
//로드 콜백 함수
public void LoadCallback(RewardedAd rewardedAd, LoadAdError loadAdError)
{
if(rewardedAd != null)
{
this.rewardedAd = rewardedAd;
Debug.Log("로드성공");
}
else
{
Debug.Log(loadAdError.GetMessage());
}
}
//광고 보여주는 함수
public void ShowAds()
{
if(rewardedAd.CanShowAd())
{
rewardedAd.Show(GetReward);
}
else
{
Debug.Log("광고 재생 실패");
}
}
//보상 함수
public void GetReward(Reward reward)
{
messageBox.SetActive(true);
gold += (int)reward.Amount;
gold_txt.text = "골드 : "+gold.ToString();
InitAds();
}
}
Reward ?
보상으로 받는 Reward에 있는 Type과 Amout가 대체 뭐고 어디서 오는건지 한참을 고민했다.
생각해보니 전에 어플을 임의로 등록한적이 있었는데,
그 과정에 광고 리워드 설정이 있는걸 까먹었었다.
Reward의 Type과 Amount는 미리 설정해둔 리워드 설정안에 있는 값을 말하는 것이다.
근데 굳이 사용하지 않아도 될것같다.
테스트 해보기
아주 잘 나온다.
나중에 어플을 제대로 완성하게 되면, 개발자 등록도하고.. 붙여서 수익창출을 도전해봐야겠다.
'게임 엔진 > Unity' 카테고리의 다른 글
유니티 로컬라이제이션 기능 사용해보기 (6) | 2023.02.26 |
---|---|
유니티 노치, 펀치홀 디자인 대응하기 (0) | 2023.02.26 |
유니티 에셋공부 <Feel> - (1) (0) | 2023.01.18 |
유니티 에셋공부 <DOTween Pro> - (3) (0) | 2023.01.18 |
유니티 에셋공부 <DOTween Pro> - (2) (0) | 2023.01.17 |
포스팅이 좋았다면 "좋아요❤️" 또는 "구독👍🏻" 해주세요!