การตรวจสอบการเข้าสู่ระบบ

หากแอพของคุณขอข้อมูลอื่นนอกเหนือจาก 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

  1. เพิ่มอ็อบเจ็กต์ UIButton ไปยังเลย์เอาท์ของคุณ และกำหนดข้อจำกัดในการจัดวางตำแหน่งอ็อบเจ็กต์
  2. เปลี่ยนคุณสมบัติ 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
}