원래 유니티 애즈 sdk 3.5.1을 사용했는 데
플레이스토어에서 sdk 업그레이드 안하면 업데이트 게시가 거부된다고 해서 sdk를 제일 최신인 4.3.0으로 업데이트 해줬다.
문제는 iunityadslistener인터페이스를 사용하는 부분에서 에러가 나는 것이였다.
error CS0246: The type or namespace name 'IUnityAdsListener' could not be found (are you missing a using directive or an assembly reference?)
계속 이 에러가 떠서 열심히 찾아봤지만 딱히 도움이 되는 글은 없었다.
그러던 중 IUnityAdsListener을 사용하지 않고
IUnityAdsInitializationListener,IUnityAdsShowListener, IUnityAdsLoadListener인터페이스를 사용해
애즈를 게시하는 글을 찾아서 시도했다.
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.Advertisements;
public class UnityAdsInitial : MonoBehaviour , IUnityAdsInitializationListener
{
private const string android_game_id = "4594095";
private const string rewarded_video_id = "Rewarded_Android";
//initialize 성공시
public void OnInitializationComplete()
{
Debug.Log("initialize complete");
}
//initialize 실패시
public void OnInitializationFailed(UnityAdsInitializationError error, string message)
{
Debug.LogFormat("oninitializationFailed : error: {0}, message: {1}", error, message);
}
private void Awake()
{
Advertisement.Initialize(android_game_id,false,this);
}
}
using System;
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.UI;
using UnityEngine.Events;
using UnityEngine.Advertisements;
public class unityRewardeAdsManager : MonoBehaviour, IUnityAdsLoadListener, IUnityAdsShowListener
{
private const string android_game_id = "4594095";
private const string ios_game_id = "4594094";
private const string rewarded_video_id = "Rewarded_Android";
private const string video_id = "video";
coinManager cManager;
public Button rewardButton;
private void Start()
{
cManager = GameObject.Find("coinManager").GetComponent<coinManager>();
//#if UNITY_ANDROID
// Advertisement.Initialize(android_game_id);
//#elif UNITY_IOS
// Advertisement.Initialize(ios_game_id);
//#endif
}
//load는 initialize다음에 되어야함!!
private void OnEnable()
{
load();
}
//광고 로드 하는 함수
public void load()
{
Advertisement.Load(rewarded_video_id,this);
}
//광고 보여주는 함수
public void show()
{
Advertisement.Show(rewarded_video_id,this);
}
//광고 로드 됬을때
public void OnUnityAdsAdLoaded(string placementId)
{
Debug.Log("OnUnityAdsAdLoaded" + placementId);
}
//광고 로드 실패시
public void OnUnityAdsFailedToLoad(string placementId, UnityAdsLoadError error, string message)
{
Debug.Log("OnUnityAdsFailedToLoaded" + placementId + error+message);
}
//광고 show 실패시
public void OnUnityAdsShowFailure(string placementId, UnityAdsShowError error, string message)
{
Debug.LogFormat("onunityAdsShowFailure: {0}, {1},{2}",placementId,error,message);
}
// 광고 show 시작시
public void OnUnityAdsShowStart(string placementId)
{
Debug.Log("OnUnityAdsShowStart: " + placementId);
}
//광고 show클릭되었을때
public void OnUnityAdsShowClick(string placementId)
{
Debug.Log("OnUnityAdsShowClick: " + placementId);
load();
}
//광고 다 봤을때
public void OnUnityAdsShowComplete(string placementId, UnityAdsShowCompletionState showCompletionState)
{
Debug.Log("OnUnityAdsShowComplete: " + placementId+ showCompletionState.ToString());
//광고 다 봤을 때, 끝까지 다 본 케이스면
if (placementId.Equals(rewarded_video_id) && showCompletionState.ToString().Equals(UnityAdsCompletionState.COMPLETED))
{
//다봤을때의 보상
cManager.adRewards("Finished");
//광고 다시 load
load();
}
//광고 끝났을때 중간에 넘긴 케이스면
else if(placementId.Equals(rewarded_video_id)&& showCompletionState.ToString().Equals(UnityAdsCompletionState.SKIPPED))
{
//스킵했을때의 함수처리
cManager.adRewards("Skipped");
//광고 다시 load
load();
}
else
{
load();
}
}
}
광고 load는 광고 initialize함수 다음에 실행 되야함!
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.Advertisements;
using UnityEngine.UI;
public class Banner : MonoBehaviour
{
private const string adUnitId = "Banner_Android";
void Start()
{
Advertisement.Banner.SetPosition(BannerPosition.BOTTOM_CENTER);
}
void onEnable()
{
load();
}
private void Load()
{
BannerLoadOptions options = new BannerLoadOptions
{
loadCallback = OnBannerLoaded,
errorCallback = OnBannerError
};
Advertisement.Banner.Load(adUnitId, options);
}
void OnBannerLoaded()
{
Debug.Log("Banner loaded");
}
void OnBannerError(string message)
{
Debug.Log($"Banner Error: {message}");
}
void Show()
{
// Set up options to notify the SDK of show events:
BannerOptions options = new BannerOptions
{
clickCallback = OnBannerClicked,
hideCallback = OnBannerHidden,
showCallback = OnBannerShown
};
Advertisement.Banner.Show(adUnitId, options);
}
void OnBannerClicked() { }
void OnBannerShown() { }
void OnBannerHidden() { }
void Hide()
{
Advertisement.Banner.Hide();
}
}