خلال تسجيل الدخول الأساسي، يحصل تطبيقك على صلاحية الوصول إلى الملف الشخصي العام للشخص. وللوصول إلى المعلومات الإضافية المتعلقة بالملف الشخصي أو لنشر محتوى على فيسبوك نيابة عن شخص ما، يجب طلب أذونات إضافية والرجوع إلى الأذونات عند تسجيل دخول فيسبوك.
يجب أن يدير تطبيقك الأذونات على النحو التالي:
طلبات واجهة 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 لإجراء ذلك.
Get Token
> Get Access Token
.Clear
لإلغاء تصريح التطبيق المحدد.لإلغاء إذن فردي:
/me/permissions/{permission-name}
أثناء استخدام الإذن الذي تريد إزالته لـ {permission-name}
، على سبيل المثال email
.GET
إلى DELETE
.Submit
.