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

ورود با Apple

کاربران را از طریق Abrova Auth با Apple وارد کنید. اپ ورود بومی Apple را با nonce هش‌شده اجرا می‌کند؛ ابرووا ID token مربوط به Apple را برای bundle IDها و Services IDهای شما بررسی می‌کند. کلید حذف حساب که ورود با Apple را لغو می‌کند هم در این صفحه آمده است.

به‌روزرسانی: ۵ آبان ۱۴۰۵
ورود با Apple.

اپ شما ورودِ خودِ Apple را اجرا می‌کند و یک ID token از Apple می‌گیرد. SDK این توکن را به Abrova Auth می‌فرستد؛ Abrova Auth بررسی می‌کند که Apple آن را برای یکی از شناسه‌های اپِ شما امضا کرده باشد و کاربر را وارد می‌کند. در iOS، SDK می‌تواند کل صفحه‌ی Apple را برایتان اجرا کند.

قانون App Store.

اپ 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 را به همین یک ورود گره می‌زند تا توکنی که شنود شده دوباره قابل استفاده نباشد:

  1. با تابع کمکی SDK یک nonce خام تصادفی بسازید (۱۶ تا ۲۵۶ کاراکتر).
  2. SHA-256 آن را به‌صورت hex با حروف کوچک به Apple بدهید.
  3. مقدار خام را به Abrova Auth بدهید.

Abrova Auth بررسی می‌کند که این دو با هم جور باشند و هر nonce را فقط یک بار می‌پذیرد. ID token مربوط به Apple هم باید کمتر از ۱۰ دقیقه عمر داشته باشد.

SDKnonce خاممقدار برای Apple
FlutterAbrovaAuthNonce.generate()AbrovaAuthNonce.sha256Hex(raw)
iOSAbrovaNonce.generate()AbrovaNonce.sha256(raw)
AndroidAbrovaNonce.generate()AbrovaNonce.sha256(raw)
Web، React Native(await auth.createNonce()).rawNonce(await auth.createNonce()).hashedNonce

ورود#

iOS: SDK صفحه‌ی Apple را اجرا می‌کند

قابلیت Sign in with Apple را به target اپ اضافه کنید، سپس:

swift
try await AbrovaAuth.shared.signInWithAppleNative()

SDK خودش nonce را می‌سازد، صفحه‌ی Apple را نشان می‌دهد و ID token، کد authorization و نامی را که Apple در اولین ورود می‌دهد ارسال می‌کند. وقتی کاربر صفحه را ببندد، خطای .canceled می‌دهد.

Flutter

با پکیج sign_in_with_apple:

dart
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 برمی‌گرداند بفرستید:

kotlin
AbrovaAuth.shared.signInWithApple(idToken, rawNonce, authorizationCode = code)

Web و React Native

از Sign in with Apple JS (وب) یا کتابخانه‌ی ورود با Apple در React Native استفاده کنید و hashedNonce را به‌عنوان nonce بدهید:

typescript
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 › تنظیمات روشن باشد. اگر اپ شما به نام نیاز دارد، آن را در اولین ورود در داده‌های خودتان ذخیره کنید.

برای ارتقای کاربر ناشناس، فراخوانی link را با همان آرگومان‌ها به کار ببرید: linkApple(...)، یا در iOS signInWithAppleNative(link: true). شناسه‌ی کاربر همان می‌ماند. اگر این Apple ID از قبل متعلق به کاربر دیگری باشد، فراخوانی با PROVIDER_ALREADY_LINKED شکست می‌خورد.

خطاها#

کدمعنا
NOT_CONFIGUREDApple روشن است، اما هیچ bundle ID یا Services ID وارد نشده است.
INVALID_ID_TOKENApple آن را امضا نکرده، برای شناسه‌ی اپ دیگری صادر شده، بیش از ۱۰ دقیقه عمر دارد، یا nonce آن SHA-256 همان nonce خامی که فرستادید نیست.
INVALID_INPUTnonce خام فرستاده نشده یا بین ۱۶ تا ۲۵۶ کاراکتر نیست.
NONCE_REUSEDاین nonce قبلاً استفاده شده است. برای هر ورود یک nonce جدید بسازید.
PROVIDER_ALREADY_LINKEDفقط هنگام وصل کردن: این Apple ID متعلق به کاربر دیگری است.
METHOD_DISABLEDورود با Apple برای پروژه خاموش است.
این صفحه مفید بود؟
گزارش مشکل