Установка Yandex Pay Kit для iOS

Системные требования

Компонент

Версия

iOS

15.0 и выше

Swift

6.0 и выше

Xcode

16.4 и выше

Доступные модули

Модуль Зависимость Описание
CP QR YandexQuickPay Customer Presented QR. Быстрая оплата через QR-код в офлайн-точках.
Ассистент YandexPayAssistant Виджеты выгод и сценарии ИИ-ассистента от Яндекс Пэй.
Авторизация YandexPayAuth Авторизация пользователя в Яндекс Пэй и передача состояния авторизации партнера.
Редирект YandexPayWithRedirect PSP-оплата через платежную ссылку с редиректом в платежную форму.
Пэй Виджет YandexPayInApp Виджет быстрой онлайн-оплаты на checkout-странице. Подключается вместе с модулем «Редирект» (YandexPayWithRedirect).
Инвентарь YandexPayInventory Бейджи Яндекс Пэй с информацией о скидках, кешбэке баллами Плюса или платежах Яндекс Сплит.

Пакет SDK на GitHub: https://github.com/yandexmobile/yandex-pay-ios.

Установка

В файле Package.swift добавьте зависимость от репозитория:

dependencies: [
   .package(
      url: "https://github.com/yandexmobile/yandex-pay-ios.git",
      from: "2.1.1"
   )
]

Затем добавьте нужные продукты к цели:

.target(
   name: "MyApp",
   dependencies: [
      .product(name: "YandexPayAuth",      package: "yandex-pay-ios"),
      .product(name: "YandexQuickPay",     package: "yandex-pay-ios"),
      .product(name: "YandexPayAssistant", package: "yandex-pay-ios"),
      // и другие необходимые
   ]
)

Либо добавьте зависимость через Xcode: File → Add Package Dependencies…, вставьте URL репозитория и выберите нужные продукты в диалоге.

Добавьте только нужные пакеты:

pod 'YandexPaySDK/YandexPayAuth'      # при необходимости
pod 'YandexPaySDK/YandexQuickPay'     # при необходимости
pod 'YandexPaySDK/YandexPayAssistant' # при необходимости

Настройка проекта

1. Идентификатор Client ID

SDK использует до двух идентификаторов клиента:

Идентификатор

Обязательный

Описание

YANDEX_PAY_CLIENT_ID

Да

Выдается менеджером по интеграции со стороны Яндекс Пэй.

YANDEX_CLIENT_ID

Да

Используется SDK для настройки авторизации через Yandex ID.

  • Если в вашем приложении уже есть OAuth Client ID для Yandex ID, укажите его.
  • Если приложение не подключает Yandex ID отдельно, укажите то же значение, что и в YANDEX_PAY_CLIENT_ID.

Чтобы зарегистрировать Client ID:

  1. Настройте цели в Xcode:

    1. Откройте вкладку Build Settings и выберите AllUser-Defined.

    2. Добавьте одну или обе переменные:

      YANDEX_PAY_CLIENT_ID = <ваш идентификатор>
      YANDEX_CLIENT_ID     = <ваш идентификатор>
      
  2. Добавьте ссылки на переменные в Info.plist:

    <key>YANDEX_PAY_CLIENT_ID</key>
    <string>$(YANDEX_PAY_CLIENT_ID)</string>
    
    <key>YANDEX_CLIENT_ID</key>
    <string>$(YANDEX_CLIENT_ID)</string>
    
     <key>LSApplicationQueriesSchemes</key>
     <array>
         <string>yandexauth</string>
         <string>yandexauth2</string>
         <string>yandexauth4</string>
         <string>primaryyandexloginsdk</string>
         <string>secondaryyandexloginsdk</string>
     </array>
    
  3. Добавьте в Info.plist параметр NSFaceIDUsageDescription, чтобы реализовать сценарий аутентификации с использованием Face ID — параметр обязателен, если приложение использует модули «CP QR», «Ассистент» или «Пэй Виджет».

    В значении параметра укажите, для чего приложению требуется доступ к Face ID. Без этого параметра сценарии аутентификации, используемые модулями, могут работать некорректно.

    Например:

    <key>NSFaceIDUsageDescription</key>
    <string>Use biometrics to access your private key for secure payments.</string>
    

2. URL-схемы

Для каждого используемого Client ID зарегистрируйте URL-схему. Без этого SDK не сможет получать OAuth-колбэки.

Схема формируется по правилу: yx + <значение_Сlient_ID>. Например, для Client ID abcdef1234567890 схема будет yxabcdef1234567890.

Добавьте схему для обоих переменных в Info.plist:

<key>CFBundleURLTypes</key>
<array>
    <dict>
        <key>CFBundleTypeRole</key>
        <string>Editor</string>
        <key>CFBundleURLName</key>
        <string>YandexLoginSDK</string>
        <key>CFBundleURLSchemes</key>
        <array>
            <!-- Схема для YANDEX_PAY_CLIENT_ID -->
            <string>yx$(YANDEX_PAY_CLIENT_ID)</string>
            <!-- Схема для YANDEX_CLIENT_ID -->
            <string>yx$(YANDEX_CLIENT_ID)</string>
        </array>
    </dict>
</array>

3. Инициализация

Вызовите YPay.initialize(...) один раз при старте приложения до первого обращения к любому модулю. Вызов можно сделать в SceneDelegate или в AppDelegate.

import YandexPayConfiguration
import YandexPayAuth
import YandexQuickPay
import YandexPayAssistant
import YandexPayWithRedirect
import YandexPayInApp
import YandexPayInventory

let merchant = YPSDKMerchant(
    id: "ваш-merchant-id",
    name: "Название магазина",
    url: nil
)

YPay.initialize(
    environment: .production,
    locale: .ru,
    modules: [
        // Только необходимые модули здесь нужно указать
        YPayWithRedirect.module(merchant: merchant),
        YPayInApp.module(merchant: merchant),
        YPAssistantModule.module(merchant: merchant),
        YPayInventory.module(merchant: merchant),
        YPayAuth.module(merchant: merchant),
        YQuickPay.module(
          stateListener: stateListener,
          merchant: merchant,
          presentationContextProvider: presentationContextProvider
        )
    ]
)

После успешной инициализации доступ к конфигурации и модулям осуществляется через синглтон YPay.instance.

Параметры YPay.initialize:

Параметр

Тип

Значение по умолчанию

Описание

environment

YPSDKEnvironment

Среда:

  • .production
  • .sandbox

locale

YPSDKLocale

Язык:

  • .ru
  • .en
  • .system

theme

YPSDKThemeColorScheme

.system

Цветовая схема:

  • .light
  • .dark
  • .system

enableLogging

Bool

false

Включить отладочные логи

modules

[YPayModule]

Список подключаемых модулей

Передавайте входящие URL и user activity в SDK из SceneDelegate. Метод deeplinkHandler автоматически маршрутизирует их к нужному модулю.

import YandexPayConfiguration

// Обработка кастомных URL-схем (OAuth-колбэки)
func scene(_ scene: UIScene, openURLContexts contexts: Set<UIOpenURLContext>) {
    guard YPay.isInitialized else { return }
    contexts.map(\.url).forEach { url in
        YPay.instance.deeplinkHandler.handleOpenURL(url)
    }
}

// Обработка Universal Links
func scene(_ scene: UIScene, continue userActivity: NSUserActivity) {
    guard YPay.isInitialized else { return }
    YPay.instance.deeplinkHandler.handleUserActivity(userActivity)
}

Примечание

Всегда проверяйте YPay.isInitialized перед обращением к YPay.instance, так как SceneDelegate может получить URL до момента инициализации SDK.

Настройка модулей

О настройке отдельных модулей Yandex Pay Kit читайте в соответствующих разделах документации.