การจัดการสิทธิ์การอนุญาตสำหรับ iOS

ในระหว่างการเข้าสู่ระบบพื้นฐาน แอพของคุณจะได้รับสิทธิ์การเข้าถึงโปรไฟล์สาธารณะของผู้ใช้ คุณต้องส่งคำขอสิทธิ์การอนุญาตเพิ่มเติมเพื่อเข้าถึงข้อมูลโปรไฟล์เพิ่มเติม หรือเผยแพร่เนื้อหาใน Facebook ในนามของผู้ใช้ โปรดดูที่สิทธิ์การอนุญาตกับการเข้าสู่ระบบด้วย Facebook

แอพของคุณควรจัดการสิทธิ์การอนุญาตดังต่อไปนี้

  • คำขอ API กราฟ - ก่อนส่งคำขอ API กราฟ คุณควรตรวจสอบสิทธิ์การอนุญาตที่จำเป็นและส่งคำขอสิทธิ์หากจำเป็น

  • สิทธิ์การอนุญาตที่ขาดหายไปและที่ถูกเพิกถอน - แอพของคุณต้องจัดการกับข้อผิดพลาดเกี่ยวกับสิทธิ์การอนุญาตที่ขาดหายไปหรือที่ถูกเพิกถอนจาก Facebook ด้วยวิธีการต่างๆ เช่น ขอสิทธิ์การอนุญาตและลองใหม่อีกครั้ง โปรดดูที่การจัดการข้อผิดพลาด, iOS SDK

  • คำขอในเวลาที่เหมาะสม - คุณจะได้รับคอนเวอร์ชั่นที่ดียิ่งขึ้น หากคุณขอสิทธิ์การอนุญาตเฉพาะเมื่อจำเป็น และมอบฟังก์ชั่นการทำงานโดยไม่ต้องขอสิทธิ์การอนุญาตทั้งหมด

ส่งคำขอเมื่อมีการเข้าสู่ระบบ

หากต้องการขอสิทธิ์การอนุญาตเมื่อมีการเข้าสู่ระบบด้วย 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 โปรดดูที่การเข้าสู่ระบบด้วย Facebook สำหรับ 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 หรือ Delegate 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 {
 // ...
 }
}];

สิทธิ์การอนุญาตที่ขาดหายไป

เมื่อคุณส่งคำขอ 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");
    }
}];

โปรดดูที่การจัดการข้อผิดพลาด, iOS SDK

ส่งคำขอสิทธิ์การอนุญาตเพิ่มเติม

ใช้ FBSDKLoginManager เพื่อส่งคำขอสิทธิ์การอนุญาตเพิ่มเติม หรือส่งคำขอสิทธิ์การอนุญาตที่ถูกปฏิเสธก่อนหน้านี้โดยใช้เมธอด logInWith*: โดย FBSDKLoginManager จะเห็นว่าเป็นการส่งคำขอเข้ามาใหม่ตามความพร้อมใช้งานของ [FBSDKAccessToken currentAcccessToken]

เพิกถอนสิทธิ์การอนุญาต

คุณสามารถอนุญาตให้ผู้ใช้ลบหรือเพิกถอนการอนุญาตที่เฉพาะเจาะจงซึ่งมอบให้กับแอพของคุณก่อนหน้านี้ได้ ตัวอย่างเช่น แอพของคุณอาจมีหน้าการตั้งค่าที่ผู้ใช้สามารถปิดใช้งานฟีเจอร์บางอย่างโดยเฉพาะได้

เพิกถอนสิทธิ์การอนุญาตโดยทำการเรียกใช้ไปยังตำแหน่งข้อมูล API กราฟ

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

เพิกถอนการเข้าสู่ระบบ

คุณสามารถเพิกถอนสิทธิ์ทั้งหมดสำหรับแอพได้โดยการเรียกใช้ API กราฟที่ลบสิทธิ์การอนุญาตทั้งหมด ให้ใช้โค้ดในส่วนเพิกถอนสิทธิ์การอนุญาต และเปลี่ยนพาธของคำขอเป็น /me/permissions


การเพิกถอนสิทธิ์การอนุญาตผ่าน Graph API Explorer

คุณอาจต้องการที่จะไม่อนุญาตให้เพิกถอนสิทธิ์การอนุญาตโดยไม่ต้องใช้แอพเพื่อวัตถุประสงค์ในการทดสอบ ซึ่งคุณสามารถทำได้โดยใช้ Graph API Explorer

  1. เข้าไปที่ Graph API Explorer
  2. เลือกแอพของคุณ
  3. คลิก Get Token > Get Access Token
  4. คลิก Clear เพื่อไม่อนุญาตแอพที่เลือก

การเพิกถอนสิทธิ์การอนุญาตรายการเดียวมีวิธีการดังนี้

  1. ตั้งค่าช่องป้อนพาธเป็น /me/permissions/{permission-name} โดยระบุสิทธิ์การอนุญาตที่คุณต้องการลบออกไว้ในส่วน {permission-name} ตัวอย่างเช่น email
  2. เปลี่ยนจาก GET เป็น DELETE
  3. กดปุ่ม Submit
Graph API Explorer