ابرووا
شروع رایگان
☰ فهرست مستندات · SDK آی‌اواس

SDK iOS

Abrova Auth برای iOS و macOS (Abrova Auth، Swift). ورود بومی با Apple در یک فراخوانی، به‌علاوه‌ی ورود ناشناس، Google، ایمیل و رمز عبور، لینک یک‌بارمصرف و تلگرام. نشست در Keychain؛ token provider برای همه‌ی SDKهای ابرووا.

iOS 0.1.1iOS 13+macOS 12+Swift 5.7+به‌روزرسانی: ۵ آبان ۱۴۰۵
امن برای کلاینت

فقط از کلید API عمومی استفاده می‌کند. قرار دادنش در اپ امن است

Apple در یک فراخوانی

signInWithAppleNative() صفحه‌ی Apple را اجرا می‌کند، همراه nonce

Keychain

refresh token فقط روی همین دستگاه؛ access token در حافظه

token providerها

tokenProvider و strictTokenProvider برای SDKهای دیگر ابرووا

Swift Concurrency

API مبتنی بر async/await

ارتقای مهمان‌ها

linkApple، linkGoogle و linkPassword شناسه‌ی کاربر را حفظ می‌کنند

SDK iOS برای Abrova Auth نسخه‌ی v0.1.1.

این صفحه AbrovaAuth نسخه‌ی 0.1.1 را توضیح می‌دهد.

پیش‌نیازها.

iOS 13 یا بالاتر، یا macOS 12 یا بالاتر. Swift 5.7 یا بالاتر.

از دستیار هوش مصنوعی استفاده می‌کنید؟ این صفحه را با Copy page for AI به آن بدهید، یا همه‌ی مستندات را به‌صورت متن ساده از /docs/llms.txt بگیرید. دستیارهای هوش مصنوعی را ببینید.

نصب#

با Swift Package Manager نصب کنید. در Xcode: File → Add Packages → آدرس مخزن را وارد کنید:

text
https://github.com/Abrova-co/abrova-auth-ios-sdk

یا آن را به Package.swift اضافه کنید:

swift
dependencies: [
    .package(url: "https://github.com/Abrova-co/abrova-auth-ios-sdk.git", from: "0.1.1")
]

سپس AbrovaAuth را به وابستگی‌های target اضافه کنید.

در کنسول ابرووا، Abrova Auth را برای پروژه (تنظیمات › محصولات) و روش‌های ورود دلخواه را (Abrova Auth › روش‌های ورود) روشن کنید.

مقداردهی اولیه#

SDK را یک بار هنگام شروع اپ، پیش از هر فراخوانی دیگر، با کلید API عمومی (ab_live_...) پیکربندی کنید. نشستی که در اجرای قبلی ذخیره شده بازیابی می‌شود.

swift
import AbrovaAuth

@main
struct MyApp: App {
    init() {
        AbrovaAuth.shared.configure(apiKey: "ab_live_your_api_key")
    }
    var body: some Scene { WindowGroup { ContentView() } }
}
پارامترپیش‌فرضتوضیح
apiKey-کلید API عمومی شما (ab_live_...). هرگز کلید سرور نه.
keychainAccessGroupnilنشست را با app extensionهای شما به اشتراک می‌گذارد.

Keychain بعد از حذف اپ هم باقی می‌ماند، به همین دلیل SDK نشستی را که از نصب قبلی مانده فراموش می‌کند: نصب تازه در حالت خارج‌شده شروع می‌شود.

ورود#

swift
let auth = AbrovaAuth.shared

let methods = try await auth.getMethods()
if auth.currentUserId == nil && methods.isEnabled("anonymous") {
    try await auth.signInAnonymously()
}
print(auth.currentUserId!) // ru_...

فقط دکمه‌های روش‌هایی را نشان دهید که methods.isEnabled(...) برایشان true است: anonymous، apple، google، password، magicLink، telegram.

استفاده از کاربر با SDKهای دیگر ابرووا#

به‌زودی. Abrova Sync، Chat، Push، Storage و A/B Testing به‌زودی می‌آیند. فراخوانی‌های زیر نشان می‌دهند کاربر Auth را چطور خواهند گرفت؛ امروز کاربر را با AbrovaTrace.shared.setUserId(auth.currentUserId) به ابرووا تریس وصل کنید.
swift
// Abrova Sync
sync.userTokens.provider = auth.tokenProvider

// Abrova Push
AbrovaPushConfig(apiKey: key, tokenProvider: auth.tokenProvider)

// Abrova Chat: create the client after sign-in
AbrovaChatConfig(apiKey: key, userId: auth.currentUserId!, tokenProvider: auth.strictTokenProvider)

وقتی کسی وارد نشده، tokenProvider مقدار nil برمی‌گرداند؛ strictTokenProvider خطا می‌دهد. هر دو توکنی برمی‌گردانند که پیش از انقضا تمدید شده است. بعد از ورود یا خروج، متد refresh آن SDK را صدا بزنید (مثلاً sync.refreshUserToken()). Abrova A/B Testing و موارد دیگر: استفاده با محصولات دیگر ابرووا.

روش‌های ورود#

هر روش صفحه‌ی خودش را با راه‌اندازی کنسول دارد: ناشناس، Apple، Google، ایمیل و رمز عبور، لینک یک‌بارمصرف، تلگرام.

ورود با Apple

قابلیت Sign in with Apple را به اپ و bundle ID را در Abrova Auth › روش‌های ورود › Apple اضافه کنید. سپس:

swift
try await AbrovaAuth.shared.signInWithAppleNative()

SDK صفحه‌ی Apple را با یک nonce اجرا می‌کند و کد authorization (تا حذف حساب بتواند ورود با Apple را لغو کند) و نامی را که Apple در اولین ورود می‌دهد ارسال می‌کند. وقتی کاربر صفحه را ببندد، خطای .canceled می‌دهد. اگر درخواست Apple را خودتان اجرا می‌کنید:

swift
let rawNonce = AbrovaNonce.generate()
request.nonce = AbrovaNonce.sha256(rawNonce)   // to Apple
// ... when Apple answers:
try await auth.signInWithApple(idToken: idToken, rawNonce: rawNonce,
                               authorizationCode: code, fullName: name)

ورود با Google

ID token مربوط به Google را با AbrovaNonce.sha256(rawNonce) به‌عنوان nonce درخواست کنید، سپس:

swift
try await auth.signInWithGoogle(idToken: idToken, rawNonce: rawNonce)

ورود با Google به اتصال به Google نیاز دارد که بعضی کاربران در ایران ندارند. ناشناس، ایمیل و رمز عبور، لینک یک‌بارمصرف و کد تلگرام بدون Google کار می‌کنند، پس دست‌کم یکی از آن‌ها را هم ارائه کنید. ورود با Google را ببینید.

ایمیل و رمز عبور

swift
let result = try await auth.signUp(email: email, password: password,
                                   redirectURL: "https://example.com/auth/verify")
// result.signedIn is false when the project requires a verified e-mail first.

try await auth.signIn(email: email, password: password)

try await auth.sendPasswordReset(email: email, redirectURL: "https://example.com/auth/reset")
try await auth.resetPassword(token: token, newPassword: newPassword) // ends every session
try await auth.verifyEmail(token: token)
try await auth.sendEmailVerification(redirectURL: "https://example.com/auth/verify")

AbrovaAuth.token(in: url) مقدار token را از لینکی که اپ با آن باز شده می‌خواند.

لینک یک‌بارمصرف

swift
try await auth.sendMagicLink(email: email, redirectURL: "myapp://auth/magic")
// When the app is opened with the link:
try await auth.signInWithMagicLink(url: openedURL)

تلگرام

swift
let code = try await auth.requestTelegramCode(phone: "+989121234567")
if !code.sent, let url = code.botURL { await UIApplication.shared.open(url) }
try await auth.verifyTelegramCode(phone: "+989121234567", code: "123456")

ارتقای کاربر ناشناس#

وصل کردن شناسه‌ی کاربر را حفظ می‌کند، پس هر چه ساخته مال خودش می‌ماند:

swift
do {
    try await auth.signInWithAppleNative(link: true)
    // or linkGoogle(idToken:rawNonce:), linkApple(...), linkPassword(email:password:)
} catch let error as AbrovaAuthError where error.code == .providerAlreadyLinked {
    // This Apple ID already belongs to another user.
}

کاربر فعلی#

swift
auth.currentUserId                  // nil when signed out
auth.isSignedIn
let user = try await auth.me()      // AbrovaUser: id, isAnonymous, emailVerified, createdAt, providers
auth.currentUser                    // the profile last loaded by me()

let listener = auth.addAuthStateListener { userId in
    // On the main queue: now, then on every sign-in, sign-out and session end
}
listener.remove()

let token = try await auth.getAccessToken() // if you call your own API with it

خروج و حذف حساب#

swift
await auth.signOut()                // this device; never fails
try await auth.signOutEverywhere()  // every device
try await auth.deleteAccount()      // required by the App Store for apps with sign-in

برای اینکه حذف چه چیزهایی را پاک می‌کند، امنیت و داده‌ها را ببینید.

مدیریت خطاها#

همه‌ی خطاها از نوع AbrovaAuthError هستند. بر اساس code تصمیم بگیرید:

swift
do {
    try await auth.signIn(email: email, password: password)
} catch let error as AbrovaAuthError {
    switch error.code {
    case .invalidCredentials: showError("Wrong e-mail or password")
    case .rateLimited: showError("Try again in \(error.retryAfterSec ?? 60) s")
    case .network: showError("No connection")
    default: showError("Sign-in failed")
    }
}

message یک راهنمای انگلیسی برای توسعه‌دهنده است. SDK علاوه بر کدهای سرور از .network، .canceled (کاربر صفحه‌ی Apple را بست)، .notSignedIn و .sdkNotConfigured (اول configure را صدا بزنید) استفاده می‌کند. خطای شبکه هرگز کاربر را خارج نمی‌کند. همه‌ی کدها: کدهای خطا.

عیب‌یابی#

SDK_NOT_CONFIGURED

AbrovaAuth.shared.configure(apiKey:) را هنگام شروع اپ، پیش از هر فراخوانی دیگر، صدا بزنید.

ورود با Apple با INVALID_ID_TOKEN شکست می‌خورد

bundle ID اپ را در Abrova Auth › روش‌های ورود › Apple، و قابلیت Sign in with Apple را به target اضافه کنید.

METHOD_DISABLED یا PRODUCT_DISABLED

Abrova Auth را در تنظیمات › محصولات و روش را در Abrova Auth › روش‌های ورود روشن کنید.

این صفحه مفید بود؟
گزارش مشکل