Skip to content

Commit f022dc3

Browse files
author
ehowlsla
committed
inicis webapp sample update
1 parent cc60320 commit f022dc3

File tree

4 files changed

+69
-201
lines changed

4 files changed

+69
-201
lines changed

bootpay/src/main/java/kr/co/bootpay/BootpayWebView.java

Lines changed: 13 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -83,7 +83,6 @@ public void handleMessage(Message msg) {
8383

8484
private EventListener listener;
8585

86-
// private Dialog dialog;
8786

8887
public BootpayWebView(Context context) {
8988
this(context, null);
@@ -110,6 +109,7 @@ public BootpayWebView(Context context, AttributeSet attrs, int defStyleAttr) {
110109
@Override
111110
public void onPageFinished(WebView view, String url) {
112111
super.onPageFinished(view, url);
112+
if (request == null) return;
113113
if (!isLoaded) {
114114
isLoaded = true;
115115
setDevice();
@@ -459,6 +459,7 @@ private void loadParams(String... script) {
459459
@SuppressLint("setJavaScriptEnabled")
460460
private void setting(Context context) {
461461
setWebChromeClient(new Client());
462+
// if(javascriptInterfaceObject == null) addJavascriptInterface(new AndroidBridge(), "Android");
462463
addJavascriptInterface(new AndroidBridge(), "Android");
463464
CookieManager.getInstance().setAcceptCookie(true);
464465
WebSettings s = getSettings();
@@ -565,6 +566,7 @@ private void onDoneHandled(String data) {
565566

566567
private class Client extends WebChromeClient {
567568

569+
@SuppressLint("JavascriptInterface")
568570
@Override
569571
public boolean onCreateWindow(WebView view, boolean isDialog, boolean isUserGesture, Message resultMsg) {
570572
WebView.HitTestResult result = view.getHitTestResult();
@@ -574,9 +576,16 @@ public boolean onCreateWindow(WebView view, boolean isDialog, boolean isUserGest
574576
start(view, createFrom(url));
575577
} else if (resultMsg != null) {
576578
BootpayWebView newWindow = new BootpayWebView(view.getContext());
577-
newWindow.setRequest(request)
578-
.setDialog(dialog)
579-
.setOnResponseListener(listener);
579+
if(request != null) {
580+
newWindow.setRequest(request)
581+
.setDialog(dialog)
582+
.setOnResponseListener(listener);
583+
} else if(listener != null){
584+
newWindow.setOnResponseListener(listener);
585+
}
586+
// if(javascriptInterfaceObject != null)
587+
// newWindow.setJavascriptInterface(javascriptInterfaceObject, javascriptInterfaceName);
588+
580589

581590
addView(newWindow);
582591
WebView.WebViewTransport tr = (WebView.WebViewTransport) resultMsg.obj;

sample/src/main/java/bootpay/co/kr/samplepayment/NativeActivity.java

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -78,6 +78,8 @@ public void onClick_request(View v) {
7878
.setApplicationId(application_id) // 해당 프로젝트(안드로이드)의 application id 값
7979
.setPG(PG.INICIS) // 결제할 PG 사
8080
.setMethod(Method.BANK)
81+
.setBootExtra(bootExtra)
82+
.setBootUser(bootUser)
8183
// .setUserPhone("010-1234-5678") // 구매자 전화번호
8284
.setUX(UX.PG_DIALOG)
8385
// .setMethod(Method.CARD) // 결제수단

sample/src/main/java/bootpay/co/kr/samplepayment/WebAppActivity.java

Lines changed: 45 additions & 193 deletions
Original file line numberDiff line numberDiff line change
@@ -22,11 +22,15 @@
2222
import java.net.URISyntaxException;
2323

2424
import kr.co.bootpay.Bootpay;
25+
import kr.co.bootpay.BootpayWebView;
26+
import kr.co.bootpay.listener.EventListener;
2527

2628

27-
public class WebAppActivity extends Activity implements WebAppBridgeInterface {
28-
WebView webview;
29-
final String url = "https://test-shop.bootpay.co.kr";
29+
public class WebAppActivity extends Activity {
30+
// WebView webview;
31+
BootpayWebView webview;
32+
final String url = "https://g-cdn.bootpay.co.kr/test/payment/index.html";
33+
// final String url = "https://test-shop.bootpay.co.kr";
3034

3135

3236

@@ -38,42 +42,51 @@ public class WebAppActivity extends Activity implements WebAppBridgeInterface {
3842
protected void onCreate(@Nullable Bundle savedInstanceState) {
3943
super.onCreate(savedInstanceState);
4044
setContentView(R.layout.activity_webapp);
45+
4146
webview = findViewById(R.id.webview);
42-
webview.setWebViewClient(new BWebviewClient());
43-
44-
webview.setWebChromeClient(new BChromeClient());
45-
webview.addJavascriptInterface(new WebAppBridge(this), "Android");
46-
CookieManager.getInstance().setAcceptCookie(true);
47-
webview.getSettings().setJavaScriptEnabled(true);
48-
webview.getSettings().setDomStorageEnabled(true);
49-
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) {
50-
webview.getSettings().setMixedContentMode(WebSettings.MIXED_CONTENT_ALWAYS_ALLOW);
51-
CookieManager.getInstance().setAcceptThirdPartyCookies(webview, true);
52-
}
53-
54-
webview.setWebChromeClient(new WebChromeClient() {
47+
webview.setOnResponseListener(new EventListener() {
5548
@Override
56-
public boolean onJsAlert(WebView view, String url, String message, JsResult result) {
57-
return super.onJsAlert(view, url, message, result);
49+
public void onError(String data) {
50+
System.out.println("bootpay error");
51+
System.out.println(data);
5852
}
59-
});
60-
webview.loadUrl(url);
61-
}
6253

63-
void setDevice() {
64-
doJavascript("BootPay.setDevice('ANDROID');");
65-
}
54+
@Override
55+
public void onCancel(String data) {
56+
System.out.println("bootpay cancel");
57+
System.out.println(data);
58+
}
6659

67-
void startTrace() {
68-
doJavascript("BootPay.startTrace();");
69-
}
60+
@Override
61+
public void onClose(String data) {
62+
System.out.println("bootpay close");
63+
System.out.println(data);
64+
}
7065

71-
void registerAppId() {
72-
doJavascript("BootPay.setApplicationId('" + android_application_id + "');");
73-
}
66+
@Override
67+
public void onReady(String data) {
68+
System.out.println("bootpay ready");
69+
System.out.println(data);
70+
}
7471

75-
void registerAppIdDemo() {
76-
doJavascript("window.setApplicationId('" + android_application_id + "');");
72+
@Override
73+
public void onConfirm(String data) {
74+
boolean iWantPay = true;
75+
if(iWantPay == true) { // 재고가 있을 경우
76+
doJavascript("BootPay.transactionConfirm( " + data + ");");
77+
} else {
78+
doJavascript("BootPay.removePaymentWindow();");
79+
}
80+
}
81+
82+
@Override
83+
public void onDone(String data) {
84+
System.out.println("bootpay done");
85+
System.out.println(data);
86+
87+
}
88+
});
89+
webview.loadUrl(url);
7790
}
7891

7992
void doJavascript(String script) {
@@ -85,165 +98,4 @@ public void run() {
8598
}
8699
});
87100
}
88-
89-
@Override
90-
public void error(String data) {
91-
System.out.println(data);
92-
}
93-
94-
@Override
95-
public void close(String data) {
96-
System.out.println(data);
97-
}
98-
99-
@Override
100-
public void cancel(String data) {
101-
System.out.println(data);
102-
}
103-
104-
@Override
105-
public void ready(String data) {
106-
System.out.println(data);
107-
}
108-
109-
@Override
110-
public void confirm(String data) {
111-
boolean iWantPay = true;
112-
if(iWantPay == true) { // 재고가 있을 경우
113-
doJavascript("BootPay.transactionConfirm( " + data + ");");
114-
} else {
115-
doJavascript("BootPay.removePaymentWindow();");
116-
}
117-
}
118-
119-
@Override
120-
public void done(String data) {
121-
System.out.println(data);
122-
}
123-
124-
private class BWebviewClient extends WebViewClient {
125-
private boolean isLoaded = false;
126-
127-
128-
@Override
129-
public void onPageFinished(WebView view, String url) {
130-
super.onPageFinished(view, url);
131-
if(isLoaded) return;
132-
isLoaded = true;
133-
registerAppId();
134-
setDevice();
135-
startTrace();
136-
registerAppIdDemo();
137-
}
138-
139-
@Override
140-
public boolean shouldOverrideUrlLoading(WebView view, String url) {
141-
Intent intent = parse(url);
142-
if (isIntent(url)) {
143-
if (isExistInfo(intent, view.getContext()) || isExistPackage(intent, view.getContext()))
144-
return start(intent, view.getContext());
145-
else
146-
return gotoMarket(intent, view.getContext());
147-
} else if (isMarket(url)) {
148-
if (!(isExistInfo(intent, view.getContext()) || isExistPackage(intent, view.getContext())))
149-
return gotoMarket(intent, view.getContext());
150-
else
151-
return true;
152-
} else if (isSpecialCase(url)) {
153-
if (isExistInfo(intent, view.getContext()) || isExistPackage(intent, view.getContext()))
154-
return start(intent, view.getContext());
155-
else
156-
return gotoMarket(intent, view.getContext());
157-
}
158-
return url.contains("https://bootpaymark");
159-
}
160-
161-
private Boolean isSpecialCase(String url) {
162-
return url.matches("^shinhan\\S+$")
163-
|| url.startsWith("kftc-bankpay://")
164-
|| url.startsWith("v3mobileplusweb://")
165-
|| url.startsWith("hdcardappcardansimclick://")
166-
|| url.startsWith("mpocket.online.ansimclick://");
167-
}
168-
169-
private Intent parse(String url) {
170-
try {
171-
Intent intent = Intent.parseUri(url, Intent.URI_INTENT_SCHEME);
172-
if(intent.getPackage() == null) {
173-
if (url == null) return intent;
174-
if (url.startsWith("shinhan-sr-ansimclick")) intent.setPackage("com.shcard.smartpay");
175-
else if (url.startsWith("kftc-bankpay")) intent.setPackage("com.kftc.bankpay");
176-
else if (url.startsWith("ispmobile")) intent.setPackage("kvp.jjy.MispAndroid320");
177-
else if (url.startsWith("hdcardappcardansimclick")) intent.setPackage("com.hyundaicard.appcard");
178-
else if (url.startsWith("kb-acp")) intent.setPackage("com.kbcard.kbkookmincard");
179-
else if (url.startsWith("mpocket.online.ansimclick")) intent.setPackage("kr.co.samsungcard.mpocket");
180-
else if (url.startsWith("lotteappcard")) intent.setPackage("com.lcacApp");
181-
else if (url.startsWith("cloudpay")) intent.setPackage("com.hanaskcard.paycla");
182-
else if (url.startsWith("nhappvardansimclick")) intent.setPackage("nh.smart.nhallonepay");
183-
else if (url.startsWith("citispay")) intent.setPackage("kr.co.citibank.citimobile");
184-
else if (url.startsWith("kakaotalk")) intent.setPackage("com.kakao.talk");
185-
}
186-
return intent;
187-
} catch (URISyntaxException e) {
188-
e.printStackTrace();
189-
return null;
190-
}
191-
}
192-
193-
private Boolean isIntent(String url) {
194-
return url.matches("^intent:?\\w*://\\S+$");
195-
}
196-
197-
private Boolean isMarket(String url) {
198-
return url.matches("^market://\\S+$");
199-
}
200-
201-
202-
203-
private Boolean isExistInfo(Intent intent, Context context) {
204-
try {
205-
return intent != null && context.getPackageManager().getPackageInfo(intent.getPackage(), PackageManager.GET_ACTIVITIES) != null;
206-
} catch (PackageManager.NameNotFoundException e) {
207-
e.printStackTrace();
208-
return false;
209-
}
210-
}
211-
212-
private Boolean isExistPackage(Intent intent, Context context) {
213-
return intent != null && intent.getPackage() != null && context.getPackageManager().getLaunchIntentForPackage(intent.getPackage()) != null;
214-
}
215-
216-
private boolean start(Intent intent, Context context) {
217-
context.startActivity(intent);
218-
return true;
219-
}
220-
221-
private boolean gotoMarket(Intent intent, Context context) {
222-
context.startActivity(new Intent(Intent.ACTION_VIEW, Uri.parse("market://details?id=" + intent.getPackage())));
223-
return true;
224-
}
225-
}
226-
227-
228-
private class BChromeClient extends WebChromeClient {
229-
@Override
230-
public boolean onCreateWindow(WebView view, boolean isDialog, boolean isUserGesture, Message resultMsg) {
231-
return super.onCreateWindow(view, isDialog, isUserGesture, resultMsg);
232-
}
233-
234-
@Override
235-
public void onCloseWindow(WebView window) {
236-
super.onCloseWindow(window);
237-
}
238-
239-
@Override
240-
public boolean onJsAlert(WebView view, String url, String message, JsResult result) {
241-
new AlertDialog.Builder(view.getContext())
242-
.setMessage(message)
243-
.setCancelable(true)
244-
.create()
245-
.show();
246-
return true;
247-
}
248-
}
249101
}

sample/src/main/res/layout/activity_webapp.xml

Lines changed: 9 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -4,9 +4,14 @@
44
android:layout_width="match_parent"
55
android:layout_height="match_parent">
66

7-
<WebView
8-
android:id="@+id/webview"
9-
android:layout_width="match_parent"
10-
android:layout_height="match_parent"/>
7+
<!--<WebView-->
8+
<!--android:id="@+id/webview"-->
9+
<!--android:layout_width="match_parent"-->
10+
<!--android:layout_height="match_parent"/>-->
11+
<kr.co.bootpay.BootpayWebView
12+
android:id="@+id/webview"
13+
android:layout_width="match_parent"
14+
android:layout_height="match_parent"
15+
/>
1116

1217
</LinearLayout>

0 commit comments

Comments
 (0)