SDK iOS
Abrova Auth برای iOS و macOS (Abrova Auth، Swift). ورود بومی با Apple در یک فراخوانی، بهعلاوهی ورود ناشناس، Google، ایمیل و رمز عبور، لینک یکبارمصرف و تلگرام. نشست در Keychain؛ token provider برای همهی SDKهای ابرووا.
فقط از کلید API عمومی استفاده میکند. قرار دادنش در اپ امن است
signInWithAppleNative() صفحهی Apple را اجرا میکند، همراه nonce
refresh token فقط روی همین دستگاه؛ access token در حافظه
tokenProvider و strictTokenProvider برای SDKهای دیگر ابرووا
API مبتنی بر async/await
linkApple، linkGoogle و linkPassword شناسهی کاربر را حفظ میکنند
این صفحه 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 → آدرس مخزن را وارد کنید:
https://github.com/Abrova-co/abrova-auth-ios-sdk
یا آن را به Package.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_...) پیکربندی کنید. نشستی که در اجرای قبلی ذخیره شده بازیابی میشود.
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_...). هرگز کلید سرور نه. |
| keychainAccessGroup | nil | نشست را با app extensionهای شما به اشتراک میگذارد. |
Keychain بعد از حذف اپ هم باقی میماند، به همین دلیل SDK نشستی را که از نصب قبلی مانده فراموش میکند: نصب تازه در حالت خارجشده شروع میشود.
ورود#
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های دیگر ابرووا#
AbrovaTrace.shared.setUserId(auth.currentUserId) به ابرووا تریس وصل کنید.// 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 اضافه کنید. سپس:
try await AbrovaAuth.shared.signInWithAppleNative()
SDK صفحهی Apple را با یک nonce اجرا میکند و کد authorization (تا حذف حساب بتواند ورود با Apple را لغو کند) و نامی را که Apple در اولین ورود میدهد ارسال میکند. وقتی کاربر صفحه را ببندد، خطای .canceled میدهد. اگر درخواست Apple را خودتان اجرا میکنید:
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 درخواست کنید، سپس:
try await auth.signInWithGoogle(idToken: idToken, rawNonce: rawNonce)
ورود با Google به اتصال به Google نیاز دارد که بعضی کاربران در ایران ندارند. ناشناس، ایمیل و رمز عبور، لینک یکبارمصرف و کد تلگرام بدون Google کار میکنند، پس دستکم یکی از آنها را هم ارائه کنید. ورود با Google را ببینید.
ایمیل و رمز عبور
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 را از لینکی که اپ با آن باز شده میخواند.
لینک یکبارمصرف
try await auth.sendMagicLink(email: email, redirectURL: "myapp://auth/magic") // When the app is opened with the link: try await auth.signInWithMagicLink(url: openedURL)
تلگرام
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")ارتقای کاربر ناشناس#
وصل کردن شناسهی کاربر را حفظ میکند، پس هر چه ساخته مال خودش میماند:
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.
}کاربر فعلی#
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خروج و حذف حساب#
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 تصمیم بگیرید:
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 › روشهای ورود روشن کنید.