Temos uma opção bastante útil hoje em dia no Android, que é usar a sincronização da conta de e-mail do Google.
Não vou alongar muito a introdução, vamos partir para a codificação e configuração da API.
Criando um novo Projeto no AndroidStudio
Digite o nome da aplicação e escolha também um nome do package, vamos precisar para ativar a API do GooglePlus no Console do Google. Continuei a criação e escolha uma Empty Activity.
Configuração no Console do Google e Ativação da API
Tenho que informar que essa é a parte mais chata do tutorial, mas enfim com pouco de paciência e atenção vamos conseguir.
Acesse o link para configurar Console Configuração. Você irá ver algo parecido com isso:
- Adicione o nome para a sua aplicação (Sugiro que seja o mesmo nome que Adicionou no seu App).
- Adicione o nome do package (Você pode encontrar esse nome no seu AndroidManisfest.xml ou no seu Gradle app-level escrito applicationId).
- Escolha sua Região.
- Continue (Choose and configure services).
Feito, vai ser redirecionado a uma página e irar visualizar um campo vazio, lá você vai digitar o seu SHA-1. Porém como obter meu SHA-1? Você vai ter que acessar via linha de comando a pasta (.android) normalmente ela fica localizada na raiz (C:\Users\NomeUsuario\.android) dentro você vai perceber um arquivo (chave chamada debug.keystore ), quando achar digite o seguinte comando na pasta:
keytool -list -v -keystore debug.keystore -alias androiddebugkey -storepass android -keypass android
Caso você não consiga acesse o link para mais informações obter SHA-1. Agora copie e cole o SHA-1 no Console do Google e você terá algo:
Agora continue (Continue to Generate configuration files). Gere o arquivo, faça o download depois copie e cole na raiz do seu projeto exemplo (C:\Users\Alessandro\AndroidstudioProjects\GoogleSign-In\app\).
Voltando para nosso Projeto no AndroidStudio
Feito as devidas configurações no Console do Google, vamos configurar o Build Gradle o suporte Play Services na nossa aplicação.
1. Adicione a dependência no project-level build.gradle:
classpath 'com.google.gms:google-services:1.5.0-beta2'
2. Adicione o plugin e dependência no app-level build.gradle e o Play services Auth:
apply plugin: 'com.google.gms.google-services'
compile 'com.google.android.gms:play-services-auth:8.3.0'
Arquivo de Layout
No arquivo de layout activity_main.xml adicione:
<?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://ift.tt/nIICcg" xmlns:tools="http://ift.tt/LrGmb4" android:layout_width="match_parent" android:layout_height="match_parent" tools:context="barreto.alessandro.googlesign_in.MainActivity" android:orientation="vertical"> <RelativeLayout android:padding="10dp" android:background="#1f737373" android:layout_width="match_parent" android:layout_height="wrap_content"> <ImageView android:src="@mipmap/ic_launcher" android:id="@+id/ivUsuario" android:layout_width="100dp" android:layout_height="100dp" android:layout_centerHorizontal="true" /> <TextView android:layout_marginTop="8dp" android:text="Android Teste" android:layout_centerHorizontal="true" android:textAppearance="?android:attr/textAppearanceLarge" android:layout_below="@+id/ivUsuario" android:id="@+id/tvNome" android:layout_width="wrap_content" android:layout_height="wrap_content" /> <TextView android:layout_marginTop="5dp" android:layout_centerHorizontal="true" android:layout_below="@+id/tvNome" android:text="androidteste@gmail.com" android:id="@+id/tvEmail" android:layout_width="wrap_content" android:layout_height="wrap_content" android:textAppearance="?android:attr/textAppearanceMedium"/> </RelativeLayout> <LinearLayout android:orientation="vertical" android:layout_marginTop="16dp" android:layout_gravity="center_horizontal" android:padding="16dp" android:layout_width="match_parent" android:layout_height="wrap_content"> <com.google.android.gms.common.SignInButton android:id="@+id/sign_in_button" android:layout_width="match_parent" android:layout_height="wrap_content" /> <Button android:id="@+id/btnDesconectar" android:layout_marginTop="10dp" android:text="Desconectar" android:layout_width="match_parent" android:layout_height="wrap_content" /> <Button android:id="@+id/btnRevogar" android:layout_marginTop="10dp" android:text="Revogar acesso" android:layout_width="match_parent" android:layout_height="wrap_content" /> </LinearLayout> </LinearLayout>
Sem muito comentário sobre o código acima, ele possui:
- Um ImageView para imagem do usuário.
- Dois TextView para nome e e-mail.
- Três Buttons sendo que um customizado, vão servir para Login, Desconectar, Revogar o Acesso do usuário
A Class Principal
Agora vamos fazer o vinculo entre o XML e Java API (bindViews). Crie um método chamado bindViews e adicione:
/** * Metodo para fazer o vinculo entre o xml e java api */ private void bindViews(){ ivUsuario = (ImageView)findViewById(R.id.ivUsuario); tvNome = (TextView)findViewById(R.id.tvNome); tvEmail = (TextView)findViewById(R.id.tvEmail); btnDesconectar = (Button)findViewById(R.id.btnDesconectar); btnRevogar = (Button)findViewById(R.id.btnRevogar); signInButton = (SignInButton) findViewById(R.id.sign_in_button); // litener de clicks signInButton.setOnClickListener(this); btnDesconectar.setOnClickListener(this); btnRevogar.setOnClickListener(this); }
Vamos solicitar da API informações simples de um login como nome, e-mail, foto e id, no momento é o que necessitamos para esse exemplo.
Temos que utilizar o objeto GoogleSignOptions e passar como parâmetro GoogleSignOptions.DEFAULT_SIGN_IN nele contem a opção requestEmail().
GoogleSignInOptions gso = new GoogleSignInOptions.Builder(GoogleSignInOptions.DEFAULT_SIGN_IN) .requestEmail() .build();
Agora que já temos configurado nossa solicitação, iremos criar um objeto GoogleApiClient com acesso ao login do Google API e as opções especificadas. Colocando tudo em um método que chamei de obterConfiguracoesPadraoLogin() .
/** * Metodo para fazer as primeiras requisições da API para login simples */ private void obterConfiguracoesPadraoLogin(){ GoogleSignInOptions gso = new GoogleSignInOptions.Builder(GoogleSignInOptions.DEFAULT_SIGN_IN) .requestEmail() .build(); mGoogleApiClient = new GoogleApiClient.Builder(this) .enableAutoManage(this,this) .addApi(Auth.GOOGLE_SIGN_IN_API, gso) .build(); }
Agora a intenção de login usando uma Intent do Android com o método getSignInIntent e passando para o startActivityForResult.
/** * metodo para inicar o login */ private void signIn() { Intent signInIntent = Auth.GoogleSignInApi.getSignInIntent(mGoogleApiClient); startActivityForResult(signInIntent, SIGN_IN); } @Override public void onClick(View v) { switch (v.getId()) { case R.id.sign_in_button: signIn(); break; // ... } }
Apos isso o método onActivityResult será chamado com nossos resultados e para recuperar utilizamos o getSignInResultFromIntent.
@Override public void onActivityResult(int requestCode, int resultCode, Intent data) { super.onActivityResult(requestCode, resultCode, data); if (requestCode == SIGN_IN) { GoogleSignInResult resultado = Auth.GoogleSignInApi.getSignInResultFromIntent(data); if (resultado.isSuccess()){ GoogleSignInAccount acct = resultado.getSignInAccount(); obterInfoGoogle(acct); } } }
Depois de recuperar o resultado, você pode verificar se a solicitação deu certo com o método isSuccess . Se bem-sucedido, você pode chamar o método getSignInAccount para obter um objeto GoogleSignInAccount que contém informações sobre o usuário.
private void obterInfoGoogle(GoogleSignInAccount acct){ String nome = acct.getDisplayName(); tvNome.setText(nome); String email = acct.getEmail(); tvEmail.setText(email); String id = acct.getId(); Log.i(TAG,"ID do usuário no GooglePlus "+id); String urlFoto = acct.getPhotoUrl().toString(); Picasso.with(MainActivity.this).load(urlFoto).resize(100,100).into(ivUsuario); }
Utilizei a lib Picasso para o carregamento eficiente de imagem, adicione no seu Gradle app-level.
compile 'com.squareup.picasso:picasso:2.5.2'
No AndroidManifest.xml
<uses-permission android:name="android.permission.INTERNET"/>
.Agora segue toda a Class MainActivity
package barreto.alessandro.googlesign_in; import android.content.Intent; import android.support.v7.app.AppCompatActivity; import android.os.Bundle; import android.util.Log; import android.view.View; import android.widget.Button; import android.widget.ImageView; import android.widget.TextView; import com.google.android.gms.auth.api.Auth; import com.google.android.gms.auth.api.signin.GoogleSignInAccount; import com.google.android.gms.auth.api.signin.GoogleSignInOptions; import com.google.android.gms.auth.api.signin.GoogleSignInResult; import com.google.android.gms.common.ConnectionResult; import com.google.android.gms.common.SignInButton; import com.google.android.gms.common.api.GoogleApiClient; import com.google.android.gms.common.api.ResultCallback; import com.google.android.gms.common.api.Status; import com.squareup.picasso.Picasso; public class MainActivity extends AppCompatActivity implements GoogleApiClient.OnConnectionFailedListener, View.OnClickListener { private static final String TAG = "TAG"; private static final int SIGN_IN = 10; private ImageView ivUsuario; private TextView tvNome,tvEmail; private Button btnDesconectar,btnRevogar; private SignInButton signInButton; private GoogleApiClient mGoogleApiClient; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); bindViews(); obterConfiguracoesPadraoLogin(); } /** * Metodo para fazer o vinculo entre o xml e java api */ private void bindViews(){ ivUsuario = (ImageView)findViewById(R.id.ivUsuario); tvNome = (TextView)findViewById(R.id.tvNome); tvEmail = (TextView)findViewById(R.id.tvEmail); btnDesconectar = (Button)findViewById(R.id.btnDesconectar); btnRevogar = (Button)findViewById(R.id.btnRevogar); signInButton = (SignInButton) findViewById(R.id.sign_in_button); // litener de clicks signInButton.setOnClickListener(this); btnDesconectar.setOnClickListener(this); btnRevogar.setOnClickListener(this); } /** * Metodo para fazer as primeiras requisições da API para login simples */ private void obterConfiguracoesPadraoLogin(){ GoogleSignInOptions gso = new GoogleSignInOptions.Builder(GoogleSignInOptions.DEFAULT_SIGN_IN) .requestEmail() .build(); mGoogleApiClient = new GoogleApiClient.Builder(this) .enableAutoManage(this,this) .addApi(Auth.GOOGLE_SIGN_IN_API, gso) .build(); } /** * metodo para inicar o login */ private void signIn() { Intent signInIntent = Auth.GoogleSignInApi.getSignInIntent(mGoogleApiClient); startActivityForResult(signInIntent, SIGN_IN); } @Override public void onActivityResult(int requestCode, int resultCode, Intent data) { super.onActivityResult(requestCode, resultCode, data); if (requestCode == SIGN_IN) { GoogleSignInResult resultado = Auth.GoogleSignInApi.getSignInResultFromIntent(data); if (resultado.isSuccess()){ GoogleSignInAccount acct = resultado.getSignInAccount(); obterInfoGoogle(acct); } } } private void obterInfoGoogle(GoogleSignInAccount acct){ String nome = acct.getDisplayName(); tvNome.setText(nome); String email = acct.getEmail(); tvEmail.setText(email); String id = acct.getId(); Log.i(TAG,"ID do usuário no GooglePlus "+id); String urlFoto = acct.getPhotoUrl().toString(); Picasso.with(MainActivity.this).load(urlFoto).resize(100,100).into(ivUsuario); } @Override public void onClick(View v) { switch (v.getId()){ case R.id.sign_in_button: signIn(); break; case R.id.btnDesconectar: break; case R.id.btnRevogar: break; } } @Override public void onConnectionFailed(ConnectionResult connectionResult) { Log.e(TAG,"onConnectionFailed "+connectionResult.getErrorMessage()); } }
Falta ainda fazer o desconectar e revogar acesso, estou deixando para próxima parte, até lá.
---
Este artigo foi escrito por Alessandro Barreto.
Visite o nosso site para mais posts sobre desenvolvimento web! Tableless.
from Tableless http://ift.tt/1q61FWy
via IFTTT
Comentários
Enviar um comentário