️ A partir da versão 6.0.0 do plugin, a versão mínima necessária do cordova-ios é 4.5.0. Precisa usar uma versão inferior do cordova-ios? Use o plugin versão 5.3.2 ou inferior.
idToken
serverAuthCode
Este plugin permite autenticar e identificar usuários com o Login do Google no iOS e Android. Pronto para uso, você receberá e-mail, nome de exibição, nome, sobrenome, URL da foto do perfil e ID de usuário. Você também pode configurá-lo para obter um idToken e serverAuthCode.
Este plug-in envolve apenas o acesso à API de login do Google. Acesso adicional à API deve ser implementado por caso de uso, por desenvolvedor.
Android
iOS
Para se comunicar com o Google, você precisa fazer algumas configurações tediosas, desculpe.
É (fortemente) recomendado que você use o mesmo projeto para iOS e Android.
Acesse seu config.xml
e certifique-se de que o nome do seu pacote (ou seja, o ID do aplicativo) é o que você deseja. Use este nome de pacote ao configurar iOS e Android nas etapas a seguir! Caso contrário, você provavelmente receberá um erro 12501, ‘usuário cancelado’, apesar de nunca ter cancelado o processo de login.
Esta etapa é especialmente importante se você estiver usando uma estrutura como o Ionic para estruturar seu projeto. Quando você cria o projeto, o config.xml
possui um espaço reservado para o nome do pacote, por exemplo, com.ionic.*, para que você possa começar a desenvolver imediatamente.
xml version = ' 1.0 ' encoding = ' utf-8 ' ?>
< widget id = " ** REPLACE THIS VALUE ** " ...>
...
widget >
A plataforma do navegador requer um WEB_APPLICATION_CLIENT_ID
válido gerado no Google Developer Console. Certifique-se de ter adicionado seu endereço de URL (exemplo: http://localhost:3000
) à seção Origens JavaScript autorizadas . Veja esta captura de tela, por exemplo
Para obter seu iOS REVERSED_CLIENT_ID
, gere um arquivo de configuração aqui. Este arquivo GoogleService-Info.plist
contém o REVERSED_CLIENT_ID
necessário durante a instalação. Este valor só é necessário para iOS.
O REVERSED_CLIENT_ID
também é conhecido como "esquema de URL do iOS" no console do desenvolvedor.
O login no iOS leva o usuário a um SafariViewController por meio do Google SDK, em vez do navegador Safari separado.
Para configurar o Android, gere um arquivo de configuração aqui. Ative o Login do Google e adicione um aplicativo Android para adicionar a impressão digital SHA1. Assim que o Login do Google estiver ativado, o Google criará automaticamente as credenciais necessárias no Developer Console para web e Android. Não há necessidade de adicionar o arquivo google-services.json gerado ao seu projeto cordova. Pode ser necessário configurar a tela de consentimento.
Certifique-se de executar as etapas keytool
conforme explicado aqui ou a autenticação falhará (faça isso para lançamento e depuração de armazenamentos de chaves).
IMPORTANTE:
keytool
, mostra 2 tipos de impressões digitais de certificados, o Release e o Debug , ao gerar o arquivo de configuração é melhor usar a impressão digital do certificado Debug , depois disso você tem que ir no Google Credentials Manager e criar manualmente uma credencial para o cliente OAuth2 com a impressão digital do certificado de versão . Isso é necessário para que seu aplicativo funcione nas versões de Desenvolvimento e Produção. $ keytool -exportcert -keystore -list -v -alias
O login no Android usará as contas conectadas no dispositivo do usuário.
Para configurar a versão do Google Play Services, você pode usar o parâmetro PLAY_SERVICES_VERSION (com valor 11.8.0 por padrão). É útil para evitar conflitos com outros plugins que utilizem qualquer outra versão diferente do Google Play Service, pois DEVEM ser da mesma versão.
O Google assina novamente seu aplicativo com um certificado diferente quando você o publica na Play Store. Depois que seu aplicativo for publicado, copie a impressão digital SHA-1 do "Certificado de assinatura de aplicativo", encontrado na seção "Assinatura de aplicativo" em "Gerenciamento de versão", no Google Play Console. Cole esta impressão digital no ID do cliente Release OAuth no Google Credentials Manager.
Se quiser obter um idToken
ou serverAuthCode
do processo de login, você precisará passar o ID do cliente para o aplicativo Web do seu projeto. Isso pode ser encontrado na página de credenciais da API do seu projeto no Google Developer's Console.
Este plugin é compatível com:
Veja como funciona (primeiro faça backup do seu projeto!):
Usando a CLI do Cordova e o npm:
$ cordova plugin add cordova-plugin-googleplus --save --variable REVERSED_CLIENT_ID=myreversedclientid --variable WEB_APPLICATION_CLIENT_ID=mywebapplicationclientid
$ cordova prepare
Usando a CLI do Cordova para buscar a versão mais recente do GitHub:
$ cordova plugin add https://github.com/EddyVerbruggen/cordova-plugin-googleplus --save --variable REVERSED_CLIENT_ID=myreversedclientid --variable WEB_APPLICATION_CLIENT_ID=mywebapplicationclientid
$ cordova prepare
IMPORTANTE:
Observe que myreversedclientid
é um espaço reservado para o clientId revertido que você encontra no arquivo de configuração do iOS. Não coloque esse valor entre aspas. (somente aplicativos iOS)
Se você estiver construindo um aplicativo híbrido (iOS e Android) ou um aplicativo Android, será necessário substituir myreversedclientid
pelo valor reverso do Client ID em sua credencial de lançamento gerada na etapa 3, no Google Developer's Console, será: "com .googleusercontent.apps. uniqueId
" , sem aspas. Exemplo: '123-abc123.apps.googleusercontent.com' torna-se 'com.googleusercontent.apps.123-abc123'.
myreversedclientid
é um espaço reservado para o ID do cliente Oauth gerado especificamente para aplicativos da web no console do desenvolvedor do Google.
GooglePlus.js é trazido automaticamente. Não há necessidade de alterar ou adicionar nada em seu html.
Adicione isto ao seu config.xml:
Para a versão (estável) do NPM:
< plugin name = " cordova-plugin-googleplus " source = " npm " >
< variable name = " REVERSED_CLIENT_ID " value = " myreversedclientid " />
< variable name = " WEB_APPLICATION_CLIENT_ID " value = " mywebapplicationclientid " />
plugin >
Para a versão mais recente do Git (não recomendado):
< plugin spec = " https://github.com/EddyVerbruggen/cordova-plugin-googleplus.git " source = " git " >
< variable name = " REVERSED_CLIENT_ID " value = " myreversedclientid " />
< variable name = " WEB_APPLICATION_CLIENT_ID " value = " mywebapplicationclientid " />
< plugin >
Este plug-in usa o gerenciador de dependências CocoaPods para satisfazer as dependências da biblioteca iOS Google SignIn SDK.
Portanto, certifique-se de ter o Cocoapods instalado em seu ambiente de construção iOS - as instruções de configuração podem ser encontradas aqui. Certifique-se também de que seu repositório Cocoapods local esteja atualizado executando pod repo update
.
Se estiver construindo seu projeto no Xcode, você precisará abrir YourProject.xcworkspace
(não YourProject.xcodeproj
) para que tanto o projeto do aplicativo Cordova quanto o projeto Pods sejam carregados no Xcode.
Você pode listar as dependências de pod em seu projeto Cordova iOS instalando cocoapods-dependencies:
sudo gem install cocoapods-dependencies
cd platforms/ios/
pod dependencies
Verifique o aplicativo de demonstração para começar rapidamente ou se machuque e siga estas etapas.
Observe que nenhum desses métodos deve ser chamado antes que deviceready
seja acionado.
Exemplo:
document . addEventListener ( 'deviceready' , deviceReady , false ) ;
function deviceReady ( ) {
//I get called when everything's ready for the plugin to be called!
console . log ( 'Device is ready!' ) ;
window . plugins . googleplus . trySilentLogin ( ... ) ;
}
31/03/16: Este método não precisa mais ser verificado primeiro. É mantido para ortoganalidade do código.
A função de login orienta o usuário no processo de autenticação do Google. Todos os parâmetros são opcionais, porém existem algumas ressalvas.
Para obter um idToken
no Android, você deve passar seu webClientId
(um erro frequente é fornecer o Android Client ID). No iOS, o idToken
é incluído no resultado de login por padrão.
Para obter um serverAuthCode
, você deve passar seu webClientId
e definir offline
como verdadeiro. Se offline for verdadeiro, mas nenhum webClientId for fornecido, o serverAuthCode
NÃO será solicitado.
Os escopos padrão solicitados são profile
e email
(sempre solicitados). Para solicitar outros escopos, adicione-os como uma lista separada por espaços ao parâmetro scopes
. Eles serão solicitados exatamente como transmitidos. Consulte a documentação do Google Scopes para obter informações sobre escopos válidos que podem ser solicitados. Por exemplo, 'scope': 'https://www.googleapis.com/auth/youtube https://www.googleapis.com/auth/tasks'
.
Naturalmente, para usar escopos ou APIs adicionais, eles precisarão ser ativados no console do desenvolvedor do seu projeto.
window . plugins . googleplus . login (
{
'scopes' : '... ' , // optional, space-separated list of scopes, If not included or empty, defaults to `profile` and `email`.
'webClientId' : 'client id of the web app/server side' , // optional clientId of your Web application from Credentials settings of your project - On Android, this MUST be included to get an idToken. On iOS, it is not required.
'offline' : true // optional, but requires the webClientId - if set to true the plugin will also return a serverAuthCode, which can be used to grant offline access to a non-Google server
} ,
function ( obj ) {
alert ( JSON . stringify ( obj ) ) ; // do something useful instead of alerting
} ,
function ( msg ) {
alert ( 'error: ' + msg ) ;
}
) ;
O callback de sucesso (segundo argumento) obtém um objeto JSON com o seguinte conteúdo, com dados de exemplo da minha conta Google:
obj . email // '[email protected]'
obj . userId // user id
obj . displayName // 'Eddy Verbruggen'
obj . familyName // 'Verbruggen'
obj . givenName // 'Eddy'
obj . imageUrl // 'http://link-to-my-profilepic.google.com'
obj . idToken // idToken that can be exchanged to verify user identity.
obj . serverAuthCode // Auth code that can be exchanged for an access token and refresh token for offline access
obj . accessToken // OAuth2 access token
Informações adicionais do usuário estão disponíveis por caso de uso. Adicione os escopos necessários à opção scopes e retorne as informações para o objeto de resultado que está sendo criado nas funções handleSignInResult
e didSignInForUser
no Android e iOS, respectivamente.
No Android, o retorno de chamada de erro (terceiro argumento) recebe um código de status de erro se a autenticação não for bem-sucedida. Uma descrição desses códigos de status pode ser encontrada no site do desenvolvedor Android do Google em GoogleSignInStatusCodes.
No iOS, o retorno de chamada de erro incluirá um NSError localizedDescription.
Você pode ligar para trySilentLogin
para verificar se eles já estão conectados ao aplicativo e, se estiverem, faça login silenciosamente.
Se tiver sucesso, você obterá o mesmo objeto que a função login
obtém, mas se falhar, não mostrará a caixa de diálogo de autenticação ao usuário.
Chamar trySilentLogin
é feito da mesma forma que login
, exceto pelo nome da função.
window . plugins . googleplus . trySilentLogin (
{
'scopes' : '... ' , // optional - space-separated list of scopes, If not included or empty, defaults to `profile` and `email`.
'webClientId' : 'client id of the web app/server side' , // optional - clientId of your Web application from Credentials settings of your project - On Android, this MUST be included to get an idToken. On iOS, it is not required.
'offline' : true , // Optional, but requires the webClientId - if set to true the plugin will also return a serverAuthCode, which can be used to grant offline access to a non-Google server
} ,
function ( obj ) {
alert ( JSON . stringify ( obj ) ) ; // do something useful instead of alerting
} ,
function ( msg ) {
alert ( 'error: ' + msg ) ;
}
) ;
É altamente recomendável que o trySilentLogin seja implementado com as mesmas opções do login, para evitar possíveis complicações.
Isso limpará o token OAuth2.
window . plugins . googleplus . logout (
function ( msg ) {
alert ( msg ) ; // do something useful instead of alerting
}
) ;
Isso limpará o token OAuth2, esquecerá qual conta foi usada para fazer login e desconectará essa conta do aplicativo. Isso exigirá que o usuário permita o acesso ao aplicativo novamente na próxima vez que fizer login. Esteja ciente de que esse efeito nem sempre é instantâneo. Pode levar algum tempo para desconectar completamente.
window . plugins . googleplus . disconnect (
function ( msg ) {
alert ( msg ) ; // do something useful instead of alerting
}
) ;
idToken
Documentação do Google para autenticação com um servidor back-end
Como os artigos acima mencionam, o idToken
pode ser trocado por informações do usuário para confirmar a identidade do usuário.
Observação: o Google não deseja que os dados de identidade do usuário sejam enviados diretamente para um servidor. O idToken é o método preferido para enviar esses dados com segurança, pois devem ser verificados através de seus servidores para serem descompactados.
Isto tem vários usos. No lado do cliente, pode ser uma forma de confirmar duplamente a identidade do usuário ou pode ser usado para obter detalhes como o domínio do host de e-mail. O lado do servidor é onde o idToken
realmente atinge seu ritmo. É uma maneira fácil de confirmar a identidade dos usuários antes de permitir-lhes acesso aos recursos desse servidor ou antes de trocar o serverAuthCode
por um token de acesso e atualização (veja a próxima seção).
Se o seu servidor precisar apenas de identidade, e não de acesso adicional à conta, esta é uma maneira simples e segura de fornecer essas informações.
serverAuthCode
Documentação do Google para ativar o acesso do lado do servidor
Como mencionam os artigos acima, o serverAuthCode
é um item que pode ser trocado por um token de acesso e atualização. Ao contrário do idToken
, isso permite que o lado do servidor tenha acesso direto à conta do Google do usuário.
Somente na solicitação de login inicial serverAuthCode
será retornado. Se desejar receber o token uma segunda vez, você pode fazer logout primeiro.
Você tem algumas opções quando se trata dessa troca: você pode usar o Google REST Apis para obtê-los no próprio aplicativo híbrido ou pode enviar o código ao seu servidor back-end para ser trocado lá, usando qualquer método necessário (o Google fornece exemplos para Java, Python e JS/HTTP).
Como afirmado anteriormente, este plugin trata da autenticação e identidade do usuário, portanto, qualquer uso da conta do usuário além disso precisa ser implementado por caso de uso, por aplicativo.
P: Não consigo fazer a autenticação funcionar no Android. E por que não existe CHAVE DE API DO ANDROID?
R: No Android você precisa executar as etapas keytool
, consulte as instruções de instalação para obter detalhes.
P: Depois de seguir as etapas keytool
, ainda não consigo fazer com que a autenticação funcione no Android. Estou tendo um "erro 10"!!!
R: Você precisa obter o certificado SHA 1 do seu arquivo apk. Execute: keytool -list -printcert -jarfile
e copie o SHA 1 para seu ID de cliente Android no Google Console.
P: Meu Deus, $@#*! a compilação do Android está falhando
R: Você precisa ter o Android Support Repository e a Android Support Library instalados no gerenciador do Android SDK. Certifique-se de usar uma versão bastante atualizada deles.
P: Por que isso não funciona no meu Android Emulator???
R: Certifique-se de usar um dispositivo virtual em execução com um destino de APIs do Google e/ou uma CPU de APIs do Google !
P: Estou recebendo o Erro 10 , o que devo fazer?
R: Isso provavelmente é causado pelo fato de Cordova não estar usando o keystore que você deseja usar (por exemplo, porque você gerou o seu próprio). Verifique https://cordova.apache.org/docs/en/latest/guide/platforms/android/#signing-an-app para ler como fazer isso. Alguns relataram que você precisa executar cordova clean
antes de executar a compilação para resolver o erro 10.
P: Estou recebendo o Erro 16 , o que devo fazer?
R: Isso é sempre um problema porque a assinatura (ou impressão digital) do seu aplicativo Android, quando assinado, não é adicionada à lista de permissões OAuth do Google Console (ou Firebase). Verifique novamente se você fez tudo o que era necessário para isso. Veja o mini-guia abaixo.
Primeiro, certifique-se de ler e compreender totalmente o guia sobre assinatura de aplicativos da documentação do Android!
Depois/durante a leitura, verifique se você executou todas as etapas 1 a 4 abaixo corretamente:
Para assinar seu aplicativo (no desenvolvimento ou publicação), você precisará criar um keystore local e uma chave com Android Studio ou via terminal. O Google tem um recurso chamado "Assinatura de aplicativo do Google Play", onde eles manterão a chave em seu servidor e assinarão seu aplicativo para você, mas se você usar esse recurso ou não, precisará de um keystore local e de uma chave de qualquer maneira.
O keystore e a chave locais serão a chave oficial de assinatura do aplicativo.
Você precisará colocar na lista de permissões as seguintes impressões digitais principais (no formato SHA1) nas configurações do Google OAuth:
debug.keystore
padrão do AndroidSeu keystore e chave locais serão sua "chave de upload" e outra chave para a "chave de assinatura do aplicativo" oficial é criada e gerenciada pelo Google.
Você precisa colocar na lista de permissões as seguintes impressões digitais principais (no formato SHA1) nas configurações do Google Oauth:
debug.keystore
padrão do AndroidObtenha as impressões digitais das chaves acima (no formato SHA1) para poder colocá-las na lista de permissões.
Para o debug.keystore
padrão do Android, faça:
keytool -exportcert -keystore /Users/myusername/.android/debug.keystore -list -v
Você verá a impressão digital SHA1 da chave de depuração no terminal. Copie isso.
Para o keystore criado com chave (para 2A ou 2B), faça:
keytool -exportcert -keystore /path/to/your/key/yourKeystoreFile.keystore -list -v
Você verá a impressão digital SHA1 da chave de depuração no terminal. Copie isso.
Somente quando a assinatura de aplicativos do Google Play estiver ativada (para 2B). Você pode encontrar a chave que o Google usará para assinar suas versões no Google Play Console.
Requisito: você precisa ter concluído as informações básicas do seu aplicativo Android e, em seguida, fazer upload de um APK assinado para testes internos. Depois de carregado, você poderá acessar o seguinte menu:
Vá para Gerenciamento de versão > Assinatura de aplicativo. Lá você verá
O "Upload" é (e deve ser) igual à chave B. acima. E o “Certificado de assinatura de aplicativo” é a chave que o Google usará. Copie este.
Novamente, temos 2 opções para colocá-los na lista de permissões. Projetos que utilizam apenas o Google Cloud Platform ou projetos que utilizam Firebase .
(Caso você também use Firebase, pode pular esta etapa)