تسجيل الدخول المحدود في نظام iOS

يسمح تسجيل الدخول المحدود للمطوّرين بالإشارة إلى أن تسجيل الدخول يكون محدودًا من حيث إمكانية تتبع المستخدمين.

التوقعات

ستؤدي محاولة تسجيل الدخول الناجحة إلى ملء مثيل AuthenticationToken عام يوفر معلومات حول محاولة تسجيل الدخول والتي يمكن استخدامها في التحقق من المصادقة على خوادم العميل. بالإضافة إلى ذلك، سنقوم بملء مثيل ملف شخصي مشترك يحتوي على معلومات أساسية تتضمن معرفًا على مستوى التطبيق للمستخدم واسم المستخدم وصورة الملف الشخصي.

الأذونات

فيما يلي الأذونات المتوفرة التي يمكنك طلبها:

  • public_profile
  • email
  • gaming_profile
  • gaming_user_picture
  • user_age_range
  • user_birthday
  • user_friends
  • user_gender
  • user_hometown
  • user_link
  • user_location
  • user_messenger_contact

الأرقام الاعتباطية المخصصة

يسمح تسجيل الدخول المحدود للمطوّرين بإدخال رقم اعتباطي لاستخدامه في التحقق من محاولة المصادقة التي يتم إجراؤها على خوادمهم. للحصول على معلومات حول استخدام الرقم الاعتباطي في التحقق من صحة الرموز، راجع التحقق من صحة رمز OIDC لتسجيل الدخول المحدود.

التقييدات

لا يتم دعم مفتاح التطبيق، الذي يتم فيه عرض مربع حوار تسجيل الدخول إلى المستخدم في تطبيق فيسبوك لنظام iOS عندما يكون قد سجل الدخول بالفعل هناك، في تدفقات تسجيل الدخول المحدود.

عناصر API الجديدة

توفر مجموعة Facebook SDK لنظام iOS قائمة تعداد FBSDKLoginTracking جديدة. علمًا بأن القيم الممكنة هي enabled وlimited. بالنسبة إلى تسجيل الدخول المحدود، يمكنك استخدام limited.

enum LoginTracking {
    case enabled
    case limited
}
typedef NS_ENUM(NSUInteger, FBSDKLoginTracking)
{
  FBSDKLoginTrackingEnabled,
  FBSDKLoginTrackingLimited,
} NS_SWIFT_NAME(LoginTracking);

بالإضافة إلى ذلك، يستخدم تسجيل الدخول المحدود FBSDKLoginConfiguration في تعديل السلوك الافتراضي لمحاولة تسجيل الدخول. يتم إنشاء هذا التكوين باستخدام خصائص افتراضية أو خصائص صريحة (Swift فقط) أو باستخدام مُهيئ واحد من عدة مهيئات:

init?(
    permissions: Set
initWithPermissions:(NSArray\<NSString *> *)permissions                                                          
           tracking:(FBSDKLoginTracking)tracking
              nonce:(NSString *)nonce

الخصائص

الخاصيةالوصف

requestedPermissions: Set<Permissions> (Swift)

الأذونات المطلوبة لمحاولة تسجيل الدخول. يتم التعيين افتراضيًا على مجموعة فارغة.

requestedPermissions: Set<String> (ObjC)

الأذونات المطلوبة لمحاولة تسجيل الدخول. يتم التعيين افتراضيًا على مجموعة فارغة.

tracking: LoginTracking

تفضيل تتبع تسجيل الدخول. يتم تعيين افتراضيًا على .enabled.

nonce: String

الرقم الاعتباطي اللازم لإنشاء عملية التكوين. سيتم استخدام أي رقم اعتباطي فريد إذا لم يتوفر رقم في الأسلوب الافتراضي.

تتعذر محاولة إنشاء عملية تكوين إذا لم تتم تلبية الشروط التالية:

  • يجب أن يكون الرقم الاعتباطي عبارة عن سلسلة غير فارغة لا تحتوي على مسافات بيضاء.

  • لا يمكنك طلب أذونات خارج نطاق التتبع. على سبيل المثال، لا يعمل طلب user_likes إذا كان التتبع بالقيمة .limited.

  • بالنسبة إلى الأذونات التي تطلبها، راجع القسم الأذونات.

تنفيذ تسجيل الدخول المحدود

لتنفيذ تسجيل الدخول المحدود في التطبيق باستخدام فئة إدارة تسجيل الدخول مباشرةً، يُرجى الترقية إلى أحدث إصدار من مجموعة Facebook SDK لنظام iOS واستخدام الرمز التالي:

let loginManager = LoginManager()

// Ensure the configuration object is valid
guard let configuration = LoginConfiguration(
	permissions:["email", "user_friends", "user_birthday", "user_age_range", "user_gender", "user_location", "user_hometown", "user_link"],  
	tracking: .limited,
	nonce: "123"
) 
else {
    return
}

loginManager.logIn(configuration: configuration) { result in
    switch result {
    case .cancelled, .failed:
        // Handle error
        break
    case .success:
        // getting user ID
        let userID = Profile.current?.userID

        // getting pre-populated email
        let email = Profile.current?.email

        // getting pre-populated friends list
        let friendIDs = Profile.current?.friendIDs

        // getting pre-populated user birthday
        let birthday = Profile.current?.birthday

        // getting pre-populated age range
        let ageRange = Profile.current?.ageRange

        // getting user gender
        let gender = Profile.current?.gender
  
        // getting user location
        let location = Profile.current?.location
  
        // getting user hometown
        let hometown = Profile.current?.hometown
  
        // getting user profile URL
        let profileURL = Profile.current?.linkURL
  
        // getting id token string
        let tokenString = AuthenticationToken.current?.tokenString
    }
}
FBSDKLoginManager *loginManager = [FBSDKLoginManager new];
FBSDKLoginConfiguration *configuration =
  [[FBSDKLoginConfiguration alloc] initWithPermissions:@[@"email", @"user_friends", @"user_birthday", @"user_age_range", @"user_hometown", @"user_location", @"user_gender", @"user_link"]
                                              tracking:FBSDKLoginTrackingLimited
                                                 nonce:@"123"];
[loginManager logInFromViewController:self
                        configuration:configuration
                           completion:^(FBSDKLoginManagerLoginResult * result, NSError *error) {
  if (!error && !result.isCancelled) {
    // Login successful

    // getting user ID
    NSString *userID =
      FBSDKProfile.currentProfile.userID;

    // getting id token string
    NSString *idTokenString =
      FBSDKAuthenticationToken.currentAuthenticationToken.tokenString;

    // fetching pre-populated email
    NSString *email = FBSDKProfile.currentProfile.email;
  
    // getting pre-populated friends list
    NSArray<FBSDKUserIdentifier *> *friendIDs = FBSDKProfile.currentProfile.friendIDs;

    // getting pre-populated user birthday
    NSDate *birthday = FBSDKProfile.currentProfile.birthday;

    // getting pre-populated age range
    FBSDKUserAgeRange *ageRange = FBSDKProfile.currentProfile.ageRange;  
  
    // getting pre-populated age range
    FBSDKLocation *hometown = FBSDKProfile.currentProfile.hometown;  
  
    // getting pre-populated age range
    FBSDKLocation *location = FBSDKProfile.currentProfile.location;  
  
    // getting pre-populated age range
    NSString *gender = FBSDKProfile.currentProfile.gender;  
  
    // getting pre-populated age range
    NSURL *userLink = FBSDKProfile.currentProfile.linkURL;  
  }
}];

لتنفيذ تسجيل الدخول المحدود في التطبيق باستخدام زر تسجيل الدخول مباشرةً، يُرجى الترقية إلى أحدث إصدار من مجموعة Facebook SDK لنظام iOS واستخدام الرمز التالي:

override func viewDidLoad() {
    super.viewDidLoad()

    setupLoginButton()
}
  
func setupLoginButton() {
    loginButton.delegate = self
    
    loginButton.permissions = ["email"]
    loginButton.loginTracking = .limited
    loginButton.nonce = "123" as NSString
}

func loginButton(
    _ loginButton: FBLoginButton,
    didCompleteWith potentialResult: LoginManagerLoginResult?,
    error potentialError: Error?
) {
    if let error = potentialError {
        // Handle Error
    }

    guard let result = potentialResult else {
        // Handle missing result  
    }
        
    guard !result.isCancelled else {
        // Handle cancellation
    }

    // Handle successful login
  
    let userID = Profile.current?.userID
    let email = Profile.current?.email
    let tokenString = AuthenticationToken.current?.tokenString
}
- (void)viewDidLoad
{
  [super viewDidLoad];

  [self setupLoginButton];
}
  
- (void)setupLoginButton
{
  self.loginButton.delegate = self;  
  self.loginButton.permissions = @[@"email"]
  self.loginButton.loginTracking = FBSDKLoginTrackingLimited
  self.loginButton.nonce = @"123"
}

- (void)    loginButton:(FBSDKLoginButton *)loginButton
  didCompleteWithResult:(FBSDKLoginManagerLoginResult *)result
                  error:(NSError *)error
{
  if (error) {
    // Handle error
  }

  if (result && result.isCancelled) {
    // Handle cancellation
  }

  // Handle success
}