Pay Station / Как открыть платежный интерфейс в мобильном приложении
  На главную

Pay Station

Как открыть платежный интерфейс в мобильном приложении

Примечание
Для быстрой интеграции сервисов Xsolla вы можете использовать готовые SDK:
  • Xsolla Mobile SDK — рекомендуемый вариант, чтобы расширить набор способов оплаты и при этом соблюдать требования мобильных маркетплейсов.
  • SDK enterprise-уровня для Android — решение, чтобы быстро реализовать прием платежей с помощью всех методов, которые поддерживает Xsolla: банковские и кредитные карты, электронные кошельки, QR-коды и нативные способы, например, Google Pay.
Чтобы принимать платежи в мобильном приложении, вы можете использовать следующие способы открытия платежного интерфейса:
  • В браузере — в этом случае пользователь будет перенаправлен из игры во внешний браузер для совершения оплаты. Платежный интерфейс будет выглядеть следующим образом:
  • В Android WebView — в этом случае платежный интерфейс открывается внутри игрового приложения и выглядит частью приложения:
  • В пользовательских вкладках (Custom Tabs) — в этом случае платежный интерфейс открывается внутри игрового приложения, но пользователь видит строку браузера. Платежный интерфейс будет выглядеть следующим образом:

В браузере

Чтобы открыть платежный интерфейс в браузере и принимать платежи любыми способами, которые поддерживает Xsolla, воспользуйтесь инструкцией по открытию платежного интерфейса.

В Android WebView

Android WebView — это предустановленный системный компонент от Google, с помощью которого приложения Android могут показывать контент. Для корректной работы платежного интерфейса в Android WebView вам необходимо настроить WebView и реализовать методы setWebViewClient и setWebChromeClient.

Copy
Full screen
Small screen
mWebView.setWebViewClient(new XsollaWebViewClient(this));
mWebView.setWebChromeClient(new XsollaWebChromeClient(this));

Чтобы настроить открытие платежного интерфейса в Android WebView:

  1. Настройте WebView согласно примеру:

Copy
Full screen
Small screen
WebSettings webSettings = mWebView.getSettings();
webSettings.setBuiltInZoomControls(false);
webSettings.setUseWideViewPort(true);
webSettings.setDomStorageEnabled(true);
webSettings.setLoadWithOverviewMode(true);
webSettings.setJavaScriptEnabled(true);
webSettings.setSupportMultipleWindows(true);
webSettings.setJavaScriptCanOpenWindowsAutomatically(true);
  1. Добавьте класс XsollaWebViewClient, который наследуется от класса WebViewClient и переопределяет методы shouldOverrideUrlLoading и onPageFinished согласно примеру:
Copy
Full screen
Small screen
class XsollaWebViewClient extends WebViewClient {
    private final Context context;


    public XsollaWebViewClient(Context context) {
        this.context = context;
    }


    @Override
    public boolean shouldOverrideUrlLoading(WebView view, String url) {
        if(url.matches(".+://.*")) {
            try {
                Intent intent = Intent.parseUri(url, Intent.URI_INTENT_SCHEME);
                intent.addCategory("android.intent.category.BROWSABLE");
                intent.setComponent(null);
                context.startActivity(intent);
            } catch(URISyntaxException e) {
                Log.e("WebView", "Invalid URL format" + url, e);
            } catch (ActivityNotFoundException e) {
                Log.e("WebView", "No activity found to handle URL: " + url, e);
            }
            return true;
        }


        return false;
    }


    @Override
    public void onPageFinished(WebView view, String url) {
        super.onPageFinished(view, url);
    }
}
  1. Добавьте класс XsollaWebChromeClient, который наследуется от класса WebChromeClient и переопределяет методы onCreateWindow и onCloseWindow в этом классе.
Copy
Full screen
Small screen
public class XsollaWebChromeClient extends WebChromeClient {
    private final Context mContext;

    public XsollaWebChromeClient(Context context) {
        mContext = context;
    }

    @Override
    public boolean onCreateWindow(WebView view, boolean isDialog, boolean isUserGesture, android.os.Message resultMsg) {
        MainActivity mainActivity = (MainActivity) mContext;

        WebView.WebViewTransport transport = (WebView.WebViewTransport) resultMsg.obj;
        transport.setWebView(mainActivity.mChildWebView);
        resultMsg.sendToTarget();
        return true;
    }
}
  1. Добавьте класс XsollaChildWebView, который наследуется от класса WebView.
Copy
Full screen
Small screen
public class XsollaChildWebView extends WebView {


    @SuppressLint("SetJavaScriptEnabled")
    public XsollaChildWebView(Context context, AttributeSet attrs) {
        super(context, attrs);


        WebSettings webSettings = getSettings();
        webSettings.setJavaScriptEnabled(true);
        webSettings.setDomStorageEnabled(true);


        setWebViewClient(new XsollaWebViewClient(context));
        setWebChromeClient(new XsollaWebChromeClient(context));
    }
}
  1. Объявите переменную mChildWebView как поле класса MainActivity:
Copy
Full screen
Small screen
mChildWebView = findViewById(R.id.childWebView);

Второй WebView (childWebView) используется для открытия новых окон в платежном интерфейсе:

Пример реализации activity:

Copy
Full screen
Small screen
<?xml version="1.0" encoding="utf-8"?>
<androidx.constraintlayout.widget.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    tools:context=".MainActivity">

    <WebView
        android:id="@+id/mainWebView"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        app:layout_constraintBottom_toBottomOf="parent"
        app:layout_constraintEnd_toEndOf="parent"
        app:layout_constraintStart_toStartOf="parent"
        app:layout_constraintTop_toTopOf="parent" />

    <com.example.app.XsollaChildWebView
        android:id="@+id/childWebView"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:visibility="gone"
        app:layout_constraintBottom_toBottomOf="parent"
        app:layout_constraintEnd_toEndOf="parent"
        app:layout_constraintStart_toStartOf="parent"
        app:layout_constraintTop_toTopOf="parent" />

</androidx.constraintlayout.widget.ConstraintLayout>
Примечание
Вы можете найти подробные примеры кода в репозитории на GitHub.

В пользовательских вкладках (Custom Tabs)

Пользовательские вкладки (Custom Tabs) — это функциональность браузеров Android, которая позволяет добавлять кастомизированные возможности браузера напрямую в приложение. Разница между WebView и Custom Tabs в том, что действия пользователя в WebView изолированы от других действий пользователя в интернете, в то время как использование Custom Tabs позволяет синхронизировать действия пользователя с его другой активностью в Chrome на устройстве Android.

Пример кода для открытия платежного интерфейса в Custom Tabs:

Copy
Full screen
Small screen
String url = "https://secure.xsolla.com/paystation4?token=${token}";
CustomTabsIntent.Builder builder = new CustomTabsIntent.Builder();
CustomTabsIntent customTabsIntent = builder.build();
customTabsIntent.launchUrl(this, Uri.parse(url));
Была ли статья полезна?
Спасибо!
Что может сделать страницу еще лучше? Сообщение
Жаль, что так произошло
Расскажите, почему статья не была полезна. Сообщение
Спасибо за обратную связь!
Ваши мысли и идеи помогут нам улучшить ваш пользовательский опыт.
Последнее обновление: 26 июля 2024

Нашли опечатку или ошибку в тексте? Выделите ее и нажмите Ctrl+Enter.

Сообщите о проблеме
Мы постоянно улучшаем качество нашей документации. Ваш отзыв поможет нам в этом.
Укажите email-адрес, чтобы мы могли связаться с вами
Спасибо за обратную связь!