إدارة الأذونات، نظام iOS

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

يجب أن يدير تطبيقك الأذونات على النحو التالي:

  • طلبات واجهة Graph API - قبل إرسال طلبات واجهة Graph API، يجب التحقق من وجود الأذونات الضرورية وطلبها إذا لزم الأمر.

  • الأذونات المفقودة والتي تم إلغاؤها - يجب على تطبيقك التعامل مع أخطاء الأذونات المفقودة أو التي تم إلغاؤها من جانب فيسبوك مثل طلب الحصول على الأذونات أو إعادة المحاولة. ويمكنك الرجوع إلى معالجة الأخطاء، مجموعة SDK لنظام iOS.

  • تحديد توقيت الطلبات - ستحصل على تحويل أفضل إذا طلبت الحصول على الأذونات فقط عند الحاجة إليها، وكذلك عند توفير أداء وظيفي بدون طلب الحصول على جميع الأذونات.

الطلب عند تسجيل الدخول

لطلب الحصول على أذونات عند تسجيل الدخول باستخدام FBSDKLoginButton، يجب تعيين الخاصية permissions:

let loginButton = FBLoginButton()
loginButton.permissions = ["public_profile", "email"]

إذا كنت تستخدم زر تسجيل الدخول المخصص بدلاً من FBSDKLoginButton، فيمكنك استخدام LoginManager لتسجيل الدخول:

override func viewDidLoad() {
    super.viewDidLoad()

    ...
    loginButton.addTarget(self, action: #selector(loginButtonClicked), for: .touchUpInside)  
}
  
@objc func loginButtonClicked() {
    let loginManager = LoginManager()
    loginManager.logIn(permissions: ["email"], from: self) { result, error in
        // Process result or error
    }
}

يجب التحقق من توّفر الرمز المميز الحالي قبل استدعاء loginManager. ويمكنك الرجوع إلى تسجيل دخول فيسبوك لنظام iOS

التحقق من وجود الأذونات

للتحقق من وجود الأذونات الحالية، يمكنك فحص FBSDKAccessToken.

if ([[FBSDKAccessToken currentAccessToken] hasGranted:@"email"]) {
  // TODO: publish content.
} else {
  FBSDKLoginManager *loginManager = [[FBSDKLoginManager alloc] init];
  [loginManager logInWithPublishPermissions:@[@"email"]
                         fromViewController:self
                                    handler:^(FBSDKLoginManagerLoginResult *result, NSError *error) {
    //TODO: process error or result.
  }];
}

الأذونات المرفوضة

افحص FBSDKLoginResult الذي تم إرجاعه إلى الاستدعاء FBSDKLoginManager أو إلى التفويض FBSDKLoginButton لمعرفة ما إذا كان شخص ما قد رفض طلب الأذونات أم لا:

FBSDKLoginManager *loginManager = [[FBSDKLoginManager alloc] init];
[loginManager logInWithPublishPermissions:@[@"email"]
                       fromViewController:self
                                  handler:^(FBSDKLoginManagerLoginResult *result, NSError *error) {
 if ([result.declinedPermissions containsObject:@”email”]) {
   // TODO: do not request permissions again immediately. Consider providing a NUX 
  // describing  why the app want this permission.
 } else {
 // ...
 }
}];

الأذونات المفقودة

عند إجراء طلبات واجهة Graph API، يمكنك التحقق من الكائن NSError لمعرفة ما إذا كانت توجد أخطاء في الأذونات أم لا:

[[[FBSDKGraphRequest alloc] initWithGraphPath:@"me/feed"
                                   parameters:@{ @"message" : @"This is a status update" }
                                   HTTPMethod:@"POST"]
  startWithCompletionHandler:^(FBSDKGraphRequestConnection *connection, id result, NSError *error) {
    if ([error.userInfo[FBSDKGraphRequestErrorGraphErrorCode] isEqual:@200]) {
      NSLog(@"permission error");
    }
}];

لمزيد من المعلومات، يمكنك الرجوع إلى معالجة الأخطاء، مجموعة SDK لنظام iOS.

طلب المزيد من الأذونات

استخدم FBSDKLoginManager لطلب أذونات إضافية، أو لطلب أذونات تم رفضها مسبقًا، باستخدام أساليب logInWith*:. ستتعرف معلمة FBSDKLoginManager على أن هذا إجراء لإعادة الطلب حسب توفر [FBSDKAccessToken currentAcccessToken].

إلغاء الأذونات

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

يمكنك إلغاء الأذونات من خلال إجراء استدعاء إلى نقطة نهاية واجهة Graph API.

[[[FBSDKGraphRequest alloc] initWithGraphPath:@"me/permissions/email"
       parameters:nil
       HTTPMethod:@"DELETE"]
  startWithCompletionHandler:^(FBSDKGraphRequestConnection *connection, id result, NSError *error) {
  // ...
}];

إلغاء تسجيل الدخول

يمكنك إلغاء كل امتيازات التطبيق من خلال إجراء استدعاء Graph API والذي يؤدي بدوره إلى حذف كل الأذونات. استخدم الرمز الموجودة في إلغاء الأذونات وقم بتغيير مسار الطلب إلى /me/permissions.


إلغاء الأذونات عبر مستكشف Graph API

لأغراض تتعلق بالاختبار، قد تحتاج إلى عدم التصريح بإلغاء الأذونات دون استخدام تطبيقك. ويمكنك استخدام مستكشف Graph API لإجراء ذلك.

  1. قم بالوصول إلى مستكشف Graph API.
  2. حدّد تطبيقك.
  3. انقر على Get Token > Get Access Token.
  4. انقر على Clear لإلغاء تصريح التطبيق المحدد.

لإلغاء إذن فردي:

  1. قم بتعيين حقل إدخال المسار إلى /me/permissions/{permission-name} أثناء استخدام الإذن الذي تريد إزالته لـ {permission-name}، على سبيل المثال email.
  2. قم بالتبديل من GET إلى DELETE.
  3. اضغط على الزر Submit.
مستكشف Graph API