unity에서 애드몹 광고 호출 시 이런 에러가 뜰 경우의 해결법이다.

애드몹에서 생성한 광고와 스크립트에서 사용하는 광고 유형이 다를때 뜨는 에러다.

 

애드몹 홈피에서는 "보상형 전면광고"를 만들어두고 스크립트에서는 "보상광고"를 호출하는 클래스를 쓰면 안된다.

RewardedAd.Load() 즉, 보상형 광고 클래스를 호출할거라면, 홈피에서 "Reward보상광고"를 만들어야하는 거다.

 

배너광고를 만들었다면, BannerView 클래스를 호출해야 함

 

홈피에서 만든 광고유형에 맞는 클래스를 이용하면 해결된다.

 

 

 

 

 

유니티같이 큰 파일이 있는 프로젝트를 깃헙에 푸쉬할때 문제가 생기는데,

 

터미널 or CMD 로 해당 프로젝트 폴더로 이동 후,

git config http.postBuffer 524288000

입력.

해보고 문제가 해결된다면 글로벌로 설정

git config --global http.postBuffer 524288000

이후 다시 Push 시도하면 좀 긴 딜레이가 걸리나 십더니 순간 푸쉬에 성공한다.

 

https://stackoverflow.com/questions/15240815/git-fatal-the-remote-end-hung-up-unexpectedly

 

 

해결이 안되는 경우)

github 클라이언트 사용중이라면 Help -> Show log  메뉴로 로그를 확인하다보면 여러가지 에러메시지를 볼수있으니 복붙으로 구글링해보자.

 

 

애드몹 플러그인 적용 후 바로 꺼지는 경우 logcat 으로 에러메세지를 보다가

아래와 같은 메시지가 있는 경우가 있었다. 분명 맞는 광고id 입력했는데?

 

자세히보니 광고id 형식이 다른 것이었다. 

 

앱 ID 형식(뒷부분 물결 문자) : ca-app-pub-3940256099942544~3347511713

유닛 ID  형식 (뒷부분 슬래시 문자): ca-app-pub-3940256099942544/3347511713

 

앱ID: 하나의 앱을 상징 ( 안드로이드 마켓 앱, 게임 1개)

유닛 ID: 그 앱에서 여러개의 광고 유닛이 존재함 ( 전면광고, 보상광고, 배너광고 등..)

 

유니티 애드몹 플러그인 입력할때(인스펙터에서) 는 앱 ID만 입력해야하고,

스크립트 내에서 광고를 열때는 열고자 하는 광고의 유닛ID를 사용해야한다.

 

처음 해보면 헷갈릴수 있다. (나도 잘못할고있다가 글 수정함)

 

 

2023/06/05 17:39:29.760 16702 16702 Error AndroidRuntime * Invalid application ID. Follow instructions here:                          *
2023/06/05 17:39:29.760 16702 16702 Error AndroidRuntime * https://googlemobileadssdk.page.link/admob-android-update-manifest *
2023/06/05 17:39:29.760 16702 16702 Error AndroidRuntime * to find your app ID.                                                       *
2023/06/05 17:39:29.760 16702 16702 Error AndroidRuntime * Google Ad Manager publishers should follow instructions here:              *
2023/06/05 17:39:29.760 16702 16702 Error AndroidRuntime * https://googlemobileadssdk.page.link/ad-manager-android-update-manifest. *

유니티에서 앱 자동업데이트 (AppUpdateManager) 기능 통합하려할때 발생.

 

해결책 (solution)

 

필드 초기화에 딜레이를 주면 된다.

The error has disappeared, when I make some delay by coroutine before the initialization. After the loading of the scene completed.


Ienumberator Init(){
    yield return new Wait(0.5f);

    AppUpdateManager   aum = new AppUpdateManager();
}

 

이 부분을 코루틴으로 wait 딜레이를 줘 씬 로딩완료된 다음 호출하면 에러가 사라진다.

 

 

 

https://developer.android.com/guide/playcore/in-app-updates/unity?hl=ko&authuser=1

 

크래시의 원인: 애드몹은 유니티 메인 Thread가 아닌 별도의 Thread에서 돌아가기 때문에 Callback에서 TMPro 등 유니티 요소를 건드릴 경우 에러가 뜨며 앱이 꺼진다. 유니티 요소는 메인스레드에서만 건드리는게 원칙(?)이기 때문이다.

 

해결책: 보상 받는 admob 의 콜백 또는 AdClosed() 콜백에서 바로 건드리지 말고, 

아래 코드처럼 0.1f 초 딜레이를 준다.

 

// 애드몹 내부의 콜백메서드

void OnAdFullScreenContentClosed(){
      StartCoroutine(GetReward());
}

// 딜레이 줘서 유니티 메인스레드로 합류되도록 
IEnumerate GetReward(){

     yield return new Wait(0.1f);

    // 이후 보상처리 ( 게임 코드)
    popup.gameObject.SetActive(true); // 등등
}

 

 

 

+ Recent posts