Pagsmile ES
  • Introducción
  • Referencia
  • API Payin
    • Ambientes
    • Checkout "todo-en-uno"
      • Página Checkout (General)
      • Página Checkout (E-com)
    • Integración Directa
      • Brasil
        • Tarjeta de Crédito
        • Pix
        • Lottery
        • Boleto
        • Depósito Express
        • Wallet
      • México
        • SPEI
        • CoDi
        • OXXO
        • OXXOPay
        • Efectivo
        • Wallet
      • Colombia
        • PSE
        • Efecty
        • SuRed
        • Gana
        • Baloto
        • Wallet
      • Chile
        • Khipu
        • Transferencia Bancaria
        • Wallet
      • Perú
        • PagoEfectivo
        • Transferencia Bancaria
        • Efectivo
      • Ecuador
        • Transferencia Bancaria
        • Efectivo
      • Guatemala
        • Transferencia Bancaria
        • Efectivo
      • Costa Rica
        • Transferencia Bancaria
        • Efectivo
      • Panamá
        • Efectivo
      • El Salvador
        • Efectivo
      • Rusia
        • Wallet
      • Saudi Arabia
        • Tarjeta de Crédito
      • Kuwait
        • Tarjeta de Crédito
      • Qatar
        • Tarjeta de Crédito
      • Omán
        • Tarjeta de Crédito
      • Emiratos Árabes Unidos
        • Tarjeta de Crédito
      • Bahrain
        • Tarjeta de Crédito
    • Notificaciones
      • Security
    • Pagos Recurrentes
    • Detalle de Pago
    • Reembolso
    • Plug-in & Herramientas
      • Pagsmile JavaScript
      • Pagsmile SDK
      • Registro de lista de Bancos Disponibles
      • Verificación de Detalle de Cuotas
    • Data
      • Método de Pago
      • Data para pruebas (Sandbox)
      • Estado de Payin
      • Lista de Bancos
        • Bancos en Chile
        • Bancos en Peru
        • Bancos en Ecuador
        • Bancos en Panama
        • Bancos en Costa Rica
        • Bancos en El Salvador
        • Bancos en Guatemala
      • Logos de los métodos
    • Código API
  • Payout API
    • Ambientes
    • Seguridad
    • Enviar un payout
      • Pagsmile Wallet
        • Ejemplo WebView
        • Authorización H5
        • Autorización Nativa de APP
        • Enviar Bonificaciones
      • PayPal
        • Países Disponibles
      • Brasil
        • Pix
        • Transferencia Bancaria
      • Mexico
        • SPEI
      • Chile
        • Wallet
        • Transferencia Bancaria
      • Colombia
        • Wallet
        • Transferencia Bancaria
      • Peru
        • Transferencia Bancaria
        • Regiones en Peru
      • Ecuador
        • Transferencia Bancaria
    • Notificaciones
    • Simulación de Payout
    • Página Checkout
    • Balance de cuenta
    • Status de Payout
    • Lista de Payout
    • Detalle de Payout
    • Métodos de Pago
    • Data para pruebas
    • Códigos de Banco
      • Bancos en Brasil
      • Bancos en Chile
      • Bancos en Colombia
      • Bancos en Ecuador
      • Bancos en Mexico
      • Bancos en Peru
    • Código API
  • OTHER
    • Changelog
Powered by GitBook
On this page
  1. Payout API
  2. Enviar un payout
  3. Pagsmile Wallet

Ejemplo WebView

<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" /> 
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />
package com.wallet.testwebview;

import android.app.Activity;
import android.content.Intent;
import android.graphics.Bitmap;
import android.net.Uri;
import android.os.Build;
import android.os.Bundle;
import android.provider.MediaStore;
import android.util.Log;
import android.view.View;
import android.webkit.JavascriptInterface;
import android.webkit.JsResult;
import android.webkit.ValueCallback;
import android.webkit.WebChromeClient;
import android.webkit.WebSettings;
import android.webkit.WebView;
import android.webkit.WebViewClient;
import android.widget.ProgressBar;
import android.widget.Toast;

import androidx.annotation.Nullable;
import androidx.annotation.RequiresApi;
import androidx.appcompat.app.AlertDialog;
import androidx.appcompat.app.AppCompatActivity;

public class WebViewActivity extends AppCompatActivity {

    private static final String TAG = "WebViewActivity";
    private WebView webView;
    private ProgressBar progressBar;


    @RequiresApi(api = Build.VERSION_CODES.KITKAT)
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_web_view);
        if (Constant.second != null && !Constant.second.isFinishing()) {
            Constant.second.finish();
        }
        progressBar = (ProgressBar) findViewById(R.id.progressbar);
        webView = (WebView) findViewById(R.id.webview);
        webView.setBackgroundColor(0); 
        Intent intent = getIntent();
        String url = intent.getStringExtra("url");
//        url = "http://demo.gemini-tiger.cn/order";
        webView.loadUrl(url);
        //添加js监听 这样html就能调用客户端
        webView.addJavascriptInterface(this, "PWA");

        webView.setWebChromeClient(webChromeClient);
        webView.setWebViewClient(webViewClient);
        WebSettings webSettings = webView.getSettings();
        webSettings.setJavaScriptEnabled(true);
        webView.setWebContentsDebuggingEnabled(true);
        webSettings.setSupportMultipleWindows(true);
        webSettings.setJavaScriptCanOpenWindowsAutomatically(true);//允许js弹出窗口
        webSettings.setSupportMultipleWindows(true);
        webSettings.setDomStorageEnabled(true);
        webSettings.setDatabaseEnabled(true);
        webSettings.setAllowFileAccess(true);
        webSettings.setBlockNetworkLoads(false); // 是否从网络获取资源

        /**
         * LOAD_CACHE_ONLY: 不使用网络,只读取本地缓存数据
         * LOAD_DEFAULT: (默认)根据cache-control决定是否从网络上取数据。
         * LOAD_NO_CACHE: 不使用缓存,只从网络获取数据.
         * LOAD_CACHE_ELSE_NETWORK,只要本地有,无论是否过期,或者no-cache,都使用缓存中的数据。
         */
        webSettings.setCacheMode(WebSettings.LOAD_NO_CACHE);
        //支持屏幕缩放
        webSettings.setSupportZoom(true);
        webSettings.setBuiltInZoomControls(true);
        //不显示webview缩放按钮
        webSettings.setDisplayZoomControls(false);
        webSettings.setUseWideViewPort(true); //将图片调整到适合webview的大小
        webSettings.setLoadWithOverviewMode(true); // 缩放至屏幕的大小
        findViewById(R.id.bt_sx).setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                webView.reload();
            }
        });
    }

    //WebViewClient主要帮助WebView处理各种通知、请求事件
    private WebViewClient webViewClient = new WebViewClient() {
        @Override
        public void onPageFinished(WebView view, String url) {//页面加载完成
            Log.i(TAG, "加载完成url:" + url);
            progressBar.setVisibility(View.GONE);
        }

        @Override
        public void onPageStarted(WebView view, String url, Bitmap favicon) {//页面开始加载
            Log.i(TAG, "加载url:" + url);
            progressBar.setVisibility(View.VISIBLE);
        }

        @Override
        public boolean shouldOverrideUrlLoading(WebView view, String url) {
            Log.i(TAG, "拦截url:" + url);
            return super.shouldOverrideUrlLoading(view, url);
        }


    };

    private static ValueCallback<Uri[]> filePathCallback1;

//WebChromeClient support WebView to process Javascript dialog, web icon, web title, loading progress, etc
private WebChromeClient webChromeClient = new WebChromeClient() {

//Don't support js alert pop-up. Need to montior and pop-up through dialog.
@Override
public boolean onJsAlert(WebView webView, String url, String message, JsResult result) {
    AlertDialog.Builder localBuilder = new AlertDialog.Builder(webView.getContext());
    localBuilder.setMessage(message).setPositiveButton("Yes", null);
    localBuilder.setCancelable(false);
    localBuilder.create().show();
    //Note:
    //Must use this code: result.confirm():
    //The result is "Yes" status and wakeup WebCore thread at the same time
    //Cannot click the confirm button if not
    result.confirm();
    return true;
}

//Get web title
@Override
public void onReceivedTitle(WebView view, String title) {
    super.onReceivedTitle(view, title);
    Log.i(TAG, "web title:" + title);
}

//callback of loading progress
@Override
public void onProgressChanged(WebView view, int newProgress) {
    progressBar.setProgress(newProgress);
}


@RequiresApi(api = Build.VERSION_CODES.LOLLIPOP)
@Override
public boolean onShowFileChooser(WebView webView, ValueCallback<Uri[]> filePathCallback, FileChooserParams fileChooserParams) {
//return super.onShowFileChooser(webView, filePathCallback, fileChooserParams);

    filePathCallback1 = filePathCallback;
    //Convert the format type received by the front-end H5 into a string without a semicolon after it
    String[] acceptTypes = fileChooserParams.getAcceptTypes();
    String acceptType = "*/*";
    StringBuilder sb = new StringBuilder();
    if (acceptTypes.length > 0) {
        for (String type : acceptTypes) {
            sb.append(type).append(';');
        }
    }
    if (sb.length() > 0) {
        String typeStr = sb.toString();
        acceptType = typeStr.substring(0, typeStr.length() - 1);
    }
    //According to the judgment, trigger related operations, such as file selection, taking pictures, etc. For details, please refer to the step-3
    //Here, you can also pop up a dialog box for the user to choose. Remember to call the callback onReceiveValue method after the dialog box pops up, otherwise there will be a bug that the dialog box cannot be popped up next time.
    Intent intent = new Intent(Intent.ACTION_PICK, null);
    intent.setDataAndType(MediaStore.Images.Media.EXTERNAL_CONTENT_URI, acceptType);
    WebViewActivity.this.startActivityForResult(intent, 15);

    return true;
}

};

@Override
protected void onActivityResult(int requestCode, int resultCode, @Nullable Intent data) {

    if (requestCode == 15) {
        if (resultCode == Activity.RESULT_OK) {
            Uri imgUri = data.getData();
            Uri[] result = new Uri[]{imgUri};
            filePathCallback1.onReceiveValue(result);
        } else {
            filePathCallback1.onReceiveValue(new Uri[]{});
        }
    }
    super.onActivityResult(requestCode, resultCode, data);
}

    @JavascriptInterface
    public void bindSuc(String str) {
        Log.i(TAG, "bindSuc: str = " + str);
        
        finish();
    }

    private void showToast(String str) {
        Toast.makeText(this, str, Toast.LENGTH_SHORT).show();
    }
}
PreviousPagsmile WalletNextAuthorización H5

Last updated 2 years ago