الهوية الموحّدة وتسجيل الدخول على وسائل التواصل الاجتماعي

المصادقة الاجتماعية هي عملية مصادقة متعدّدة الخطوات تتيح لك تسجيل دخول مستخدم إلى حساب أو رابط. باستخدام علامة حالية.

تتيح كل من الأنظمة الأساسية الأصلية والويب إنشاء بيانات اعتماد يمكن تمريرها بعد ذلك إلى signInWithCredential أو linkWithCredential طرق. يمكنك بدلاً من ذلك بدء عملية المصادقة عبر نافذة منبثقة أو إعادة توجيه.

Google

يتم إعداد معظم الإعدادات من قبل عند استخدام "تسجيل الدخول بحساب Google" مع Firebase، ومع ذلك، عليك التأكد من إدخال تم ضبط مفتاح SHA1 للاستخدام مع Android. يمكنك الاطّلاع على كيفية إنشاء المفتاح في مستندات المصادقة

تأكد من أن "Google" تفعيل موفِّر خدمة تسجيل الدخول إلى وحدة تحكُّم Firebase

إذا سجّل المستخدم الدخول باستخدام حساب Google، بعد تسجيل الحساب يدويًا، سيجري موفِّر المصادقة تلقائيًا التغيير إلى Google، بسبب مفهوم عمليات المصادقة في Firebase الذي يتمثل في مقدمي الخدمات الموثوق بهم. يمكنك معرفة المزيد عن هذا هنا.

iOS+ وAndroid

وعلى الأنظمة الأساسية الأصلية، يجب توفّر مكتبة تابعة لجهة خارجية لبدء مسار المصادقة.

يمكنك تثبيت المكوّن الإضافي الرسمي google_sign_in.

بعد تثبيت بيانات الاعتماد، ابدأ عملية تسجيل الدخول وأنشِئ بيانات اعتماد جديدة:

import 'package:google_sign_in/google_sign_in.dart';

Future<UserCredential> signInWithGoogle() async {
  // Trigger the authentication flow
  final GoogleSignInAccount? googleUser = await GoogleSignIn().signIn();

  // Obtain the auth details from the request
  final GoogleSignInAuthentication? googleAuth = await googleUser?.authentication;

  // Create a new credential
  final credential = GoogleAuthProvider.credential(
    accessToken: googleAuth?.accessToken,
    idToken: googleAuth?.idToken,
  );

  // Once signed in, return the UserCredential
  return await FirebaseAuth.instance.signInWithCredential(credential);
}

الويب

توفِّر حزمة تطوير البرامج (SDK) لمنصّة Firebase على الويب دعمًا لمعالجة مسار المصادقة تلقائيًا باستخدام مشروع Firebase. على سبيل المثال:

إنشاء موفِّر مصادقة Google، مع توفير أي نطاق إذن إضافي التي تريد الحصول عليها من المستخدم:

GoogleAuthProvider googleProvider = GoogleAuthProvider();

googleProvider.addScope('https://www.googleapis.com/auth/contacts.readonly');
googleProvider.setCustomParameters({
  'login_hint': 'user@example.com'
});

قدِّم بيانات الاعتماد إلى الطريقة signInWithPopup. سيؤدي ذلك إلى تشغيل نافذة جديدة ليظهر تطلب من المستخدم تسجيل الدخول إلى مشروعك. بدلاً من ذلك، يمكنك استخدام signInWithRedirect للاحتفاظ عملية المصادقة في النافذة نفسها.

Future<UserCredential> signInWithGoogle() async {
  // Create a new provider
  GoogleAuthProvider googleProvider = GoogleAuthProvider();

  googleProvider.addScope('https://www.googleapis.com/auth/contacts.readonly');
  googleProvider.setCustomParameters({
    'login_hint': 'user@example.com'
  });

  // Once signed in, return the UserCredential
  return await FirebaseAuth.instance.signInWithPopup(googleProvider);

  // Or use signInWithRedirect
  // return await FirebaseAuth.instance.signInWithRedirect(googleProvider);
}

ألعاب Google Play (على أجهزة Android فقط)

يجب التأكّد من أنّ صفحة "ألعاب Play" تفعيل موفِّر خدمة تسجيل الدخول إلى وحدة تحكُّم Firebase يُرجى اتّباع هذه التعليمات لإعداد مشروع Firebase على "ألعاب Play".

يُرجى اتّباع هذه التعليمات لضبط "خدمات ألعاب Play" من خلال تطبيق Firebase

Android

Future<void> _signInWithPlayGames() async {
  // Get server auth code from 3rd party provider
  // See PR description for details on how you might get the server auth code:
  // https://github.com/firebase/flutterfire/pull/12201#issue-2100392487
  final serverAuthCode = '...';
  final playGamesCredential = PlayGamesAuthProvider.credential(
                                          serverAuthCode: serverAuthCode);

  await FirebaseAuth.instance
    .signInWithCredential(playGamesCredential);
}

Facebook

قبل البدء، عليك إعداد تطبيق Facebook Developer واتّباع خطوات عملية الإعداد لتفعيل تسجيل الدخول إلى Facebook.

تأكد من أن "Facebook" تفعيل موفِّر خدمة تسجيل الدخول إلى وحدة تحكُّم Firebase مع تعيين معرّف وسر تطبيق Facebook.

iOS+ وAndroid

وعلى الأنظمة الأساسية الأصلية، يلزم توفُّر مكتبة تابعة لجهة خارجية من أجل تثبيت حزمة تطوير البرامج (SDK) على Facebook وبدء مسار المصادقة.

ثبِّت المكوّن الإضافي flutter_facebook_auth.

ستحتاج إلى اتباع الخطوات الواردة في مستندات المكون الإضافي للتأكد من أن كلاً من تم إعداد حِزم تطوير البرامج (SDK) على Facebook لنظام التشغيل iOS بشكل صحيح. بعد الانتهاء، ابدأ عملية تسجيل الدخول وأنشِئ بيانات اعتماد على Facebook وسجِّل دخول المستخدم:

import 'package:flutter_facebook_auth/flutter_facebook_auth.dart';

Future<UserCredential> signInWithFacebook() async {
  // Trigger the sign-in flow
  final LoginResult loginResult = await FacebookAuth.instance.login();

  // Create a credential from the access token
  final OAuthCredential facebookAuthCredential = FacebookAuthProvider.credential(loginResult.accessToken.token);

  // Once signed in, return the UserCredential
  return FirebaseAuth.instance.signInWithCredential(facebookAuthCredential);
}

الويب

وعلى الويب، توفر حزمة تطوير البرامج (SDK) لمنصّة Firebase دعمًا لمعالجة تدفق المصادقة تلقائيًا باستخدام يتم تقديم تفاصيل تطبيق Facebook في وحدة تحكُّم Firebase. على سبيل المثال:

إنشاء موفِّر لخدمة Facebook، مع توفير أي نطاق إذن إضافي التي ترغب في الحصول عليها من المستخدم.

تأكَّد من إضافة معرّف الموارد المنتظم (URI) لإعادة توجيه OAuth من وحدة تحكُّم Firebase على أنّه معرّف موارد منتظم (URI) صالح لإعادة توجيه OAuth. في تطبيق Facebook.

FacebookAuthProvider facebookProvider = FacebookAuthProvider();

facebookProvider.addScope('email');
facebookProvider.setCustomParameters({
  'display': 'popup',
});

قدِّم بيانات الاعتماد إلى الطريقة signInWithPopup. سيؤدي ذلك إلى تشغيل نافذة جديدة لتطلب من المستخدم تسجيل الدخول إلى تطبيق Facebook:

Future<UserCredential> signInWithFacebook() async {
  // Create a new provider
  FacebookAuthProvider facebookProvider = FacebookAuthProvider();

  facebookProvider.addScope('email');
  facebookProvider.setCustomParameters({
    'display': 'popup',
  });

  // Once signed in, return the UserCredential
  return await FirebaseAuth.instance.signInWithPopup(facebookProvider);

  // Or use signInWithRedirect
  // return await FirebaseAuth.instance.signInWithRedirect(facebookProvider);
}

Apple

iOS+

قبل البدء، عليك ضبط ميزة "تسجيل الدخول باستخدام حساب Apple". وتفعيل Apple كموفِّر لتسجيل الدخول

بعد ذلك، تأكَّد من تفعيل ميزة "تسجيل الدخول باستخدام حساب Apple" في تطبيقات Runner. قدراتي.

Android

قبل البدء، عليك ضبط ميزة "تسجيل الدخول باستخدام حساب Apple". وتفعيل Apple كموفِّر لتسجيل الدخول

الويب

قبل البدء، عليك ضبط ميزة "تسجيل الدخول باستخدام حساب Apple". وتفعيل Apple كموفِّر لتسجيل الدخول

import 'package:firebase_auth/firebase_auth.dart';

Future<UserCredential> signInWithApple() async {
  final appleProvider = AppleAuthProvider();
  if (kIsWeb) {
    await FirebaseAuth.instance.signInWithPopup(appleProvider);
  } else {
    await FirebaseAuth.instance.signInWithProvider(appleProvider);
  }
}

تسجيل الدخول إلى منصة Apple فقط

يمكن أيضًا تسجيل الدخول إلى Apple على الأنظمة الأساسية لنظام التشغيل iOS+ من خلال الطريقة التالية:

// Implement a function that generates a nonce. See iOS documentation for how to create a nonce:
// https://firebase.google.com/docs/auth/ios/apple#sign_in_with_apple_and_authenticate_with_firebase
String rawNonce = createNonce();
// Create a SHA-256 hash of the nonce. Consider using the `crypto` package from the pub.dev registry.
String hashSHA256String = createHashSHA256String(rawNonce);
// Use the hash of the nonce to get the idToken. Consider using the `sign_in_with_apple` plugin from the pub.dev registry.
String idToken = await getIdToken();

final fullName = AppleFullPersonName(
  familyName: 'Name',
  givenName: 'Your',
);
// Use the `rawNonce` and `idToken` to get the credential
final credential = AppleAuthProvider.credentialWithIDToken(
  idToken,
  rawNonce,
  fullName,
);

await FirebaseAuth.instance.signInWithCredential(credential);

إبطال الرموز المميّزة للمصادقة من Apple

يؤدي تسجيل الدخول إلى Apple على منصات Apple إلى عرض رمز تفويض يمكن استخدامه لإبطال الرمز المميز لمصادقة Apple باستخدام revokeTokenWithAuthorizationCode() واجهة برمجة التطبيقات.

import 'package:firebase_auth/firebase_auth.dart';

Future<UserCredential> signInWithApple() async {
  final appleProvider = AppleAuthProvider();

  UserCredential userCredential = await FirebaseAuth.instance.signInWithPopup(appleProvider);
  // Keep the authorization code returned from Apple platforms
  String? authCode = userCredential.additionalUserInfo?.authorizationCode;
  // Revoke Apple auth token
  await FirebaseAuth.instance.revokeTokenWithAuthorizationCode(authCode!);
}

Apple Game Center (Apple فقط)

تأكَّد من أنّ "مركز الألعاب" تفعيل موفِّر خدمة تسجيل الدخول إلى وحدة تحكُّم Firebase اتّبِع هذه التعليمات لإعداد مشروع Firebase في مركز Game Center.

يجب تسجيل الدخول باستخدام "مركز الألعاب" قبل إصدار بيانات اعتماد في "مركز ألعاب Firebase" وتسجيل الدخول إليه عبر Firebase. إليك بعض التعليمات حول كيفية تحقيق ذلك.

iOS+

Future<void> _signInWithGameCenter() async {
  final credential = GameCenterAuthProvider.credential();
  await FirebaseAuth.instance
      .signInWithCredential(credential);
}

Microsoft

import 'package:firebase_auth/firebase_auth.dart';

Future<UserCredential> signInWithMicrosoft() async {
  final microsoftProvider = MicrosoftAuthProvider();
  if (kIsWeb) {
    await FirebaseAuth.instance.signInWithPopup(microsoftProvider);
  } else {
    await FirebaseAuth.instance.signInWithProvider(microsoftProvider);
  }
}

Twitter

التأكّد من استخدام "Twitter" تم تفعيل موفِّر خدمة تسجيل الدخول على وحدة تحكُّم Firebase مع مفتاح واجهة برمجة التطبيقات ومجموعة سر واجهة برمجة التطبيقات. تأكَّد من معرّف الموارد المنتظم (URI) لإعادة توجيه OAuth عبر Firebase (مثل my-app-12345.firebaseapp.com/__/auth/handler) كعنوان URL لمعاودة الاتصال في صفحة إعدادات تطبيقك ضمن إعدادات تطبيق Twitter.

قد تحتاج أيضًا إلى طلب مستوى وصول مرتفع من واجهة برمجة التطبيقات استنادًا إلى تطبيقك.

iOS+

عليك ضبط مخطّط عنوان URL المخصّص على النحو الموضّح في الخطوة 1 في دليل iOS.

Android

إذا لم تحدد بعد الملف المرجعي لخوارزمية SHA-1 لتطبيقك، يمكنك إجراء ذلك من صفحة الإعدادات. بوحدة تحكم Firebase. راجع مصادقة البرنامج للحصول على تفاصيل حول كيفية الحصول على الملف المرجعي لخوارزمية SHA-1 لتطبيقك.

الويب

تعمل بطريقة غير تقليدية.

import 'package:firebase_auth/firebase_auth.dart';

Future<void> _signInWithTwitter() async {
  TwitterAuthProvider twitterProvider = TwitterAuthProvider();

  if (kIsWeb) {
    await FirebaseAuth.instance.signInWithPopup(twitterProvider);
  } else {
    await FirebaseAuth.instance.signInWithProvider(twitterProvider);
  }
}

GitHub

يُرجى التأكُّد من إعداد تطبيق OAuth من إعدادات مطوّر برامج GitHub و أن "GitHub" موفِّر خدمة تسجيل الدخول مفعّل في وحدة تحكُّم Firebase بمعرف العميل والسر، مع تعيين عنوان URL لمعاودة الاتصال في تطبيق GitHub.

iOS+ وAndroid

بالنسبة إلى الأنظمة الأساسية الأصلية، يجب إضافة google-services.json وGoogleService-Info.plist.

بالنسبة إلى نظام التشغيل iOS، أضِف مخطط عنوان URL المخصّص كما هو موضّح في دليل iOS في الخطوة 1.

Future<UserCredential> signInWithGitHub() async {
  // Create a new provider
  GithubAuthProvider githubProvider = GithubAuthProvider();

  return await FirebaseAuth.instance.signInWithProvider(githubProvider);
}

الويب

وعلى الويب، توفر حزمة GitHub SDK الدعم للتعامل تلقائيًا مع تدفق المصادقة باستخدام تتوفّر تفاصيل تطبيق GitHub في وحدة تحكُّم Firebase. تأكّد من إضافة عنوان URL لمعاودة الاتصال في "وحدة تحكُّم Firebase" كعنوان URL لمعاودة الاتصال في تطبيق GitHub على وحدة تحكم المطوّرين.

على سبيل المثال:

أنشِئ موفِّر GitHub وقدِّم بيانات الاعتماد لطريقة signInWithPopup. سيؤدي ذلك إلى تشغيل نافذة جديدة تطلب من المستخدم تسجيل الدخول إلى تطبيق GitHub:

Future<UserCredential> signInWithGitHub() async {
  // Create a new provider
  GithubAuthProvider githubProvider = GithubAuthProvider();

  // Once signed in, return the UserCredential
  return await FirebaseAuth.instance.signInWithPopup(githubProvider);

  // Or use signInWithRedirect
  // return await FirebaseAuth.instance.signInWithRedirect(githubProvider);
}

Yahoo

تأكد من أن "Yahoo" تم تفعيل موفِّر خدمة تسجيل الدخول على وحدة تحكُّم Firebase مع مفتاح واجهة برمجة التطبيقات ومجموعة سر واجهة برمجة التطبيقات. تأكَّد أيضًا من توفُّر معرّف الموارد المنتظم (URI) لإعادة توجيه OAuth عبر Firebase (مثل my-app-12345.firebaseapp.com/__/auth/handler) كعنوان URL لإعادة التوجيه في إعدادات شبكة مطوّري برامج Yahoo في تطبيقك.

iOS+

قبل البدء، عليك ضبط تسجيل الدخول إلى Yahoo لنظام التشغيل iOS وإضافة مخططات عناوين URL المخصّصة. في العدّاد (الخطوة 1).

Android

قبل البدء، عليك ضبط تسجيل الدخول إلى Yahoo على جهاز Android.

يُرجى تذكّر إضافة بصمة إصبع SHA-1 لتطبيقك.

الويب

تعمل بطريقة غير تقليدية.

import 'package:firebase_auth/firebase_auth.dart';

Future<UserCredential> signInWithYahoo() async {
  final yahooProvider = YahooAuthProvider();
  if (kIsWeb) {
    await _auth.signInWithPopup(yahooProvider);
  } else {
    await _auth.signInWithProvider(yahooProvider);
  }
}

استخدام رمز الدخول عبر OAuth

باستخدام AuthProvider، يمكنك استرداد رمز الدخول المرتبط بموفِّر الهوية. عن طريق تقديم الطلب التالي.

final appleProvider = AppleAuthProvider();

final user = await FirebaseAuth.instance.signInWithProvider(appleProvider);
final accessToken = user.credential?.accessToken;

// You can send requests with the `accessToken`

ربط موفِّر مصادقة

إذا كنت تريد ربط مقدّم خدمة بمستخدم حالي، يمكنك اتّباع الطريقة التالية: السهام await FirebaseAuth.instance.signInUnknownly();

Final appleProvider = AppleAuthProvider();

if (kIsWeb) { await FirebaseAuth.instance.currentUser?.linkWithPopup(appleProvider);

// يمكنك أيضًا استخدام linkWithRedirect. } else { await FirebaseAuth.instance.currentUser?.linkWithProvider(appleProvider); }

// تمت ترقية حسابك كمستخدم مجهول الهوية لتتمكّن من التواصل مع ميزة "تسجيل الدخول باستخدام حساب Apple" ```

إعادة المصادقة مع مقدّم الخدمة

يمكن استخدام النمط نفسه مع reauthenticateWithProvider، والذي يمكن استخدامه لاسترداد بيانات جديدة. بيانات اعتماد للعمليات الحساسة التي تتطلب تسجيل دخول مؤخرًا.

final appleProvider = AppleAuthProvider();

if (kIsWeb) {
  await FirebaseAuth.instance.currentUser?.reauthenticateWithPopup(appleProvider);

  // Or you can reauthenticate with a redirection
  // await FirebaseAuth.instance.currentUser?.reauthenticateWithRedirect(appleProvider);
} else {
  await FirebaseAuth.instance.currentUser?.reauthenticateWithProvider(appleProvider);
}

// You can now perform sensitive operations