TOKEN PAY

· SDK

Нативные виджеты для Android, Apple и JVM. Монохромный интерфейс, OAuth 2.0 + PKCE S256 и безопасное хранение токенов. SPKI pinning включается при наличии действующих пинов.

Pre-release. Нативные SDK 3.0.1 доступны как открытые исходные архивы с SHA-256. Для интеграции используйте документацию и примеры ниже. Вопросы по подключению — info@tokenpay.space.

Актуальные релизы

.sha256 рядом)." data-en="Download directly. Each artifact ships with a SHA-256 checksum (.sha256 sidecar)." data-zh="直接下载。每个构件都附带 SHA-256 校验和(.sha256 附属文件)。"> Скачивайте напрямую. Каждый артефакт подписан SHA-256 (файл .sha256 рядом).

Live preview — кнопки и виджет

v3.0.1 Точная HTML/CSS-реплика того, как нативный TpidLoginButton и виджет выглядят в Android (Compose), Swift (SwiftUI) и JVM Desktop (Compose for Desktop). UI трёх SDK даёт пиксель-в-пиксель ту же картинку.

Три варианта кнопки

DARK PILL · variant = DARK для светлого фона приложения
LIGHT PILL · variant = LIGHT для тёмного фона приложения
ICON ONLY · variant = ICON_ONLY 48×48 — tab-bar, header, FAB

Виджет авторизации (интерактивный)

Переключите тему и язык — увидите ровно то же поведение, что у нативных SDK через TpidConfig.theme и TpidConfig.language.

maria@example.com

maria@example.com

maria@example.com

Полная документация — на /docs со всеми экранами и code-snippets.

Матрица платформ

Платформа SDK Мин. OS Native UI Статус
Android phone/tabletKotlinAndroid 7.0 (API 24)Jetpack ComposeAvailable
Android TVKotlin (Device Flow)Android 7.0 (API 24)Compose LeanbackAvailable
Wear OSKotlin (Device Flow)Wear OS 3 (API 30)Compose for WearAvailable
iOS / iPadOSSwiftiOS 15SwiftUIAvailable
macOSSwiftmacOS 12SwiftUIAvailable
tvOSSwift (Device Flow)tvOS 15SwiftUIAvailable
watchOSSwift (Device Flow)watchOS 8SwiftUIAvailable
visionOSSwiftvisionOS 1SwiftUIAvailable
Windows 10/11 · Linux · macOS DesktopJVM (Kotlin)JDK 17 / Windows 10, Ubuntu 20.04, macOS 12Compose for DesktopAvailable
Flutter (iOS+Android)Dart wrapper вокруг nativeFlutter 3.16Hosted native viewQ2 2026
React NativeTS wrapperRN 0.73Native fabric componentQ2 2026
Windows WinUI 3 (native).NET 8Windows 10 1809WinUI 3Q3 2026
Tizen · webOS · HarmonyOSDevice Flow (HTTP)—ПартнёрDevice Flow
Xbox · PlayStation · SwitchDevice Flow (HTTP)—ПартнёрDevice Flow

Android SDK · Kotlin + Jetpack Compose

Полностью нативный виджет без браузера. Min SDK 24 (Android 7.0), Target SDK 34. Зависимости: AndroidX Credentials, EncryptedSharedPreferences, OkHttp 4.12, Kotlin Coroutines.

1. Скачать и подключить
curl -L -O https://www.tokenpay.space/sdk/android/tokenpay-id-android-3.0.1.tar.gz
curl -L -O https://www.tokenpay.space/sdk/android/tokenpay-id-android-3.0.1.tar.gz.sha256
sha256sum -c tokenpay-id-android-3.0.1.tar.gz.sha256
tar -xzf tokenpay-id-android-3.0.1.tar.gz

# settings.gradle.kts
include(":tokenpay-id-sdk")
project(":tokenpay-id-sdk").projectDir = file("tokenpay-id-android-3.0.1/tokenpay-id-sdk")

# app/build.gradle.kts
dependencies { implementation(project(":tokenpay-id-sdk")) }
2. Compose usage
import space.tokenpay.id.*

// Application.onCreate()
TpidAuth.initialize(context, TpidConfig(
    clientId = "tpid_pk_your_key",
    redirectUri = "com.cupol.vpn:/auth/callback"
))

@Composable fun Login() {
    TpidLoginButton { result ->
        when (result) {
            is TpidResult.Success -> navigate(result.accessToken)
            is TpidResult.Failure -> toast(result.error.code)
            TpidResult.Cancelled -> {}
        }
    }
}

Полная документация в /docs →

Swift SDK · SwiftUI

Единый пакет для iOS 15+, iPadOS 15+, macOS 12+, tvOS 15+, watchOS 8+, visionOS 1+. SwiftUI и URLSession; SPKI-пиннинг через делегат включается при наличии действующих пинов.

1. Скачать и добавить в Xcode
curl -L -O https://www.tokenpay.space/sdk/swift/tokenpay-id-swift-3.0.1.tar.gz
curl -L -O https://www.tokenpay.space/sdk/swift/tokenpay-id-swift-3.0.1.tar.gz.sha256
shasum -a 256 -c tokenpay-id-swift-3.0.1.tar.gz.sha256
tar -xzf tokenpay-id-swift-3.0.1.tar.gz

# Xcode → File → Add Package Dependencies… → Add Local…
# Select the unpacked folder and add the TokenPayID product.
2. SwiftUI usage
import SwiftUI
import TokenPayID

@main struct MyApp: App {
    init() {
        TpidAuth.shared.initialize(config: .init(
            clientId: "tpid_pk_your_key",
            redirectURI: URL(string: "com.cupol.vpn:/auth/callback")!
        ))
    }
    var body: some Scene { WindowGroup { ContentView() } }
}

struct ContentView: View {
    var body: some View {
        TpidLoginButton { result in
            switch result {
            case .success(let s): print(s.user.email)
            case .cancelled: break
            case .failure(let e): print(e.code)
            }
        }
    }
}

Полная документация в /docs →

Desktop JVM SDK · Kotlin + Compose for Desktop

ComposePanel, JavaFX через ComposeFxPanel или standalone.)" data-en="One Kotlin package for JVM desktops: Windows 10/11, Linux (GNOME/KDE/any X11 or Wayland), macOS 12+. Uses JetBrains Compose for Desktop (same programming model as Jetpack Compose). Embeds into any JVM app (Swing via ComposePanel, JavaFX via ComposeFxPanel, or standalone)." data-zh="适用于 JVM 桌面的统一 Kotlin 包:Windows 10/11、Linux (GNOME/KDE/任意 X11 或 Wayland)、macOS 12+。使用 JetBrains Compose for Desktop(与 Jetpack Compose 相同的编程模型)。嵌入任何 JVM 应用程序。"> Единый Kotlin-пакет для десктопов на JVM: Windows 10/11, Linux (GNOME/KDE/любой X11 или Wayland), macOS 12+. Использует JetBrains Compose for Desktop (та же программная модель, что и Jetpack Compose). Работает в любом JVM приложении (IntelliJ-like IDE, Swing-проект через ComposePanel, JavaFX через ComposeFxPanel, или standalone).

1. Скачать и подключить
curl -L -O https://www.tokenpay.space/sdk/jvm-desktop/tokenpay-id-jvm-desktop-3.0.1.tar.gz
curl -L -O https://www.tokenpay.space/sdk/jvm-desktop/tokenpay-id-jvm-desktop-3.0.1.tar.gz.sha256
sha256sum -c tokenpay-id-jvm-desktop-3.0.1.tar.gz.sha256
tar -xzf tokenpay-id-jvm-desktop-3.0.1.tar.gz

# settings.gradle.kts
include(":tokenpay-id-jvm")
project(":tokenpay-id-jvm").projectDir = file("tokenpay-id-jvm-desktop-3.0.1/tokenpay-id-jvm")

# app/build.gradle.kts
plugins { id("org.jetbrains.compose") version "1.6.10" }
dependencies { implementation(project(":tokenpay-id-jvm")) }
2. Compose for Desktop usage
import androidx.compose.ui.window.*
import space.tokenpay.id.jvm.*

fun main() = application {
    TpidAuth.initialize(TpidConfig(
        clientId = "tpid_pk_your_key",
        redirectUri = "cupol-vpn://auth/callback"
    ))
    Window(onCloseRequest = ::exitApplication, title = "My App") {
        TpidLoginButton { result ->
            when (result) {
                is TpidResult.Success -> println("Signed in: ${result.session.user.email}")
                is TpidResult.Failure -> println("Error: ${result.error.code}")
                TpidResult.Cancelled -> {}
            }
        }
    }
}
3. Embed in Swing / JavaFX
// Swing
import androidx.compose.ui.awt.ComposePanel
val panel = ComposePanel()
panel.setContent { TpidLoginButton { /* ... */ } }
jframe.add(panel)

// JavaFX — wrap ComposePanel in SwingNode
val node = SwingNode()
SwingUtilities.invokeLater {
    val p = ComposePanel()
    p.setContent { TpidLoginButton { /* ... */ } }
    node.setContent(p)
}

Refresh-токен хранится через Windows DPAPI, macOS Keychain или Linux libsecret. Если системное хранилище недоступно, SDK держит сессию только в памяти процесса.

Модель угроз

  • PKCE S256 обязателен — code_verifier + code_challenge, приложение никогда не видит пароль." data-en="SDK generates code_verifier + code_challenge; the app never sees the password." data-zh="SDK 生成 code_verifier + code_challenge;应用程序永远看不到密码。">SDK генерирует code_verifier + code_challenge, приложение никогда не видит пароль.
  • TLS pinning — /sdk/tls-pins. Пока пины не настроены, действует системная проверка TLS." data-en="Android/JVM use OkHttp CertificatePinner; Apple uses URLSessionDelegate. SDKs accept valid SHA-256 SPKI pins from /sdk/tls-pins. System TLS validation applies until pins are configured." data-zh="Android/JVM 使用 OkHttp CertificatePinner,Apple 使用 URLSessionDelegate。SDK 从 /sdk/tls-pins 接受有效的 SHA-256 SPKI pin。配置 pin 前使用系统 TLS 验证。">Android/JVM используют OkHttp CertificatePinner, Apple — URLSessionDelegate. SDK принимает только действующие SHA-256 SPKI-пины из /sdk/tls-pins. Пока пины не настроены, действует системная проверка TLS.
  • Secure storage — EncryptedSharedPreferences (Android), Keychain (Apple), DPAPI/libsecret/Keychain (Desktop JVM). Refresh-токен никогда не попадает в plaintext-файл или SharedPreferences без шифрования.
  • Защита от скриншотов — Android-виджет включает FLAG_SECURE. На Apple и JVM дополнительные ограничения устанавливает приложение-интегратор.

Подробнее: модель угроз native widget в /docs →

Проверка целостности

.sha256. Проверьте перед использованием:" data-en="Each archive ships with a .sha256 sidecar. Verify before use:" data-zh="每个存档都附带 .sha256 文件。使用前进行验证:"> Рядом с каждым архивом лежит файл .sha256. Проверьте перед использованием:

bash / PowerShell
# Linux / macOS
sha256sum -c tokenpay-id-android-3.0.1.tar.gz.sha256

# Windows PowerShell
(Get-FileHash tokenpay-id-android-3.0.1.tar.gz -Algorithm SHA256).Hash.ToLower() |
  Compare-Object (Get-Content tokenpay-id-android-3.0.1.tar.gz.sha256).Split(" ")[0]

SHA-256 текущих артефактов

Файл Размер SHA-256
Загрузка…

Нужна помощь?

Свяжитесь с нашей командой разработчиков