Login Terbatas untuk iOS

Login Terbatas mengizinkan developer untuk memberi sinyal bahwa login dibatasi dalam hal melacak pengguna.

Yang Diharapkan

Upaya login yang berhasil akan mengisi instance AuthenticationToken global yang memberikan informasi tentang upaya login yang dapat digunakan untuk memverifikasi autentikasi di server klien. Selain itu, kami akan mengisi instance Profil bersama yang akan berisi informasi dasar termasuk ID lingkup aplikasi untuk pengguna, nama pengguna, dan gambar profil.

Izin

Izin tersedia yang Anda bisa minta adalah sebagai berikut:

  • public_profile
  • email
  • gaming_profile
  • gaming_user_picture
  • user_age_range
  • user_birthday
  • user_friends
  • user_gender
  • user_hometown
  • user_link
  • user_location
  • user_messenger_contact

Nonce Khusus

Login Terbatas mengizinkan developer untuk meneruskan nonce untuk digunakan dalam memverifikasi upaya autentikasi di server mereka. Untuk informasi tentang penggunaan nonce guna memvalidasi token, lihat Memvalidasi Token OIDC Login Terbatas.

Batasan

Beralih aplikasi, dengan dialog login disajikan kepada pengguna di aplikasi Facebook untuk iOS ketika pengguna sudah login, tidak didukung untuk alur login terbatas.

Elemen API Baru

Facebook SDK untuk iOS menyediakan pencacahan FBSDKLoginTracking baru. Nilai yang mungkin adalah enabled dan limited. Untuk Login Terbatas, gunakan limited.

enum LoginTracking {
    case enabled
    case limited
}
typedef NS_ENUM(NSUInteger, FBSDKLoginTracking)
{
  FBSDKLoginTrackingEnabled,
  FBSDKLoginTrackingLimited,
} NS_SWIFT_NAME(LoginTracking);

Selain itu, Login Terbatas menggunakan FBSDKLoginConfiguration untuk mengubah perilaku default upaya login. Konfigurasi ini dibuat dengan properti default, properti eksplisit (hanya Swift), atau dengan salah satu dari beberapa penginisialisasi:

init?(
    permissions: Set
initWithPermissions:(NSArray\<NSString *> *)permissions                                                          
           tracking:(FBSDKLoginTracking)tracking
              nonce:(NSString *)nonce

Properti

PropertiDeskripsi

requestedPermissions: Set<Permissions> (Swift)

Izin yang diminta untuk upaya login. Default-nya set kosong.

requestedPermissions: Set<String> (ObjC)

Izin yang diminta untuk upaya login. Default-nya set kosong.

tracking: LoginTracking

Preferensi pelacakan login. Default-nya .enabled.

nonce: String

Nonce untuk pembuatan konfigurasi. Nonce unik akan digunakan jika tidak ada yang diberikan ke metode pabrik.

Mencoba membuat konfigurasi gagal jika kondisi berikut tidak terpenuhi:

  • Nonce harus berupa string tidak kosong yang tidak ada spasi.

  • Anda tidak dapat meminta izin di luar cakupan pelacakan. Contoh: meminta user_likes tidak berfungsi jika pelacakannya .limited.

  • Untuk izin yang Anda bisa minta, lihat bagian Izin.

Menerapkan Login Terbatas

Untuk menerapkan Login Terbatas di aplikasi Anda menggunakan kelas pengelola login secara langsung, tingkatkan ke Facebook SDK untuk iOS versi terbaru dan gunakan kode berikut:

let loginManager = LoginManager()

// Ensure the configuration object is valid
guard let configuration = LoginConfiguration(
	permissions:["email", "user_friends", "user_birthday", "user_age_range", "user_gender", "user_location", "user_hometown", "user_link"],  
	tracking: .limited,
	nonce: "123"
) 
else {
    return
}

loginManager.logIn(configuration: configuration) { result in
    switch result {
    case .cancelled, .failed:
        // Handle error
        break
    case .success:
        // getting user ID
        let userID = Profile.current?.userID

        // getting pre-populated email
        let email = Profile.current?.email

        // getting pre-populated friends list
        let friendIDs = Profile.current?.friendIDs

        // getting pre-populated user birthday
        let birthday = Profile.current?.birthday

        // getting pre-populated age range
        let ageRange = Profile.current?.ageRange

        // getting user gender
        let gender = Profile.current?.gender
  
        // getting user location
        let location = Profile.current?.location
  
        // getting user hometown
        let hometown = Profile.current?.hometown
  
        // getting user profile URL
        let profileURL = Profile.current?.linkURL
  
        // getting id token string
        let tokenString = AuthenticationToken.current?.tokenString
    }
}
FBSDKLoginManager *loginManager = [FBSDKLoginManager new];
FBSDKLoginConfiguration *configuration =
  [[FBSDKLoginConfiguration alloc] initWithPermissions:@[@"email", @"user_friends", @"user_birthday", @"user_age_range", @"user_hometown", @"user_location", @"user_gender", @"user_link"]
                                              tracking:FBSDKLoginTrackingLimited
                                                 nonce:@"123"];
[loginManager logInFromViewController:self
                        configuration:configuration
                           completion:^(FBSDKLoginManagerLoginResult * result, NSError *error) {
  if (!error && !result.isCancelled) {
    // Login successful

    // getting user ID
    NSString *userID =
      FBSDKProfile.currentProfile.userID;

    // getting id token string
    NSString *idTokenString =
      FBSDKAuthenticationToken.currentAuthenticationToken.tokenString;

    // fetching pre-populated email
    NSString *email = FBSDKProfile.currentProfile.email;
  
    // getting pre-populated friends list
    NSArray<FBSDKUserIdentifier *> *friendIDs = FBSDKProfile.currentProfile.friendIDs;

    // getting pre-populated user birthday
    NSDate *birthday = FBSDKProfile.currentProfile.birthday;

    // getting pre-populated age range
    FBSDKUserAgeRange *ageRange = FBSDKProfile.currentProfile.ageRange;  
  
    // getting pre-populated age range
    FBSDKLocation *hometown = FBSDKProfile.currentProfile.hometown;  
  
    // getting pre-populated age range
    FBSDKLocation *location = FBSDKProfile.currentProfile.location;  
  
    // getting pre-populated age range
    NSString *gender = FBSDKProfile.currentProfile.gender;  
  
    // getting pre-populated age range
    NSURL *userLink = FBSDKProfile.currentProfile.linkURL;  
  }
}];

Untuk menerapkan Login Terbatas di aplikasi Anda menggunakan tombol login, tingkatkan ke Facebook SDK terbaru untuk iOS dan gunakan kode berikut:

override func viewDidLoad() {
    super.viewDidLoad()

    setupLoginButton()
}
  
func setupLoginButton() {
    loginButton.delegate = self
    
    loginButton.permissions = ["email"]
    loginButton.loginTracking = .limited
    loginButton.nonce = "123" as NSString
}

func loginButton(
    _ loginButton: FBLoginButton,
    didCompleteWith potentialResult: LoginManagerLoginResult?,
    error potentialError: Error?
) {
    if let error = potentialError {
        // Handle Error
    }

    guard let result = potentialResult else {
        // Handle missing result  
    }
        
    guard !result.isCancelled else {
        // Handle cancellation
    }

    // Handle successful login
  
    let userID = Profile.current?.userID
    let email = Profile.current?.email
    let tokenString = AuthenticationToken.current?.tokenString
}
- (void)viewDidLoad
{
  [super viewDidLoad];

  [self setupLoginButton];
}
  
- (void)setupLoginButton
{
  self.loginButton.delegate = self;  
  self.loginButton.permissions = @[@"email"]
  self.loginButton.loginTracking = FBSDKLoginTrackingLimited
  self.loginButton.nonce = @"123"
}

- (void)    loginButton:(FBSDKLoginButton *)loginButton
  didCompleteWithResult:(FBSDKLoginManagerLoginResult *)result
                  error:(NSError *)error
{
  if (error) {
    // Handle error
  }

  if (result && result.isCancelled) {
    // Handle cancellation
  }

  // Handle success
}