[Unity] 유니티 애즈 에러 error CS0246: The type or namespace name 'IUnityAdsListener' could not be found (are you missing a using directive or an assembly reference?)

jh Seo·2022년 9월 2일
0

유니티

목록 보기
16/42

개요

원래 유니티 애즈 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인터페이스를 사용해
애즈를 게시하는 글을 찾아서 시도했다.

광고 initialize하는 코드

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);
    }

}
  • IUnityAdsInitializationListener인터페이스에서 필수로 구현해야하는 함수는
    • public void OnInitializationComplete()
    • public void OnInitializationFailed(UnityAdsInitializationError error, string message)
      이다.

광고 Load,Show하는 코드

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();
        }

    }
}
  • IUnityAdsLoadListener 인터페이스에서 구현해야하는 함수는
    • void OnUnityAdsAdLoaded(string placementId);
    • void OnUnityAdsFailedToLoad(string placementId, UnityAdsLoadError error, string message);
  • IUnityAdsShowListener 인터페이스에서 구현해야 하는 함수는
    • void OnUnityAdsShowClick(string placementId);
    • void OnUnityAdsShowComplete(string placementId, UnityAdsShowCompletionState showCompletionState);
    • void OnUnityAdsShowFailure(string placementId, UnityAdsShowError error, string message);
    • void OnUnityAdsShowStart(string placementId);

광고 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();
    }

}

레퍼런스

링크

profile
코딩 창고!

0개의 댓글