본 가이드는 스크립트 클릭 시, 리워드 지급을 위한 연동 방식을 기술합니다.

애드팝콘 SSP에서 제공하는 스크립트만을 노출 시키기 위한 웹뷰를 구성 한 뒤, 아래와 같이 설정하여 해당 웹뷰에서의 클릭을 체크 후 리워드를 지급합니다.

반드시 다른 웹뷰와 분리하여 웹뷰를 생성해야만 광고에 대한 클릭 처리가 정확히 됩니다.IframeOptions

안드로이드

  1. WebView 추가(오직 RCPC 광고만을 위한 WebView)
<?xml version="1.0" encoding="utf-8"?>
<FrameLayout xmlns:android="<http://schemas.android.com/apk/res/android>"
    android:layout_width="match_parent"
    android:layout_height="match_parent">
		<ScrollView
			android:layout_width="match_parent"
			android:layout_height="match_parent"
			android:scrollbars="none">
			...
			<WebView 	
					android:layout_width="match_parent"
					android:layout_height="100dp"
					android:id="@+id/rcpc_webview"/>
			...
		</ScrollView>
</FrameLayout>
  1. WebView 세팅 및 랜딩
private WebView webView;
private boolean mIsClicked = false;

private void adSetting()
{
		initializeWebViewSetting();
		loadScript();
}
private void initializeWebViewSetting()
{			
		webView = (WebView)findViewById(R.id.rcpc_webview);
		webView.getSettings().setJavaScriptEnabled(true);
		webView.setWebViewClient(mWebViewClient);
		webView.setOnTouchListener(mOnTouchListener);
		webView.getSettings().setDefaultTextEncodingName("UTF-8");
		webView.getSettings().setAllowFileAccess(true);
		webView.getSettings().setJavaScriptCanOpenWindowsAutomatically(true);
		webView.getSettings().setDomStorageEnabled(true);
		webView.getSettings().setDatabaseEnabled(true);
}
<iframe id="adpopcorn-ads" src="<https://ssp.igaw.io/sdk/html/mediation.html?placementId{영역명}&uid=>{ADID 또는 IDFA}" width="{WIDTH}" height="{HEIGHT}" marginwidth="0" marginheight="0" frameborder="0" scrolling="no"></iframe>
private void loadScript()
{   
		String adid = getGoogleAdvertisingId();
		String script = "<iframe id="adpopcorn-ads" src="<https://ssp.igaw.io/sdk/html/mediation.html?placementId={영역명}&uid={uid}>" 
					width="{WIDTH}" height="{HEIGHT}" marginwidth="0" marginheight="0" frameborder="0" scrolling="no"></iframe>";
		script = script.replace("{uid}", adid);
		webView.loadData(script, "text/html", "UTF-8");
}

단, script의 uid 값에는 ADID 혹은 IDFA를 전달 할 수 있는 경우 치환하여 전달해 주시면 됩니다.

ADID를 가져오는 방법은 아래의 링크를 참고해 주시기 바랍니다.

사용자가 재설정할 수 있는 광고 ID 가져오기  |  Android 개발자  |  Android Developers

private WebViewClient mWebViewClient = new WebViewClient(){
		@Override
		public boolean shouldOverrideUrlLoading(final WebView view, WebResourceRequest request) {
				try {
					String url;
					if (Build.VERSION.SDK_INT >= 21) {
						url = request.getUrl().toString();
					} else {
						url = view.getUrl();
					}
					return urlLoading(view, url);
				} catch (Exception e) {
					e.printStackTrace();
					return false;
				}
		}

		@Override
		public boolean shouldOverrideUrlLoading(final WebView view, final String url) {
				try {
					return urlLoading(view, url);
				} catch (Exception e) {
					e.printStackTrace();
					return false;
				}
		}

		@Override
		public void onPageFinished(final WebView view, String url) {
				super.onPageFinished(view, url);
				mIsClicked = false;
		}

		private boolean urlLoading(WebView view, String url) {			
			if (mIsClicked && url != null) {
					mIsClicked = false;
					
					**// RCPC 리워드 지급 or 이미 지급 된 경우 바로 랜딩**

					Intent intent = new Intent(Intent.ACTION_VIEW, Uri.parse(url));
					intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
					context.startActivity(intent);
					return true;
			} else {
					view.loadUrl(url);
					return false;
			}
		}
	};

private View.OnTouchListener mOnTouchListener = new View.OnTouchListener() {
		private float startX;
		private float startY;
		private float totalScrollY = 0;
		private int CLICK_ACTION_THRESHOLD = 200;
		private int SCROLL_ACTION_THRESHOLD = 1000;

		@Override
		public boolean onTouch(View v, MotionEvent event) {
			switch (event.getAction()) {
				case MotionEvent.ACTION_DOWN:
					startX = event.getX();
					startY = event.getY();
					break;
				case MotionEvent.ACTION_UP:
					float endX = event.getX();
					float endY = event.getY();
					if (isAClick(startX, endX, startY, endY)) {
						mIsClicked = true;
					}
					break;
			}
			return false;
		}

		private boolean isAClick(float startX, float endX, float startY, float endY) {
			float differenceX = Math.abs(startX - endX);
			float differenceY = Math.abs(startY - endY);
			if (differenceX > CLICK_ACTION_THRESHOLD/* =5 */ || differenceY > CLICK_ACTION_THRESHOLD) {
				return false;
			}
			return true;
		}
	};