آموزش های این وب سایت به صورت رایگان در دسترس است. اطلاعات بیشتر
بروز خطا
   [message]
اشتراک در سوال
رای ها
[dataList]

بازگشن به app از درون webview

parand  7 سال پیش  6 سال پیش
+1 0

سلام دوستان عزیز من برای پرداخت از درگاه بانک ملت استفاده کردم و از browser گوشی استفاده نکردم بلکه از webview استفاده کردم

فقط بعد از پرداخت نمیتونم کاربر را هدایت کنم به app یعنی بعد از پرداخت ، واژه بازگشت را که کلیک میکنم نرم افزار باز نمیشه  البته من از browser گوشی برای پرداخت استفاده نکردم از webview داخل نرم افزار استفاده کردم و مشکلی هم نداره فقط نمیدونم چطور بهش بگم برگرده به نرم افزار ممنون میشم اگر راهنمایی کنید با سپاس و مهر

+1 0
بنطرمن باید با بانک ملت مکاتبه کنید، احتمالا اینتنت یا api مربوط به این مورد وجود داشته باشه، اگرهم از وب ویو استفاده کردین میتونید یه باتن بزارید خارج از وب ویو مثلا در پایین لایه ـتون بعد خاصیت Enable رو غیرفعال کنید، اگر پرداخت با موفقیت انجام شد خاصیت Enable فعال بشه و با intentـی که براش درنظر گرفتین به اکتیویتی موردنظر برگرده و اکتیویتی فعلی رو finish کنید ! (7 سال پیش)
 برای این سوال 2 پاسخ وجود دارد.
پاسخ به سوال 
Criss  7 سال پیش
+2 0

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);
}
0 0
درگاه بانک ملت هست (7 سال پیش)
پاسخ به سوال 
Criss  7 سال پیش
+3 0

با استفاده از قطعه کد زیر میتونید بدونید که 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 کمی اطلاعات پایه ایی کسب کنید ، تمام این موارد توی انجمن موجود هست

0 0
سپاس گذارم دوست عزیز (7 سال پیش)
0 0
دوست عزیز متاسفانه گوگل برای نسخه های 17 و بالاتر مانع جاوااسکریپت اینترفیس میشه (بدلیل مسایل امنیتی) ایا شما تا حالا به این مورد برخوردید نظرتون چی هست؟ ممنون (6 سال پیش)

پاسخگویی و مشاهده پاسخ های این سوال تنها برای اعضای ویژه سایت امکان پذیر است .
چنانچه تمایل دارید به همه بخش ها دسترسی داشته باشید میتوانید از این بخش لایسنس این آموزش را خریداری نمایید .