หากแอพของคุณขอข้อมูลอื่นนอกเหนือจาก public_profile
และ email
Facebook จะต้องตรวจสอบแอพก่อนที่จะเผยแพร่ เรียนรู้เพิ่มเติมเกี่ยวกับกระบวนการตรวจสอบ และสิ่งที่จำเป็นในการผ่านการตรวจสอบ
แทนที่จะใช้ปุ่มเข้าสู่ระบบที่มีแบรนด์ Facebook (อธิบายไว้ในการเข้าสู่ระบบด้วย Facebook สำหรับ iOS - การเริ่มต้นใช้งานอย่างง่าย) คุณอาจต้องการออกแบบเลย์เอาท์และการดำเนินการที่กำหนดเอง ในโค้ดตัวอย่างต่อไปนี้ เราจะเรียกกล่องการเข้าสู่ระบบโดยใช้คลาสตัวจัดการการเข้าสู่ระบบ (LoginManager
) และปุ่มที่กำหนดเอง (UIButton
) คุณสามารถใช้อินเทอร์เฟซผู้ใช้ที่กำหนดเองหรือการจัดการเหตุการณ์อื่นๆ เพื่อเรียกใช้กล่องการเข้าสู่ระบบได้
class ViewController: UIViewController { override func viewDidLoad() { super.viewDidLoad() // Add a custom login button to your app let loginButton = UIButton(type: .custom) loginButton.backgroundColor = .darkGray loginButton.frame = CGRect(x: 0, y: 0, width: 180, height: 40) loginButton.center = view.center loginButton.setTitle("My Login Button", for: .normal) // Handle clicks on the button loginButton.addTarget(self, action: #selector(loginButtonClicked), for: .touchUpInside) view.addSubview(loginButton) } // Once the button is clicked, show the login dialog func loginButtonClicked() { let loginManager = LoginManager() loginManager.logIn(permissions: ["public_profile"], from: self) { result, error in if let error = error { print("Encountered Erorr: \(error)") } else if let result = result, result.isCancelled { print("Cancelled") } else { print("Logged In") } } } }
ขั้นตอนเหล่านี้จำเป็นสำหรับ iOS SDK ของ Facebook ตั้งแต่เวอร์ชั่น 12.0.0 ขึ้นไป แอพที่ใช้ Interface Builder
อาจหยุดทำงาน หากคุณไม่ได้ดำเนินการขั้นตอนนี้ให้เสร็จสมบูรณ์
วิธีการเพิ่มกราฟิกปุ่มเข้าสู่ระบบใน Interface Builder
UIButton
ไปยังเลย์เอาท์ของคุณ และกำหนดข้อจำกัดในการจัดวางตำแหน่งอ็อบเจ็กต์Class
ใน Identity inspector
เป็น FBSDKLoginButton
ตอนนี้เลย์เอาท์ของคุณจะมีลักษณะดังนี้
หมายเหตุ: ไม่ต้องกำหนดโมดูลสำหรับคลาส FBSDKLoginButton
โมดูลนี้ควรแสดงเป็น None
หมายเหตุ: คุณอาจเห็นข้อผิดพลาดต่อไปนี้ในบันทึก Xcode เนื่องจากปัญหาที่ทราบใน XCFrameworks
[Storyboard] Unknown class FBSDKLoginButton in Interface Builder file.
คุณสามารถแก้ไขปัญหานี้ได้โดย "การโหลดล่วงหน้า" คลาส FBSDKLoginButton ก่อนที่สตอรี่บอร์ดจะโหลดด้วยการเพิ่มข้อมูลต่อไปนี้ในวิธีการ application:didFinishLaunchingWithOptions:
ของคุณ
// For Swift _ = FBLoginButton.self // For Objective-C [FBSDKLoginButton class];
คุณสามารถติดตามการเปลี่ยนแปลง AccessToken.current
ด้วยการแจ้งเตือน .AccessTokenDidChange
ใน NotificationCenter
ซึ่งช่วยให้คุณตอบกลับการเปลี่ยนแปลงในสถานะการเข้าสู่ระบบของผู้ใช้ได้
NotificationCenter.default.addObserver( forName: .AccessTokenDidChange, object: nil, queue: .main ) { notification in if notification.userInfo?[AccessTokenDidChangeUserIDKey] != nil { // Handle user change } }
iOS SDK สามารถอัพเดต AccessToken.current
เมื่อถึงระยะเวลาหนึ่ง เช่น เมื่อ SDK รีเฟรชโทเค็นที่เหลือเวลานานก่อนถึงวันหมดอายุ ดังนั้น คุณจึงควรตรวจสอบพจนานุกรม userInfo
ในการแจ้งเตือนสำหรับ AccessTokenDidChangeUserIDKey
เพื่อระบุว่าผู้ใช้ได้ทำการเปลี่ยนแปลงหรือไม่
Profile
มีข้อมูลโปรไฟล์สาธารณะที่ช่วยให้คุณปรับแต่งแอพให้เหมาะกับแต่ละบุคคลด้วยชื่อและรูปโปรไฟล์ของผู้ใช้ คุณสามารถโหลดโปรไฟล์ของผู้ใช้ที่เข้าสู่ระบบโดยใช้ loadCurrentProfile(completion:)
Profile.loadCurrentProfile { profile, error in if let firstName = profile?.firstName { print("Hello, \(firstName)") } }
คุณสามารถกำหนดคุณสมบัติ enableUpdatesOnAccessTokenChange
เป็น true
เพื่อให้โปรไฟล์โหลดไปยัง Profile.current
ได้โดยอัตโนมัติ ซึ่งยังช่วยให้คุณสังเกตการแจ้งเตือน .ProfileDidChange
เพื่อตอบกลับการเปลี่ยนแปลงโปรไฟล์ได้อีกด้วย
Profile.enableUpdatesOnAccessTokenChange(true) NotificationCenter.default.addObserver( forName: .ProfileDidChange, object: nil, queue: .main ) { notification in if let currentProfile = Profile.current { // Update for new user profile } }
คลาส FBProfilePictureView
เป็นวิธีง่ายๆ ในการแสดงรูปโปรไฟล์ Facebook ของผู้ใช้ เพียงกำหนดคุณสมบัติ profileID
บนอินสแตนซ์ โดยคุณสามารถกำหนดเป็นค่า AccessToken.current.userID
เพื่อแสดงรูปโปรไฟล์ของผู้ที่เข้าสู่ระบบในขณะนั้นได้
let profilePictureView = FBProfilePictureView() profilePictureView.frame = CGRect(x: 0, y: 0, width: 100, height: 100) profilePictureView.profileID = AccessToken.current!.userID view.addSubview(profilePictureView)
ค่าเริ่มต้น auth_type
สำหรับปุ่มการเข้าสู่ระบบด้วย Facebook ใน Facebook SDK สำหรับ iOS คือการส่งคำขอเข้ามาใหม่ หากคุณต้องการหลีกเลี่ยงการส่งคำขอสิทธิ์การอนุญาตที่เคยถูกปฏิเสธก่อนหน้านี้ ให้กำหนด auth_type
เป็น nil
นอกจากนี้ คุณยังสามารถกำหนดเป็นอนุญาตใหม่เพื่อแสดงกล่องโต้ตอบการให้สิทธิ์อนุญาตข้อมูลอีกครั้ง หากสิทธิ์การเข้าถึงข้อมูลของผู้ใช้หมดอายุ
ตัวอย่างต่อไปนี้แสดงวิธีกำหนด auth_type
ใน Swift
let loginButton = FBLoginButton() // Set to nil for no auth_type button.authType = nil // Or set to reauthorize button.authType = .reauthorize
ตัวอย่างต่อไปนี้แสดงวิธีกำหนด auth_type
โดยใช้การกำหนดค่าการเข้าสู่ระบบด้วยตัวจัดการการเข้าสู่ระบบ
let config = LoginConfiguration( permissions: [], tracking: .enabled, messengerPageId: nil, authType: nil ) let loginManager = LoginManager() loginManager.logIn(viewController: self, configuration: config!) { loginResult in // Do something with loginResult }