ในระหว่างการเข้าสู่ระบบพื้นฐาน แอพของคุณจะได้รับสิทธิ์การเข้าถึงโปรไฟล์สาธารณะของผู้ใช้ คุณต้องส่งคำขอสิทธิ์การอนุญาตเพิ่มเติมเพื่อเข้าถึงข้อมูลโปรไฟล์เพิ่มเติม หรือเผยแพร่เนื้อหาใน 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
Get Token
> Get Access Token
Clear
เพื่อไม่อนุญาตแอพที่เลือกการเพิกถอนสิทธิ์การอนุญาตรายการเดียวมีวิธีการดังนี้
/me/permissions/{permission-name}
โดยระบุสิทธิ์การอนุญาตที่คุณต้องการลบออกไว้ในส่วน {permission-name}
ตัวอย่างเช่น email
GET
เป็น DELETE
Submit