Mengelola Izin, iOS

Selama login dasar, aplikasi Anda menerima akses ke profil publik seseorang. Untuk mengakses informasi profil tambahan atau menerbitkan konten di Facebook mewakili orang tersebut, Anda harus meminta izin tambahan, lihat Izin dengan Facebook Login.

Aplikasi Anda harus mengelola izin berikut:

  • Permintaan Graph API - Sebelum Anda mengirim permintaan Graph API, Anda harus memeriksa izin yang diperlukan dan memintanya jika diperlukan.

  • Izin yang Kurang dan Dicabut - Aplikasi Anda harus menangani kesalahan izin yang kurang atau dicabut dari Facebook, misalnya dengan meminta izin dan mencoba kembali. Lihat Penanganan Kesalahan, Facebook SDK untuk iOS.

  • Menentukan Waktu Permintaan - Anda akan mendapat konversi yang lebih baik jika Anda meminta izin hanya jika dibutuhkan dan menyediakan fungsi tanpa memerlukan semua izin.

Meminta saat Login

Untuk meminta izin saat login dengan FBSDKLoginButton, atur properti permissions:

let loginButton = FBLoginButton()
loginButton.permissions = ["public_profile", "email"]

Jika Anda menggunakan tombol login khusus dan bukan FBSDKLoginButton, Anda dapat menggunakan LoginManager untuk melakukan login:

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
    }
}

Anda harus memeriksa ketersediaan token yang ada sebelum memanggil loginManager. Lihat Facebook Login untuk iOS

Memeriksa Izin

Untuk memeriksa izin saat ini, periksa 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.
  }];
}

Izin Ditolak

Periksa FBSDKLoginResult yang diberikan ke panggilan balik FBSDKLoginManager atau ke delegasi FBSDKLoginButton untuk melihat apakah seseorang sudah menolak permintaan izin:

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 {
 // ...
 }
}];

Izin yang Kurang

Saat Anda membuat permintaan Graph API, Anda dapat memeriksa objek NSError untuk melihat ada kesalahan izin:

[[[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");
    }
}];

Untuk informasi selengkapnya, lihat Penanganan Kesalahan, Facebook SDK untuk iOS.

Meminta Lebih Banyak Izin

Gunakan FBSDKLoginManager untuk meminta izin tambahan atau meminta izin yang sebelumnya ditolak dengan menggunakan metode logInWith*:. FBSDKLoginManager akan melihatnya sebagai permintaan ulang berdasarkan ketersediaan [FBSDKAccessToken currentAcccessToken].

Mencabut Izin

Anda dapat mengizinkan seseorang untuk menghapus atau mencabut izin tertentu yang sebelumnya diberikan ke aplikasi Anda. Contoh: aplikasi Anda dapat memiliki halaman pengaturan tempat orang dapat menonaktifkan fitur tertentu.

Cabut izin dengan melakukan panggilan ke endpoint Graph API.

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

Mencabut Login

Anda dapat mencabut semua hak istimewa untuk sebuah aplikasi, dengan melakukan panggilan Graph API yang menghapus semua izin. Gunakan kode di Cabut Izin dan ubah jalur permintaan ke /me/permissions.


Mencabut Izin melalui Graph API Explorer

Untuk tujuan pengujian, Anda mungkin ingin mencabut otorisasi izin tanpa menggunakan aplikasi Anda. Untuk melakukannya, Anda dapat menggunakan Graph API Explorer.

  1. Akses Graph API Explorer.
  2. Pilih Aplikasi Anda.
  3. Klik Get Token > Get Access Token.
  4. Klik Clear untuk membatalkan otorisasi aplikasi yang dipilih.

Untuk mencabut satu izin:

  1. Atur kolom input jalur ke /me/permissions/{permission-name} saat menggunakan izin yang ingin Anda hapus untuk {permission-name}, contoh: email.
  2. Beralihlah dari GET ke DELETE.
  3. Tekan tombol Submit.
Graph API Explorer