> For the complete documentation index, see [llms.txt](https://adpopcornssp.gitbook.io/ssp-sdk/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://adpopcornssp.gitbook.io/ssp-sdk/undefined-2/extra-guide/reward-banner/reward-banner-android.md).

# Reward Banner 스크립트 Android

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

{% hint style="danger" %} <mark style="color:red;">반드시 다른 웹뷰와 분리하여 웹뷰를 생성해야만 광고에 대한 클릭 처리가 정확히 됩니다.</mark>
{% endhint %}

## 1. WebView 추가

오직 Reward Banner 광고 만을 위한 WebView를 추가합니다.

{% code title="XML" %}

```xml
<?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>
```

{% endcode %}

## 2. WebView 세팅 및 랜딩

### 1) 광고 설정 순서

{% code title="JAVA" %}

```java
private WebView webView;
private boolean mIsClicked = false;

private void adSetting()
{
	initializeWebViewSetting();
	loadScript();
}
```

{% endcode %}

### 2) WebView 관련 설정

webView 관련 설정을 아래와 같이 진행합니다. (<mark style="color:red;">`initializeWebViewSetting`</mark>)

{% code title="JAVA" %}

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

{% endcode %}

### 3) script 로드

애드팝콘 사업실로 부터 전달받은 아래 형태의 script를 webview에 로드합니다.(<mark style="color:red;">`loadScript`</mark>)

{% code title="HTML" %}

```html
<iframe class="adpopcorn-ads" src="https://ssp.igaw.io/sdk/html/mediation_v2.html?{파라미터}" width="{WIDTH}" height="{HEIGHT}" marginwidth="0" marginheight="0" frameborder="0" scrolling="no"></iframe>
```

{% endcode %}

{% code title="JAVA" %}

```java
private void loadScript()
{   
	String adid = getGoogleAdvertisingId();
	String script = "<iframe id="adpopcorn-ads" src="https://ssp.igaw.io/sdk/html/mediation.html_v2?{파라미터}" 
		width="{WIDTH}" height="{HEIGHT}" marginwidth="0" marginheight="0" frameborder="0" scrolling="no"></iframe>";
	script = script.replace("{adid}", adid);
	webView.loadData(script, "text/html", "UTF-8");
}

```

{% endcode %}

* **안드로이드 파라미터 정의**

{% hint style="info" %}
광고 물량은 전달 가능한 파라미터 범위에 따라 달라질 수 있습니다. 가능한 범위 내 최대한 전달해주시길 바랍니다.
{% endhint %}

<table><thead><tr><th width="239">Parameter</th><th width="61">필수</th><th width="95">Type</th><th width="90">Default</th><th>설명</th></tr></thead><tbody><tr><td>app_key</td><td><mark style="color:red;">Y</mark></td><td>string</td><td></td><td>매체용으로 발급된 광고 앱 키</td></tr><tr><td>placement_id</td><td><mark style="color:red;">Y</mark></td><td>string</td><td></td><td>매체용으로 발급된 광고 지면 아이디</td></tr><tr><td>adid</td><td><mark style="color:red;">Y</mark></td><td>string</td><td></td><td>Android 광고 식별자</td></tr><tr><td>network</td><td>N</td><td>string</td><td>""</td><td>네트워크 (mobile or wifi)</td></tr><tr><td>carrier</td><td>N</td><td>string</td><td>""</td><td>통신사</td></tr><tr><td>model</td><td>N</td><td>string</td><td>""</td><td>모델명</td></tr><tr><td>manufacturer</td><td>N</td><td>string</td><td>""</td><td>제조사</td></tr><tr><td>os_version</td><td>N</td><td>string</td><td>"0"</td><td>플랫폼 OS 버전</td></tr><tr><td>skip_mediation</td><td>N</td><td>boolean</td><td>false</td><td>미디에이션 광고 skip 여부<br>(true 전달시, 기본 설정 광고 노출)</td></tr></tbody></table>

단, script의 adid 매크로 값에는 ADID 값을 치환하여 전달해 주시면 됩니다.

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

{% hint style="info" %}
광고 ID 가져오기

<https://developer.android.com/training/articles/ad-id?hl=ko#java>
{% endhint %}

### 4) 클릭 발생 시 리워드 지급

해당 webview에서 클릭 발생 시, 클릭을 캐치하여 리워드 지급 후, 랜딩 주소로 랜딩 시켜줍니다.

{% code title="JAVA" %}

```java
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;
	}
};

```

{% endcode %}
