ورود با Apple
کاربران را از طریق Abrova Auth با Apple وارد کنید. اپ ورود بومی Apple را با nonce هششده اجرا میکند؛ ابرووا ID token مربوط به Apple را برای bundle IDها و Services IDهای شما بررسی میکند. کلید حذف حساب که ورود با Apple را لغو میکند هم در این صفحه آمده است.
اپ شما ورودِ خودِ Apple را اجرا میکند و یک ID token از Apple میگیرد. SDK این توکن را به Abrova Auth میفرستد؛ Abrova Auth بررسی میکند که Apple آن را برای یکی از شناسههای اپِ شما امضا کرده باشد و کاربر را وارد میکند. در iOS، SDK میتواند کل صفحهی Apple را برایتان اجرا کند.
اپ iOS که ورود با Google (یا ورود شخص ثالث دیگری) دارد باید ورود با Apple را هم ارائه کند، و اپی که اجازهی ساخت حساب میدهد باید اجازهی حذف آن را هم داخل اپ بدهد. Abrova Auth از هر دو پشتیبانی میکند.
ورود با Apple به اتصال به Apple نیاز دارد که از ایران ممکن است ناپایدار باشد. ناشناس، ایمیل و رمز عبور، لینک یکبارمصرف یا کد تلگرام را هم ارائه کنید: این روشها به Apple یا Google وابسته نیستند.
راهاندازی در کنسول#
Abrova Auth › روشهای ورود را باز کنید، Apple را روشن کنید و شناسههایتان را وارد کنید:
| فیلد | چه چیزی وارد کنید |
|---|---|
| Bundle IDها (اپهای iOS) | bundle id هر اپ iOS یا macOS که از صفحهی بومی Apple استفاده میکند، مثلاً com.example.app. |
| Services IDها (وب و Android) | Services ID که در Apple Developer portal برای ورود با Apple روی وب یا Android ساختهاید. |
Abrova Auth فقط ID tokenی از Apple را میپذیرد که برای یکی از این شناسهها صادر شده باشد. توکنی که Apple برای هر اپ دیگری صادر کرده رد میشود.
کلید حذف حساب (توصیهشده)
Apple از اپها میخواهد وقتی کاربر حسابش را حذف میکند، ورود با Apple او را لغو کنند. برای اینکه Abrova Auth این کار را انجام دهد، در Apple Developer portal یک Sign in with Apple key بسازید (Certificates, Identifiers & Profiles › Keys) و در همان بخش Apple اینها را وارد کنید:
| فیلد | کجا پیدایش کنید |
|---|---|
| Team ID | ۱۰ کاراکتر، در Apple Developer › Membership. |
| Key ID | ۱۰ کاراکتر، کنار خود کلید نمایش داده میشود. |
| کلید خصوصی (.p8) | کل فایل. رمزگذاریشده ذخیره میشود و دیگر نمایش داده نمیشود. |
سپس هنگام ورود کاربر، authorizationCode مربوط به Apple را بفرستید (SDKها نشان میدهند کجا). Abrova Auth این کد را وقتی کاربر برای اولین بار با Apple ثبتنام میکند (یا Apple را وصل میکند) استفاده میکند، پس کلید را پیش از انتشار اپ اضافه کنید: ورود با Apple کاربرانی که پیش از ذخیرهی کلید ثبتنام کردهاند قابل لغو نیست. بدون کلید یا کد هم حذف حساب کاربر را حذف میکند؛ فقط لغو در سمت Apple انجام نمیشود.
مقدار nonce#
nonce، ID token مربوط به Apple را به همین یک ورود گره میزند تا توکنی که شنود شده دوباره قابل استفاده نباشد:
- با تابع کمکی SDK یک nonce خام تصادفی بسازید (۱۶ تا ۲۵۶ کاراکتر).
- SHA-256 آن را بهصورت hex با حروف کوچک به Apple بدهید.
- مقدار خام را به Abrova Auth بدهید.
Abrova Auth بررسی میکند که این دو با هم جور باشند و هر nonce را فقط یک بار میپذیرد. ID token مربوط به Apple هم باید کمتر از ۱۰ دقیقه عمر داشته باشد.
| SDK | nonce خام | مقدار برای Apple |
|---|---|---|
| Flutter | AbrovaAuthNonce.generate() | AbrovaAuthNonce.sha256Hex(raw) |
| iOS | AbrovaNonce.generate() | AbrovaNonce.sha256(raw) |
| Android | AbrovaNonce.generate() | AbrovaNonce.sha256(raw) |
| Web، React Native | (await auth.createNonce()).rawNonce | (await auth.createNonce()).hashedNonce |
ورود#
iOS: SDK صفحهی Apple را اجرا میکند
قابلیت Sign in with Apple را به target اپ اضافه کنید، سپس:
try await AbrovaAuth.shared.signInWithAppleNative()
SDK خودش nonce را میسازد، صفحهی Apple را نشان میدهد و ID token، کد authorization و نامی را که Apple در اولین ورود میدهد ارسال میکند. وقتی کاربر صفحه را ببندد، خطای .canceled میدهد.
Flutter
با پکیج sign_in_with_apple:
final raw = AbrovaAuthNonce.generate();
final apple = await SignInWithApple.getAppleIDCredential(
scopes: [AppleIDAuthorizationScopes.email, AppleIDAuthorizationScopes.fullName],
nonce: AbrovaAuthNonce.sha256Hex(raw),
);
await AbrovaAuth.instance.signInWithApple(
idToken: apple.identityToken!,
rawNonce: raw,
authorizationCode: apple.authorizationCode, // lets account deletion revoke Apple
name: [apple.givenName, apple.familyName].whereType<String>().join(' '),
);Android
ورود وب Apple را با Services ID خودتان و AbrovaNonce.sha256(rawNonce) بهعنوان nonce اجرا کنید، سپس id_token و code را که Apple برمیگرداند بفرستید:
AbrovaAuth.shared.signInWithApple(idToken, rawNonce, authorizationCode = code)
Web و React Native
از Sign in with Apple JS (وب) یا کتابخانهی ورود با Apple در React Native استفاده کنید و hashedNonce را بهعنوان nonce بدهید:
const { rawNonce, hashedNonce } = await auth.createNonce();
// ... run Apple's sign-in with nonce: hashedNonce, then:
await auth.signInWithApple({ idToken, rawNonce, authorizationCode, name });نام و ایمیل#
Apple نام کاربر را فقط در اولین ورود میدهد، و ایمیل ممکن است یک آدرس private relay باشد. Abrova Auth آنها را (رمزگذاریشده) فقط وقتی ذخیره میکند که ذخیرهی اطلاعات پروفایل در Abrova Auth › تنظیمات روشن باشد. اگر اپ شما به نام نیاز دارد، آن را در اولین ورود در دادههای خودتان ذخیره کنید.
وصل کردن Apple به کاربرِ واردشده#
برای ارتقای کاربر ناشناس، فراخوانی link را با همان آرگومانها به کار ببرید: linkApple(...)، یا در iOS signInWithAppleNative(link: true). شناسهی کاربر همان میماند. اگر این Apple ID از قبل متعلق به کاربر دیگری باشد، فراخوانی با PROVIDER_ALREADY_LINKED شکست میخورد.
خطاها#
| کد | معنا |
|---|---|
| NOT_CONFIGURED | Apple روشن است، اما هیچ bundle ID یا Services ID وارد نشده است. |
| INVALID_ID_TOKEN | Apple آن را امضا نکرده، برای شناسهی اپ دیگری صادر شده، بیش از ۱۰ دقیقه عمر دارد، یا nonce آن SHA-256 همان nonce خامی که فرستادید نیست. |
| INVALID_INPUT | nonce خام فرستاده نشده یا بین ۱۶ تا ۲۵۶ کاراکتر نیست. |
| NONCE_REUSED | این nonce قبلاً استفاده شده است. برای هر ورود یک nonce جدید بسازید. |
| PROVIDER_ALREADY_LINKED | فقط هنگام وصل کردن: این Apple ID متعلق به کاربر دیگری است. |
| METHOD_DISABLED | ورود با Apple برای پروژه خاموش است. |