이 문서에서는 안드로이드에서 Back Key 를 눌러 앱을 종료하려는 시점에, '엔딩 인터스티셜' 광고가 뜨도록 하는 방법을 안내합니다.
최신 SDK (v1.0.34) 로 업데이트를 해주세요 : https://github.com/valuepotion/valuepotion-android-sdk/blob/master/SDK/valuepotion.jar
메인 액티비티에 가서 onBackPressed 함수를 아래와 같이 Override 해야 합니다.
@Override
public void onBackPressed() {
// super.onBackPressed();
ValuePotion.getInstance().onBackPressed(this);
}
기존의 super.onBackPressed();
는 주석 처리 하고 ValuePotion.getInstance().onBackPressed(this);
만 실행되도록 해야 합니다.
그러면 유저가 Back Key 를 눌렀을 때, 앱은 종료되지 않은 채로 밸류포션 서버에 엔딩 인터스티셜 광고를 요청하게 되고,
- 광고를 응답 받았으면 엔딩 인터스티셜을 노출합니다.
- 광고가 없는 상태라면 그냥 바로 앱이 종료됩니다.
A> 한 유저에게 동일한 광고가 반복적으로 보이게 되면 피로도가 증가하여 광고 효율이 떨어지게 됩니다. 이를 방지하기 위해 밸류포션에서는 각 유저에 대해 광고 노출양을 조절하고 있고 이를 Frequency Capping 이라 부릅니다. 한 유저가 일정 시간 동안 일정 횟수 이상 동일한 광고를 보았다면, 그 이후부터는 그 광고가 해당 유저에게 노출되지 않게 됩니다.
지금까지 해 본 방법으로는, 유저가 Back Key 를 누른 후에야 광고를 요청해서 받아오고 뷰를 그리게 됩니다.
하지만 그보다 좀더 즉각적으로 광고가 뜨기 원하시면 적절한 타이밍에 미리 광고를 캐싱할 수 있습니다.
ValuePotion.getInstance().cacheEndingInterstitial(this);
위 함수를 ValuePotion.init(...)
을 호출한 이후의 어떠한 시점에든 호출하셔도 상관없습니다. onCreate()
함수에 놓으셔도 되고, 그 이후 적절한 타이밍에 삽입해주세요.
엔딩 인터스티셜을 보고 유저가 "종료" 버튼을 눌렀을 때 바로 앱이 꺼지는 게 아니라,
다른 부가적인 처리를 넣고 싶으시다면,
ValuePotion.getInstance().setEndingInterstitialHandler(new ValuePotion.EndingInterstitialHandler() {
...
@Override
public boolean appClose() {
Toast.makeText(activity, "앱을 종료합니다.", Toast.LENGTH_SHORT).show();
return false;
}
});
위와 같이 setEndingInterstitialHandler(...)
함수를 통해 부가적인 코드를 삽입하실 수 있습니다.
이 때 appClose()
함수가 false
를 리턴하면 앱이 자동적으로 종료됩니다. 하지만, 앱 종료마저 직접 컨트롤 하기 원하시면 true
를 리턴하세요.
엔딩 인터스티셜로 노출할 광고가 없는 경우에는 앱이 바로 종료되는데,
다른 부가적인 처리를 하고 싶으시다면,
ValuePotion.getInstance().setEndingInterstitialHandler(new ValuePotion.EndingInterstitialHandler() {
@Override
public boolean adNotFound() {
showDialog("앱을 종료하시겠습니까?", new Runnable() {
@Override
public void run() {
Toast.makeText(activity, "앱을 종료합니다.", Toast.LENGTH_SHORT).show();
finish();
}
});
return true;
}
...
});
위와 같이 adNotFound()
함수에 위와 같이 직접 종료 다이얼로그를 띄울 수도 있습니다.
adNotFound()
함수 역시 false
를 리턴하면 앱이 바로 종료 되며, 위의 예와 같이 앱 종료를 직접 컨트롤 하시려면 true
를 리턴해주세요.