بازگشن به app از درون webview
سلام دوستان عزیز من برای پرداخت از درگاه بانک ملت استفاده کردم و از browser گوشی استفاده نکردم بلکه از webview استفاده کردم
فقط بعد از پرداخت نمیتونم کاربر را هدایت کنم به app یعنی بعد از پرداخت ، واژه بازگشت را که کلیک میکنم نرم افزار باز نمیشه البته من از browser گوشی برای پرداخت استفاده نکردم از webview داخل نرم افزار استفاده کردم و مشکلی هم نداره فقط نمیدونم چطور بهش بگم برگرده به نرم افزار ممنون میشم اگر راهنمایی کنید با سپاس و مهر
WebView لیستنر هایی داره که به شما میگه Page در حال Load شدن هست و یا در حالت finish قرار گرفته و کاملا لود شده
توی این حالت شما باید بعد از پرداخت کاربر رو به یک صفحه ارجاع بدید و یک پیغام با محتوای مناسب (مثلا پرداخت با موفقیت انجام شد) نمایش بدید ، توی المنت های این صفحه شما باید تگ ها خاص قرار بدید و WebView همیشه موقع Finish شدن سورس صفحه رو چک میکنه و به دنبال اون تگ ها باشه و المنت خاصی که شما قرار دادید وجود داشته باشه ، در این حالت میتونید کد بزنید که به اکتیوتی قبل برگردید و حتی میتونید متوجه بشید نتیجه پرداخت چی بوده ، و حتی کد رهگیری رو هم دریافت و ذخیره کنید و خیلی کارهای دیگه
شما درگاه پرداخت رو از کجا تهیه کردید ؟
مثال برای استفده از المنت ها : پرداخت با موفیقیت
<p>پرداخت با موفیقیت انجام شد</p>
<span class="ok"> </span>
پرداخت ناموفق
<p>پرداخت با موفیقیت انجام شد</p>
<span class="fail"> </span>
با استفاده از javaScript در WebView میتونید مقدار class در المنت span رو بخونید و با توجه به اون کد بزنید
if(String.equal("ok")){
toast("انجام شد")
new intent().statrActivity(ActivityMain);
} else if (String.equal("fail")){
toast("انجام نشد")
new intent().statrActivity(ActivitySecound);
}
با استفاده از قطعه کد زیر میتونید بدونید که page شما در چه شرایطی از load شدن هست
با استفاده از JAVAScript بعد از اینکه onPageFinished صدا زده شد محتوای page لود شده رو میخونیم ، ما از یک دستور If استفاده کردیم که مطمئن بشیم صفحه لود شده همون پیغامی هست که ما در سرور خودمون داریم نشون میدیم < و نه صفحات بانک <
webView.setWebViewClient(new WebViewClient() {
@Override
public void onReceivedSslError(WebView view, SslErrorHandler handler, SslError error) {
handler.proceed();
}
@Override
public void onLoadResource(WebView view, String url) {
super.onLoadResource(view, url);
Log.i("WV", "LOADING");
}
@Override
public void onPageFinished(WebView view, String url) {
super.onPageFinished(view, url);
if (webView.getUrl().contains("YOURDOMAIN.COM")) {
String getHtmlData = "javascript:window.HtmlViewer.showHTML(document.getElementsByTagName('body')[0].innerHTML);";
webView.loadUrl(getHtmlData);
}
}
@Override
public void onReceivedError(WebView view, int errorCode, String description, String failingUrl) {
Log.e("WV", "ERROR");
ActivityWebPay.this.finish();
}
});
هم چنین لازم هست برای گرفتن محتوای HTML صفحات کد زیر رو استفاده کنید <
webView.addJavascriptInterface(new MyJavaScriptInterface(this), "HtmlViewer");
کلاس MyJavaScriptInterface هم به شکل زیر هست که مقدار HTML در اون گرفته میشه
class MyJavaScriptInterface {
private Context ctx;
MyJavaScriptInterface(Context ctx) {
this.ctx = ctx;
}
public void showHTML(String html) {
// Log.i("HTML", html);
Document doc = Jsoup.parse(html);
String result = doc.select("span").text();
String status = doc.select("span").attr("class");
String price = doc.select("span").attr("id");
// Log.e("HTML", result + " " + status + " " + price);
if ( !result.equals("")) {
putToPreferences(result + "#" + status + "#" + price);
}
}
}
من برای گرفتن مقدار درون class و id که قبلا از سمت سرور تعیین کردم از Jsoup استفاده میکنم و اگر مقدار ok باشه پرداخت درست انجام شده ولی اگر مقداری دیگه ایی باشه بر اساس اون کد میزنم <
در مورد نحوه خروجی دادن از php بستگی به شما داره که چطور سرویس رو نوشته باشید <
اگر باز هم این مطالب براتون گنگ هست ، باید در مورد Jsoup + نحوه تغییر HTML یک page توسط ارسال javaScript در WebVIew و همچنین HTML و CSS کمی اطلاعات پایه ایی کسب کنید ، تمام این موارد توی انجمن موجود هست
پاسخگویی و مشاهده پاسخ های این سوال تنها برای اعضای ویژه سایت امکان پذیر است .
چنانچه تمایل دارید به همه بخش ها دسترسی داشته باشید میتوانید از این بخش لایسنس این آموزش را خریداری نمایید .