·
SDK
Нативные виджеты для Android, Apple и JVM. Монохромный интерфейс, OAuth 2.0 + PKCE S256 и безопасное хранение токенов. SPKI pinning включается при наличии действующих пинов.
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 даёт пиксель-в-пиксель ту же картинку.
Три варианта кнопки
Виджет авторизации (интерактивный)
Переключите тему и язык — увидите ровно то же поведение, что у нативных SDK через TpidConfig.theme и TpidConfig.language.
Матрица платформ
| Платформа | SDK | Мин. OS | Native UI | Статус |
|---|---|---|---|---|
| Android phone/tablet | Kotlin | Android 7.0 (API 24) | Jetpack Compose | Available |
| Android TV | Kotlin (Device Flow) | Android 7.0 (API 24) | Compose Leanback | Available |
| Wear OS | Kotlin (Device Flow) | Wear OS 3 (API 30) | Compose for Wear | Available |
| iOS / iPadOS | Swift | iOS 15 | SwiftUI | Available |
| macOS | Swift | macOS 12 | SwiftUI | Available |
| tvOS | Swift (Device Flow) | tvOS 15 | SwiftUI | Available |
| watchOS | Swift (Device Flow) | watchOS 8 | SwiftUI | Available |
| visionOS | Swift | visionOS 1 | SwiftUI | Available |
| Windows 10/11 · Linux · macOS Desktop | JVM (Kotlin) | JDK 17 / Windows 10, Ubuntu 20.04, macOS 12 | Compose for Desktop | Available |
| Flutter (iOS+Android) | Dart wrapper вокруг native | Flutter 3.16 | Hosted native view | Q2 2026 |
| React Native | TS wrapper | RN 0.73 | Native fabric component | Q2 2026 |
| Windows WinUI 3 (native) | .NET 8 | Windows 10 1809 | WinUI 3 | Q3 2026 |
| Tizen · webOS · HarmonyOS | Device Flow (HTTP) | — | Партнёр | Device Flow |
| Xbox · PlayStation · Switch | Device 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.
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")) }
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 -> {} } } }
Swift SDK · SwiftUI
Единый пакет для iOS 15+, iPadOS 15+, macOS 12+, tvOS 15+, watchOS 8+, visionOS 1+. SwiftUI и URLSession; SPKI-пиннинг через делегат включается при наличии действующих пинов.
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.
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) } } } }
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).
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")) }
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 -> {} } } } }
// 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 generatescode_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 дополнительные ограничения устанавливает приложение-интегратор.
Проверка целостности
.sha256. Проверьте перед использованием:"
data-en="Each archive ships with a .sha256 sidecar. Verify before use:"
data-zh="每个存档都附带 .sha256 文件。使用前进行验证:">
Рядом с каждым архивом лежит файл .sha256. Проверьте перед использованием:
# 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 |
|---|---|---|
| Загрузка… | ||
