Skip to content

Commit

Permalink
KCP Android 적용 버전 (#1)
Browse files Browse the repository at this point in the history
KcpWebViewClient.java 추가
테스트 / 프로덕션 적용 완료
  • Loading branch information
hyunjun19 authored Jun 22, 2018
1 parent b83dc04 commit 781b0da
Show file tree
Hide file tree
Showing 7 changed files with 153 additions and 11 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -31,6 +31,8 @@
import com.siot.iamportsdk.KakaoWebViewClient;
import com.siot.iamportsdk.NiceWebViewClient;
import com.siot.iamportsdk.PaycoWebViewClient;
import com.siot.iamportsdk.KcpWebViewClient;
import com.siot.iamportsdk.CallbackWebViewClient;

public class IAmPortViewManager extends SimpleViewManager<IAmPortWebView> {

Expand Down Expand Up @@ -115,33 +117,47 @@ public void setPG(IAmPortWebView view, @Nullable String pg) {
Log.i("iamport", "PG - " + pg);

if(pg.equals("nice")){

NiceWebViewClient webViewClient = new NiceWebViewClient(activity, view, new UrlLoadingCallBack() {

@Override
public void shouldOverrideUrlLoadingCallBack(String s) {
Log.i("iamport", "shouldOverrideUrlLoadingCallBack - " + s);
Log.i("iamport", "NiceWebViewClient.shouldOverrideUrlLoadingCallBack - " + s);
emitPaymentEvent(s, s, s);
}

});
view.setWebViewClient(webViewClient);
}
else if(pg.equals("kakao")){

} else if(pg.equals("kakao")){
view.setWebViewClient(new KakaoWebViewClient(activity, view));
}
else if(pg.equals("payco")){
} else if(pg.equals("payco")){
PaycoWebViewClient webViewClient = new PaycoWebViewClient(activity, view, new UrlLoadingCallBack() {

@Override
public void shouldOverrideUrlLoadingCallBack(String s) {
Log.i("iamport", "shouldOverrideUrlLoadingCallBack - " + s);
Log.i("iamport", "PaycoWebViewClient.shouldOverrideUrlLoadingCallBack - " + s);
emitPaymentEvent(s, s, s);
}

});
view.setWebViewClient(webViewClient);
} else if(pg.equals("kcp")){
KcpWebViewClient webViewClient = new KcpWebViewClient(activity, view, new UrlLoadingCallBack() {
@Override
public void shouldOverrideUrlLoadingCallBack(String s) {
Log.i("iamport", "KcpWebViewClient.shouldOverrideUrlLoadingCallBack - " + s);
emitPaymentEvent(s, s, s);
}
});
view.setWebViewClient(webViewClient);
} else {
CallbackWebViewClient defaultWebViewClient = new CallbackWebViewClient(activity, view, new UrlLoadingCallBack() {
@Override
public void shouldOverrideUrlLoadingCallBack(String s) {
Log.i("iamport", "CallbackWebViewClient.shouldOverrideUrlLoadingCallBack - " + s);
emitPaymentEvent(s, s, s);
}
});
view.setWebViewClient(defaultWebViewClient);
}
}

Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,31 @@
package com.siot.iamportsdk;

import android.app.Activity;
import android.util.Log;
import android.webkit.WebView;
import android.webkit.WebViewClient;

import com.jeongjuwon.iamport.UrlLoadingCallBack;

/**
* Created by jang on 2018. 5. 31..
*/

public class CallbackWebViewClient extends WebViewClient {

private Activity activity;
UrlLoadingCallBack mCallBack;

public CallbackWebViewClient(Activity activity, WebView target, UrlLoadingCallBack callBack) {
this.activity = activity;
this.mCallBack = callBack;
}

@Override
public boolean shouldOverrideUrlLoading(WebView view, String url) {
Log.i("iamport", "CallbackWebViewClient.shouldOverrideUrlLoading: " + url);
mCallBack.shouldOverrideUrlLoadingCallBack(url);

return super.shouldOverrideUrlLoading(view, url);
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -20,6 +20,7 @@ public KakaoWebViewClient(Activity activity, WebView target) {

@Override
public boolean shouldOverrideUrlLoading(WebView view, String url) {
Log.i("iamport", "KakaoWebViewClient.shouldOverrideUrlLoading - " + url);

if (!url.startsWith("http://") && !url.startsWith("https://") && !url.startsWith("javascript:")) {
Intent intent = null;
Expand Down
93 changes: 93 additions & 0 deletions android/src/main/java/com/siot/iamportsdk/KcpWebViewClient.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,93 @@
package com.siot.iamportsdk;

import android.app.Activity;
import android.content.ActivityNotFoundException;
import android.content.Intent;
import android.net.Uri;
import android.util.Log;
import android.webkit.WebView;
import android.webkit.WebViewClient;

import java.io.UnsupportedEncodingException;
import java.net.URISyntaxException;
import java.net.URLDecoder;
import java.net.URLEncoder;
import java.util.Arrays;
import java.util.List;
import java.util.Set;

import com.jeongjuwon.iamport.UrlLoadingCallBack;

/**
* from https://github.com/iamport/kcp-android-graddle/blob/master/app/src/main/java/kr/iamport/sdk/KcpWebViewClient.java
* Created by jang on 2017. 9. 14..
*/

public class KcpWebViewClient extends WebViewClient {

private Activity activity;
private WebView target;
final String KTFC_PACKAGE = "com.kftc.bankpay.android";
UrlLoadingCallBack mCallBack;

public KcpWebViewClient(Activity activity, WebView target, UrlLoadingCallBack callBack) {
this.activity = activity;
this.target = target;
this.mCallBack = callBack;
}

@Override
public boolean shouldOverrideUrlLoading(WebView view, String url) {
Log.i("iamport", "KcpWebViewClient.shouldOverrideUrlLoading - " + url);
mCallBack.shouldOverrideUrlLoadingCallBack(url);

if (!url.startsWith("http://") && !url.startsWith("https://") && !url.startsWith("javascript:")) {
Intent intent = null;

try {
intent = Intent.parseUri(url, Intent.URI_INTENT_SCHEME); //IntentURI처리
Uri uri = Uri.parse(intent.getDataString());

activity.startActivity(new Intent(Intent.ACTION_VIEW, uri));
return true;
} catch (URISyntaxException ex) {
return false;
} catch (ActivityNotFoundException e) {
if (intent == null) return false;

if (handleNotFoundPaymentScheme(intent.getScheme())) return true;

String packageName = intent.getPackage();
if (packageName != null) {
activity.startActivity(new Intent(Intent.ACTION_VIEW, Uri.parse("market://details?id=" + packageName)));
return true;
}

return false;
}
}

return false;
}

/**
* @param scheme
* @return 해당 scheme에 대해 처리를 직접 하는지 여부
* <p>
* 결제를 위한 3rd-party 앱이 아직 설치되어있지 않아 ActivityNotFoundException이 발생하는 경우 처리합니다.
* 여기서 handler되지않은 scheme에 대해서는 intent로부터 Package정보 추출이 가능하다면 다음에서 packageName으로 market이동합니다.
*/
protected boolean handleNotFoundPaymentScheme(String scheme) {
//PG사에서 호출하는 url에 package정보가 없어 ActivityNotFoundException이 난 후 market 실행이 안되는 경우
if (PaymentScheme.ISP.equalsIgnoreCase(scheme)) {
activity.startActivity(new Intent(Intent.ACTION_VIEW, Uri.parse("market://details?id=" + PaymentScheme.PACKAGE_ISP)));
return true;
} else if (PaymentScheme.BANKPAY.equalsIgnoreCase(scheme)) {
activity.startActivity(new Intent(Intent.ACTION_VIEW, Uri.parse("market://details?id=" + PaymentScheme.PACKAGE_BANKPAY)));
return true;
}

return false;
}

}
Original file line number Diff line number Diff line change
Expand Up @@ -49,7 +49,7 @@ public void bankPayPostProcess(String bankpayCode, String bankpayValue) {
public boolean shouldOverrideUrlLoading(WebView view, String url) {

// TODO: emit event
Log.i("iamport", "shouldOverrideUrlLoading: " + url);
Log.i("iamport", "NiceWebViewClient.shouldOverrideUrlLoading: " + url);
mCallBack.shouldOverrideUrlLoadingCallBack(url);

if (!url.startsWith("http://") && !url.startsWith("https://") && !url.startsWith("javascript:")) {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -28,7 +28,7 @@ public PaycoWebViewClient(Activity activity, WebView target, UrlLoadingCallBack
public boolean shouldOverrideUrlLoading(WebView view, String url) {

// TODO: emit event
Log.i("iamport", "shouldOverrideUrlLoading: " + url);
Log.i("iamport", "PaycoWebViewClient.shouldOverrideUrlLoading: " + url);
mCallBack.shouldOverrideUrlLoadingCallBack(url);

if (!url.startsWith("http://") && !url.startsWith("https://") && !url.startsWith("javascript:")) {
Expand Down
3 changes: 2 additions & 1 deletion index.android.js
Original file line number Diff line number Diff line change
Expand Up @@ -68,6 +68,7 @@ class IAmPort extends Component {

let params = this.props.params;
const merchant_uid = params.merchant_uid || ('merchant_' + new Date().getTime());
const m_redirect_url = params.m_redirect_url || (params.pg == 'paypal' ? 'https://service.iamport.kr/payments/success' : null);
let HTML = `
<!DOCTYPE html>
<html>
Expand All @@ -86,7 +87,7 @@ class IAmPort extends Component {
pg : '${params.pg}',
pay_method : '${params.pay_method}',
merchant_uid : '${merchant_uid}',
m_redirect_url : '${params.m_redirect_url}',
m_redirect_url : '${m_redirect_url}',
app_scheme : '${params.app_scheme}',
name : '${params.name}',
amount : ${params.amount},
Expand Down

0 comments on commit 781b0da

Please sign in to comment.