Anda dapat mengizinkan pengguna mengautentikasi dengan Firebase menggunakan penyedia OAuth seperti Twitter dengan mengintegrasikan Login OAuth generik ke dalam aplikasi Anda menggunakan Firebase SDK untuk menjalankan alur login end to end.
Sebelum kamu memulai
Gunakan Swift Package Manager untuk menginstal dan mengelola dependensi Firebase.
- Di Xcode, dengan proyek aplikasi Anda terbuka, arahkan ke File > Add Packages .
- Saat diminta, tambahkan repositori SDK platform Apple Firebase:
- Pilih pustaka Firebase Authentication.
- Setelah selesai, Xcode akan secara otomatis mulai menyelesaikan dan mengunduh dependensi Anda di latar belakang.
https://github.com/firebase/firebase-ios-sdk
Untuk memasukkan pengguna menggunakan akun Twitter, Anda harus terlebih dahulu mengaktifkan Twitter sebagai penyedia masuk untuk proyek Firebase Anda:
Sertakan pod berikut di
Podfile
Anda: l10npod 'FirebaseAuth'
- Di konsol Firebase , buka bagian Auth .
- Pada tab Metode masuk , aktifkan penyedia Twitter .
- Tambahkan kunci API dan rahasia API dari konsol pengembang penyedia tersebut ke konfigurasi penyedia:
- Daftarkan aplikasi Anda sebagai aplikasi pengembang di Twitter dan dapatkan kunci OAuth API dan rahasia API aplikasi Anda.
- Pastikan URI pengalihan Firebase OAuth Anda (misalnya
my-app-12345.firebaseapp.com/__/auth/handler
) disetel sebagai URL callback Authorization Anda di halaman setelan aplikasi Anda di konfigurasi aplikasi Twitter Anda.
- Klik Simpan .
Tangani alur masuk dengan Firebase SDK
Untuk menangani alur masuk dengan SDK platform Apple Firebase, ikuti langkah-langkah berikut:
Tambahkan skema URL khusus ke proyek Xcode Anda:
- Buka konfigurasi proyek Anda: klik dua kali nama proyek di tampilan struktur pohon sebelah kiri. Pilih aplikasi Anda dari bagian TARGET , lalu pilih tab Info , dan luaskan bagian Jenis URL .
- Klik tombol + , dan tambahkan skema URL untuk ID klien terbalik Anda. Untuk menemukan nilai ini, buka file konfigurasi
, dan cari kunciGoogleService-Info.plist REVERSED_CLIENT_ID
. Salin nilai kunci itu, dan tempelkan ke kotak Skema URL di halaman konfigurasi. Biarkan kolom lainnya kosong.Setelah selesai, konfigurasi Anda akan terlihat seperti berikut ini (tetapi dengan nilai khusus aplikasi Anda):
Buat instance OAuthProvider menggunakan ID penyedia twitter.com .
Cepat
var provider = OAuthProvider(providerID: "twitter.com")
Objective-C
FIROAuthProvider *provider = [FIROAuthProvider providerWithProviderID:@"twitter.com"];
Opsional : Tentukan parameter OAuth khusus tambahan yang ingin Anda kirim dengan permintaan OAuth.
Cepat
provider.customParameters = [ "lang": "fr" ]
Objective-C
[provider setCustomParameters:@{@"lang": @"fr"}];
Untuk parameter yang didukung Twitter, lihat dokumentasi Twitter OAuth . Perhatikan bahwa Anda tidak dapat meneruskan parameter yang diperlukan Firebase dengan
setCustomParameters
. Parameter ini adalah client_id , redirect_uri , response_type , scope dan state .Opsional : Jika Anda ingin menyesuaikan cara aplikasi menampilkan
SFSafariViewController
atauUIWebView
saat menampilkan reCAPTCHA kepada pengguna, buat kelas khusus yang sesuai dengan protokolAuthUIDelegate
, dan teruskan kecredentialWithUIDelegate
.Autentikasi dengan Firebase menggunakan objek penyedia OAuth.
Cepat
provider.getCredentialWith(nil) { credential, error in if error != nil { // Handle error. } if credential != nil { Auth.auth().signIn(with: credential) { authResult, error in if error != nil { // Handle error. } // User is signed in. // IdP data available in authResult.additionalUserInfo.profile. // Twitter OAuth access token can also be retrieved by: // (authResult.credential as? OAuthCredential)?.accessToken // Twitter OAuth ID token can be retrieved by calling: // (authResult.credential as? OAuthCredential)?.idToken // Twitter OAuth secret can be retrieved by calling: // (authResult.credential as? OAuthCredential)?.secret } } }
Objective-C
[provider getCredentialWithUIDelegate:nil completion:^(FIRAuthCredential *_Nullable credential, NSError *_Nullable error) { if (error) { // Handle error. } if (credential) { [[FIRAuth auth] signInWithCredential:credential completion:^(FIRAuthDataResult *_Nullable authResult, NSError *_Nullable error) { if (error) { // Handle error. } // User is signed in. // IdP data available in authResult.additionalUserInfo.profile. // Twitter OAuth access token can also be retrieved by: // authResult.credential.accessToken // Twitter OAuth ID token can be retrieved by calling: // authResult.credential.idToken // Twitter OAuth secret can be retrieved by calling: // authResult.credential.secret }]; } }];
Menggunakan token akses OAuth, Anda dapat memanggil API Twitter .
Misalnya, untuk mendapatkan informasi profil dasar, Anda dapat memanggil REST API, meneruskan token akses di header
Authorization
:https://api.twitter.com/labs/1/users?usernames=TwitterDev
Sementara contoh di atas berfokus pada alur masuk, Anda juga memiliki kemampuan untuk menautkan penyedia Twitter ke pengguna yang sudah ada. Misalnya, Anda dapat menautkan beberapa penyedia ke pengguna yang sama sehingga memungkinkan mereka masuk dengan keduanya.
Cepat
Auth().currentUser.link(withCredential: credential) { authResult, error in if error != nil { // Handle error. } // Twitter credential is linked to the current user. // IdP data available in authResult.additionalUserInfo.profile. // Twitter OAuth access token can also be retrieved by: // (authResult.credential as? OAuthCredential)?.accessToken // Twitter OAuth ID token can be retrieved by calling: // (authResult.credential as? OAuthCredential)?.idToken // Twitter OAuth secret can be retrieved by calling: // (authResult.credential as? OAuthCredential)?.secret }
Objective-C
[[FIRAuth auth].currentUser linkWithCredential:credential completion:^(FIRAuthDataResult * _Nullable authResult, NSError * _Nullable error) { if (error) { // Handle error. } // Twitter credential is linked to the current user. // IdP data available in authResult.additionalUserInfo.profile. // Twitter OAuth access token is can also be retrieved by: // ((FIROAuthCredential *)authResult.credential).accessToken // Twitter OAuth ID token can be retrieved by calling: // ((FIROAuthCredential *)authResult.credential).idToken // Twitter OAuth secret can be retrieved by calling: // ((FIROAuthCredential *)authResult.credential).secret }];
Pola yang sama dapat digunakan dengan
reauthenticateWithCredential
yang dapat digunakan untuk mengambil kredensial baru untuk operasi sensitif yang memerlukan login baru-baru ini.Cepat
Auth().currentUser.reauthenticateWithCredential(withCredential: credential) { authResult, error in if error != nil { // Handle error. } // User is re-authenticated with fresh tokens minted and // should be able to perform sensitive operations like account // deletion and email or password update. // IdP data available in result.additionalUserInfo.profile. // Additional OAuth access token is can also be retrieved by: // (authResult.credential as? OAuthCredential)?.accessToken // Twitter OAuth ID token can be retrieved by calling: // (authResult.credential as? OAuthCredential)?.idToken // Twitter OAuth secret can be retrieved by calling: // (authResult.credential as? OAuthCredential)?.secret }
Objective-C
[[FIRAuth auth].currentUser reauthenticateWithCredential:credential completion:^(FIRAuthDataResult * _Nullable authResult, NSError * _Nullable error) { if (error) { // Handle error. } // User is re-authenticated with fresh tokens minted and // should be able to perform sensitive operations like account // deletion and email or password update. // IdP data available in result.additionalUserInfo.profile. // Additional OAuth access token is can also be retrieved by: // ((FIROAuthCredential *)authResult.credential).accessToken // Twitter OAuth ID token can be retrieved by calling: // ((FIROAuthCredential *)authResult.credential).idToken // Twitter OAuth secret can be retrieved by calling: // ((FIROAuthCredential *)authResult.credential).secret }];
Langkah selanjutnya
Setelah pengguna masuk untuk pertama kali, akun pengguna baru dibuat dan ditautkan ke kredensial—yaitu, nama pengguna dan sandi, nomor telepon, atau informasi penyedia autentikasi—yang digunakan pengguna untuk masuk. Akun baru ini disimpan sebagai bagian dari project Firebase Anda, dan dapat digunakan untuk mengidentifikasi pengguna di setiap aplikasi dalam project Anda, terlepas dari cara pengguna login.
Di aplikasi Anda, Anda bisa mendapatkan informasi profil dasar pengguna dari objek
User
. Lihat Kelola Pengguna .Dalam Aturan Keamanan Firebase Realtime Database dan Cloud Storage, Anda bisa mendapatkan ID pengguna unik pengguna yang masuk dari variabel
auth
, dan menggunakannya untuk mengontrol data apa yang dapat diakses pengguna.
Anda dapat mengizinkan pengguna masuk ke aplikasi Anda menggunakan beberapa penyedia autentikasi dengan menautkan kredensial penyedia autentikasi ke akun pengguna yang ada.
Untuk mengeluarkan pengguna, panggil signOut:
.
Cepat
let firebaseAuth = Auth.auth() do { try firebaseAuth.signOut() } catch let signOutError as NSError { print("Error signing out: %@", signOutError) }
Objective-C
NSError *signOutError; BOOL status = [[FIRAuth auth] signOut:&signOutError]; if (!status) { NSLog(@"Error signing out: %@", signOutError); return; }
Anda mungkin juga ingin menambahkan kode penanganan kesalahan untuk berbagai kesalahan autentikasi. Lihat Menangani Kesalahan .