Você pode permitir que seus usuários se autentiquem com o Firebase usando provedores OAuth, como o Twitter, integrando o Login OAuth genérico em seu aplicativo usando o Firebase SDK para realizar o fluxo de login de ponta a ponta.
Antes de você começar
Use o Swift Package Manager para instalar e gerenciar dependências do Firebase.
- No Xcode, com seu projeto de aplicativo aberto, navegue até File > Add Packages .
- Quando solicitado, adicione o repositório Firebase Apple Platform SDK:
- Escolha a biblioteca Firebase Authentication.
- Quando terminar, o Xcode começará automaticamente a resolver e baixar suas dependências em segundo plano.
https://github.com/firebase/firebase-ios-sdk
Para fazer login de usuários usando contas do Twitter, você deve primeiro ativar o Twitter como um provedor de login para seu projeto Firebase:
Inclua os seguintes pods em seu
Podfile
:pod 'FirebaseAuth'
- No console do Firebase , abra a seção Auth .
- Na guia Método de login , habilite o provedor do Twitter .
- Adicione a chave de API e o segredo de API do console do desenvolvedor desse provedor à configuração do provedor:
- Registre seu aplicativo como um aplicativo de desenvolvedor no Twitter e obtenha a chave de API OAuth e o segredo de API do seu aplicativo.
- Certifique-se de que seu URI de redirecionamento Firebase OAuth (por exemplo
my-app-12345.firebaseapp.com/__/auth/handler
) esteja definido como seu URL de retorno de chamada de autorização na página de configurações do aplicativo no config do aplicativo do Twitter .
- Clique em Salvar .
Lide com o fluxo de login com o Firebase SDK
Para lidar com o fluxo de login com o Firebase Apple Platform SDK, siga estas etapas:
Adicione esquemas de URL personalizados ao seu projeto Xcode:
- Abra a configuração do seu projeto: clique duas vezes no nome do projeto na visualização em árvore à esquerda. Selecione seu aplicativo na seção TARGETS , selecione a guia Info e expanda a seção URL Types .
- Clique no botão + e adicione um esquema de URL para seu ID de cliente invertido. Para encontrar esse valor, abra o arquivo de configuração
e procure a chaveGoogleService-Info.plist REVERSED_CLIENT_ID
. Copie o valor dessa chave e cole-o na caixa Esquemas de URL na página de configuração. Deixe os outros campos em branco.Quando concluída, sua configuração deve ser semelhante à seguinte (mas com os valores específicos do aplicativo):
Crie uma instância de um OAuthProvider usando o ID do provedor twitter.com .
Rápido
var provider = OAuthProvider(providerID: "twitter.com")
Objective-C
FIROAuthProvider *provider = [FIROAuthProvider providerWithProviderID:@"twitter.com"];
Opcional : especifique parâmetros OAuth customizados adicionais que você deseja enviar com a solicitação OAuth.
Rápido
provider.customParameters = [ "lang": "fr" ]
Objective-C
[provider setCustomParameters:@{@"lang": @"fr"}];
Para obter os parâmetros compatíveis com o Twitter, consulte a documentação do Twitter OAuth . Observe que você não pode passar parâmetros obrigatórios do Firebase com
setCustomParameters
. Esses parâmetros são client_id , redirect_uri , response_type , scope e state .Opcional : se você quiser personalizar a maneira como seu aplicativo apresenta o
SFSafariViewController
ouUIWebView
ao exibir o reCAPTCHA para o usuário, crie uma classe personalizada que esteja em conformidade com o protocoloAuthUIDelegate
e passe-a paracredentialWithUIDelegate
.Autentique-se com o Firebase usando o objeto provedor OAuth.
Rápido
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 }]; } }];
Usando o token de acesso OAuth, você pode chamar a API do Twitter .
Por exemplo, para obter informações básicas do perfil, você pode chamar a API REST, passando o token de acesso no cabeçalho
Authorization
:https://api.twitter.com/labs/1/users?usernames=TwitterDev
Embora os exemplos acima se concentrem nos fluxos de login, você também pode vincular um provedor do Twitter a um usuário existente. Por exemplo, você pode vincular vários provedores ao mesmo usuário, permitindo que eles façam login com qualquer um deles.
Rápido
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 }];
O mesmo padrão pode ser usado com
reauthenticateWithCredential
, que pode ser usado para recuperar novas credenciais para operações confidenciais que exigem login recente.Rápido
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 }];
Próximos passos
Depois que um usuário faz login pela primeira vez, uma nova conta de usuário é criada e vinculada às credenciais — ou seja, nome de usuário e senha, número de telefone ou informações do provedor de autenticação — com as quais o usuário fez login. Essa nova conta é armazenada como parte do seu projeto do Firebase e pode ser usada para identificar um usuário em todos os aplicativos do seu projeto, independentemente de como o usuário faz login.
Em seus aplicativos, você pode obter as informações básicas do perfil do
User
no objeto Usuário. Consulte Gerenciar usuários .Nas regras de segurança do Firebase Realtime Database e Cloud Storage , você pode obter o ID de usuário exclusivo do usuário conectado a partir da variável de
auth
e usá-lo para controlar quais dados um usuário pode acessar.
Você pode permitir que os usuários façam login em seu aplicativo usando vários provedores de autenticação vinculando as credenciais do provedor de autenticação a uma conta de usuário existente.
Para desconectar um usuário, chame signOut:
.
Rápido
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; }
Você também pode querer adicionar código de tratamento de erros para toda a gama de erros de autenticação. Consulte Tratar erros .