2222import java .net .URISyntaxException ;
2323
2424import 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}
0 commit comments