제가 광고 라이브러리는 사용해 보질 않아서 잘은 모르겠지만, 직잠이 가는 부분은 MobileAds를 초기화하는 시점에 문제가 있을 것으로 보입니다. MobileAds의 문서를 보면
public static void initialize (Context context,OnInitializationCompleteListener listener)
Call this method as early as possible after the app launches to reduce latency on the session's first ad request.
초기화에 시간이 걸릴 수 있기 때문에, 가능한 최대한 일찍 초기화를 하라는 내용인데. MobileAds.initialize가 비동기적으로로 동작하는 걸로 보이고, InterstitialAd.load를 호출하는 시점이 바로 다음이므로, 이상태에서는 초기화가 안 끝난 상태이므로 minterstitialAd가 아직 초기화가 되지 않은 것으로 보입니다. 로그를 찍어 보시거나 디버깅을 해보시면 금방 확인할 수 있을 것 같습니다.
해결책으로는 Application class를 하나 만드셔서 여기에서 초기화를 하시는 것이 좋을 것 같습니다. 보통 이런 종류의 라이브러리는 Application 클래스에서 초기화를 합니다.
Application 클래스를 상속받은 다음, onCreate 메소드 안에서 초기화 코드를 실행하세요.
public class MyApp extends Application {
@Override
public void onCreate() {
super.onCreate()
initializeAd();
}
private void initializeAd() {
MobileAds.initialize(this);
}
}
AndroidManifest.xml에 MyApp을 지정해 주세요.
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
package="com.mpark.mssunshine">
<uses-permission android:name="android.permission.INTERNET" />
...
<application
android:name=".MyApp"
...
tools:ignore="AllowBackup,UnusedAttribute">
<activity
...
</activity>
</application>
</manifest>
그리고 두번째 질문은 틀린 부분은 없지만, 아래처럼 하실 수도 있습니다.
minterstitialAd.show(requireActivity());