Android

Livro Android Essencial com Kotlin

Posted by rlecheta on julho 26, 2017
Android, Livros / 2 Comments

Olá pessoal, este post visa explicar um pouco do conteúdo mostrado no livro Android Essencial com Kotlin.

O nome Essencial surgiu da ideia de ter um resumo simples e prático sobre os principais assuntos no desenvolvimento para Android. Este livro está mais atualizado e possui mais exemplos que a sua mesma versão em Java.

Obs: O livro utiliza libs como OkHttp e Retrofit para web services e Google Room para persistência de dados. Durante a leitura do livro são dadas diversas dicas de produtividade com a linguagem Kotlin, e também é explorado libs criadas pela JetBrains como Anko e Android Extensions.

O que veremos neste livro?

O livro começa com uma introdução ao Android e logo depois temos um capítulo básico sobre a linguagem Kotlin.

Os próximos capítulos são básicos sobre o desenvolvimento de aplicativos para Android, como a construção de telas/layouts, tratamento de eventos, activity, toolbar, fragments, etc.

No capítulo 9 iniciamos o desenvolvimento do aplicativo dos carros, que se estende até o final do livro. Este aplicativo consulta os carros no servidor criado no meu livro de Web Services RESTFul.

O aplicativo mostra diversos componentes do Material Design como o Navigation Drawer (menu lateral), Toolbar, Tabs, Listas , Cards, etc e mostra de forma simples boas práticas de desenvolvimento. O objetivo é aprender fazendo e tenho certeza de que no final da leitura você terá uma boa base sobre como continuar seus estudos e criar seus próprios apps.

Na home do aplicativo existem 3 tabs onde é possível visualizar os carros por tipo (clássicos, esportivos e luxo), e no botão FAB (+) é possível cadastrar um novo carro enviando os dados para o servidor, inclusive o app mostra como tirar uma foto e fazer upload.

Na tela de detalhes do carro, podemos assistir um vídeo do carro, visualizar um mapa de onde ele é fabricado, e até podemos Favoritar o carro. O carro favoritado é salvo no banco de dados do aplicativo e pode ser visualizado na Tab Favoritos.

Obs: O livro utiliza libs como OkHttp e Retrofit para web services e Google Room para persistência de dados. Durante o livro diversas dicas de produtovidade com a linguagem Kotlin são fornecidas, e também é explorado libs criadas pela JetBrains como Anko e Android Extensions.

Este vídeo mostra o aplicativo dos carros que será construído durante o livro. Durante o vídeo veja que eu cadastro e excluo um carro, e também favorito alguns.

Fora o aplicativo dos carros, o livro possui capítulos simples sobre diversos temas importantes do desenvolvimento para Android, como: Notificações, Alarmes, Receivers, Services, mensagens de Push com Firebase, etc.

Espero que gostem do livro, abs.

Android Studio e a ferramenta de compilação (build-tools) 26.0.0

Posted by rlecheta on julho 18, 2017
Android, Tutorial / 2 Comments

Olá pessoal, segue um comunicado importante sobre o método findViewById(id).

A partir da  ferramenta de compilação (build-tools) 26.0.0 e da biblioteca appcompat-v7 versão “26.0.0 Beta 1”, o método findViewById(id) mudou de assinatura:

Antigamente o método findViewById(id) retornava uma View e era preciso fazer o cast, como neste exemplo:

Java:

ImageView img = (ImageView) findViewById(R.id.img);

Kotlin:

val img = findViewById (R.id.img) as ImageView

Ao utilizar a nova versão da lib appcompat-v7 (26.0.0) o método findViewById(id) retorna um tipo genérico (subclasse de View). Por isso mudou a forma de fazer a chamada:

Java (sem cast):

ImageView img = findViewById(R.id.img);

Kotlin (sem cast):

val img = findViewById<ImageView>(R.id.img)

Se você conhece o que são tipos genéricos é simples entender. Veja que foi adicionado o tipo T na assinatura do método findViewById(id). Para você conferir, segue assinatura do método:

public <T extends View> T findViewById(@IdRes int id) {

return getDelegate().findViewById(id);

}

O novo livro Android Essencial com Kotlin que em breve será lançado pela editora Novatec já contém estas atualizações.

Documentação Oficial (release notes):

https://developer.android.com/topic/libraries/support-library/revisions.html

Android – compilando projetos com o plugin do Gradle 3.0.0

Posted by rlecheta on julho 18, 2017
Android, Tutorial / No Comments

Olá pessoal,

A última versão do plugin do Gradle para o Android Studio e a ferramenta de compilação (build-tools) tiveram algumas mudanças que acho importante comentar.

Se você baixar o Android Studio 3.0 atualmente, é provável que ele já esteja atualizado, mas de qualquer forma, segue dicas do que é necessário para atualizar os plugins de compilação:

Dica 1) Sempre mantenha o Android Studio atualizado, e comece a utilizar o Android Studio 3.0, mesmo que ainda esteja em beta.

Dica 2) Quando você fica na dúvida de qual versão utilizar de alguma biblioteca (ex: appcompat-v7), ou o que colocar nos arquivos build.gradle e gradle-wrapper.properties, crie um novo projeto no Android Studio, pois ele vai criar os arquivos corretamente, então é só copiar 🙂

Agora vamos aos detalhes…

1) Atualizar plugin do Android para Gradle

No arquivo build.gradle (raiz do projeto), podemos usar a nova versão do plugin (3.0.0 ou superior). Note que quando estiver lendo este tutorial é provável que exista uma nova versão, então sempre atualize. Atualmente é fácil atualizar pois o Android Studio vai lhe avisar que existe uma nova versão.

2) Atualizar versão do Gradle

Para que o plugin funcione é preciso atualizar a versão do Gradle que o projeto utiliza, isso é feito no arquivo gradle-wrapper.properties.

No meu arquivo atualmente estou usando a seguinte URL para a versão do Gradle:

distributionUrl=https\://services.gradle.org/distributions/
gradle-4.1-milestone-1-all.zip

 

 

 

3) Utilizar a diretiva “implementation” ao invés de “compile” no arquivo app/build.gradle

Antigamente, uma dependência no gradle era adicionada da seguinte forma:

compile 'com.android.support:appcompat-v7:versao-xxx'

Atualmente, o Google recomenda utilizar a diretiva implementation ao invés de compile, mas por questões de compatibilidade ambas vão continuar funcionando.

implementation 'com.android.support:appcompat-v7:versao-xxx'

Para maiores detalhes, segue documentação oficial do Google:

https://developer.android.com/studio/build/gradle-plugin-3-0-0-migration.html

Dica Android: Google Play Services

Posted by rlecheta on maio 21, 2017
Android, Tutorial / Comentários desativados em Dica Android: Google Play Services

Pessoal, esse post é rápido mas vale a pena lembrar:

Nunca importem o Google Play Services inteiro, pois ele é grande e vai pesar no seu aplicativo/apk.

compile 'com.google.android.gms:play-services:10.2.6'

O recomendado é adicionar a dependência apenas dos módulos que precisarmos. Por exemplo, se formos utilizar Mapas e GPS basta estas 2 linhas:

compile 'com.google.android.gms:play-services-maps:10.2.6'
compile 'com.google.android.gms:play-services-location:10.2.6'

Isso vai deixar seu apk muito mais leve! Para maiores detalhes sobre o Google Play Services, visite o site oficial:

https://developers.google.com/android/guides/setup

Device File Explorer no Android Studio 3.0

Posted by rlecheta on maio 21, 2017
Android, Tutorial / Comentários desativados em Device File Explorer no Android Studio 3.0

O Android Studio 3.0 possui uma nova janela muito útil chamada de Device File Explorer. Ela permite acessar os arquivos do emulador de forma rápida. Ela fica no canto direito inferior como mostra  a figura abaixo.

Você descobrirá que é simples enviar arquivos para o sdcard do Emulador ou salvar arquivos no seu computador…

No capítulo de Multimidia do livro Google Android, tem um exemplo que mostra como reproduzir um vídeo que está no SDCard. Pois bem, para testar o exemplo é só copiar o arquivo para a pasta /sdcard/Movies/last_mohicans.3gp, como mostra a figura acima.

Para testar o exemplo, lembre-se de atualizar o código para apontar para o local onde você salvou o arquivo, exemplo:

Pronto, é só isso! Como vimos no Android Studio 3.0 ficou bem mais simples copiar arquivos para o sdcard.

A figura abaixo mostra o vídeo no emulador:

 

Compartilhando arquivos no Android 7 (Nougat) e a exception FileUriExposedException

Posted by rlecheta on novembro 03, 2016
Android, Tutorial / 3 Comments

É raro termos algum erro de compatibilidade ao atualizar as versões do Android no aplicativo, mas no caso do Android 7 (Nougat) temos a exception FileUriExposedException.

Se você ainda não se deparou com ela, logo irá.

Digamos que você possui um aplicativo que tire fotos. Para exemplificar, temos este trecho de código que cria um arquivo e chama a Intent da câmera:

screen-shot-2016-11-02-at-19-26-24

Tudo normal com o código certo? Mas se você atualizar o seu projeto para compilar com a API 24/25 (Android 7) verá uma exception igual esta:

screen-shot-2016-11-02-at-19-14-35

Segundo a documentação do Android, esta exception é lançada ao expor um arquivo por uma Uri para outra aplicação. Neste caso, o erro é porque estamos expondo o arquivo que criamos para a aplicação nativa da câmera, pois a câmera precisa salvar a foto neste arquivo.

https://developer.android.com/reference/android/os/FileUriExposedException.html

Sem mais demoras, vamos logo a solução:

Edite o arquivo AndroidManifest.xml e adicione a tag <provider> dentro da tag <application> .

Exemplo: AndroidManifest.xml

screen-shot-2016-11-02-at-19-19-45

Veja que dentro de <meta-data> é referenciado um arquivo XML @xml/provider_paths com a configuração de compartilhamento para os arquivos da aplicação, neste caso vamos colocar o “.”, para compartilhar tudo desde a raiz.

Exemplo: provider_paths.xml

screen-shot-2016-11-02-at-19-20-46

Feito estas configurações no projeto, basta trocar a linha que cria a Uri do arquivo:

Uri uri = Uri.fromFile(file);

Por esta:

Uri uri = FileProvider.getUriForFile(context, context.getApplicationContext().getPackageName() + “.provider”, file);

Então, o código que chama a Intent da câmera que mostrei anteriormente fica assim:

screen-shot-2016-11-02-at-19-33-55

Exemplo: CameraUtil.java

Pronto! Agora podemos tirar fotos no Android 7 (Nougat). Espero que esta dica ajude alguém 🙂

Para maiores informações, veja a documentação oficial.

device-2016-11-02-193556

Temas no Android: O que fazer se a Action Bar estiver nula.

Posted by rlecheta on outubro 07, 2016
Android, Livro Android, Tutorial / 2 Comments

Olá pessoal, recentemente um leitor da 4a edição do livro de Android veio tirar uma dúvida sobre um erro que acontecia com um exemplo do capítulo 4.

No caso a activity estava herdando de android.app.Activity.


public class AlgumaActivity extends Activity {

... código aqui

// dava erro nessa linha

getActionBar().setDisplayHomeAsUpEnabled(true);

}

O erro reportado foi que dava NullPointer ao acessar a action bar.

OK, mas porque isso acontece?

Na maioria das vezes, se a action bar está nula com certeza é a configuração do tema.

Olhando o styles.xml do meu colega, o tema do projeto estava configurado assim:

a

Vejam que está usando o tema AppCompat, que traz a compatibilidade para várias versões do Android. Este tema substitui os temas Holo, Material, etc e atualmente é recomendado pelo Google. Isso é o esperado mesmo e está correto, pois o Android Studio atualmente gera o projeto desta forma.

O problema é que na época que escrevi a 4a edição do livro, os exemplos eram gerados de outra forma pelo Android Studio, inclusive no github da 4ed está assim:

https://github.com/livroandroid/4ed/blob/master/capitulos/cap04-activity/HelloActivity/app/src/main/res/values/styles.xml

b

Veja que o tema que usei na época da 4ed foi o Holo, que é um específico para Android 3 (API Level 11). Enfim, mas isso está explicado no livro e não quero demorar aqui…

O livro 5a ed que está mais atualizado já traz os exemplos todos com o tema de compatibilidade, portanto este problema acontece apenas nos exemplos da 4 ed, pois o Android Studio mudou a forma de gerar o código dos projetos.

Bom, existem 2 formas de resolver este problema:

1) Caso você queira deixar o código das classes de Activity iguais estavam nos exemplos da 4ed, é preciso alterar o tema do projeto para Holo ou Material, conforme o github da 4ed. Isso é feito alterando o arquivo styles.xml conforme o exemplo que mostrei acima do github.

Basicamente, se o seu tema herda de Holo ou Material, você está usando um tema nativo. Então vc deve sempre usar a android.app.Activity como a activity mãe, e neste caso você pode utilizar o método getActionBar() que retorna a action bar nativa android.app.ActionBar.

Era dessa forma que era feito nos primeiros exemplos da 4 ed. Somente no capítulo de Action Bar que começo a explicar o tema AppCompat de compatibilidade.

2) A segunda forma de resolver, e talvez a recomendada é atualizar o código de todas as Activities para herdar de android.support.v7.app.AppCompatActivity, pois é a activity do tema de compatibilidade. Atualmente o Android Studio gera o projeto com o tema AppCompat, como vimos no styles.xml do meu colega logo no início deste post. Isto indica que o projeto usa o tema de compatibilidade.

Esta configuração de tema atualmente é a indicada. Porém como o fonte da 4ed está antigo, faça as seguintes alterações no código:

  • Altere todas as activities do projeto para herdar de AppCompatActivity.
  • Altere a chamada do método getActionBar() por getSupportActionBar(), pois este último vai retornar a action bar de compatibilidade, que é a classe android.support.v7.app.ActionBar.

Como o Android Studio atualmente gera o projeto com o tema de compatibilidade, na 5ed do livro todos os exemplos já estão assim.

É isso pessoal, este breve post foi só para explicar uma pequena diferença entre a 4ed e a 5ed. Como vimos o Android Studio mudou a forma de gerar os códigos do projeto e isso afetou um pouco, e essas coisas de tema e compatibilidade costumam ser complicadas para quem está estudando Android pela primeira vez :-).

Independente de como estão os códigos-fontes da 4ed e 5ed, estes conceitos é bom conhecer.

Qualquer dúvida perguntem, abs.

Tags:

Enviando mensagens de Push com o Firebase Cloud Messaging (FCM) – parte 2

Posted by rlecheta on julho 31, 2016
Android, Tutorial / 16 Comments

Olá pessoal, na Parte 1 deste tutorial aprendemos a criar um app Android para receber mensagens de Push utilizando o Firebase.

Se você ainda não leu, segue link da 1ª parte.

http://ricardolecheta.com.br/?p=862

Na 2ª parte do Tutorial vamos ver como fazer:

  1. Enviar mensagens de Push pelo web service do Firebase (sem utilizar o console);
  2. Exemplo de como ler mensagens do tipo chave=valor no Android.

Vimos que podemos usar o console do Firebase para enviar as mensagens de Push, mas muita gente tem me perguntado como que faz para enviar a mensagem manualmente no código.

Para enviar uma mensagem de Push, basta postar no web service do Firebase um JSON contendo as informações necessárias.

A figura abaixo mostra o endereço URL do endpoint do web service e os parâmetros que precisam ser enviados:

a

Veja que o endpoint do web service do Firebase é:

https://fcm.googleapis.com/fcm/send

Obs: se você não está acostumado com o termo, “endpoint” refere-se a URL de um web service.

Algo importante da requisição, é que ela deve ser feita via POST, e deve-se enviar no cabeçalho HTTP os parâmetros Content-TypeAuthorization.

O valor parâmetro Authorization é igual a “key=SUA_SERVER_KEY”.

A SERVER_KEY do FCM pode ser encontrada na página do Console, dentro das configurações do seu projeto.

Dentro da página do seu projeto, clique em Configurações conforme indicado na figura e depois no link Project Settings. Então entre na tab Cloud Messaging, onde você verá sua SERVER KEY.

b

No meu caso, o valor do parâmetro Authorization ficou assim:

key=AIzaSyBwaM5NAiGSGoft1gIESiuRaVcQTlxHe8E

Se você é novo em programação, procure sobre como fazer requisições HTTP na linguagem que você está programando, seja PHP, Java, Python, etc.. todas tem uma forma de fazer esta requisição.

Eu gosto de testar web services utilizando o plugin Postman do Chrome, pois é simples e prático. Para brincar vamos fazer um teste rápido 🙂

No Postman, siga os seguintes passos:

1) Configure o modo de envio para POST e digite a URL do endpoint do Firebase: https://fcm.googleapis.com/fcm/send

c

2) Clique em Headers e adicione os cabeçalhos Content-TypeAuthorization

Content-Type = application/json

Authorization = key=AIzaSyBwaM5NAiGSGoft1gIESiuRaVcQTlxHe8E

Lembre-se de colocar a sua SERVER_KEY.

d

3) Clique em Body e selecione a opção raw

Digite o seguinte JSON para enviar uma notificação:

{
 "to" : "Digite o Token (registration id) do dispositivo aqui",
 "notification" : {
 "title" : "Mensagem para o Firebase",
 "body" : "Teste firebase"
 }, 
 "data" : {
 "nome" : "Ricardo",
 "sobrenome" : "Lecheta"
 }
}

A figura a seguir mostra como fiz no Postman. Depois de preencher tudo corretamente, é só clicar no botão Send e pronto! Você verá lá em baixo o JSON de resposta do servidor do Google.

g

Veja que no JSON que enviei, mandei tanto o campo “notification” que possui os dados para mostrar o alerta de notificação no dispositivo (title e body), assim como foi enviado a estrutura “data” com os parâmetros com chave e valor.

Neste caso enviei os seguintes parâmetros:

nome=Ricardo

sobrenome=Lecheta

No código, basta ler estes parâmetros conforme mostra a figura abaixo.

Tinham me perguntado como fazer para ler os dados enviados, então é exatamente desta forma que deve-se fazer 🙂

f

Vale lembrar que o Firebase vai mostrar a notificação somente se o aplicativo estiver em background. Caso ele esteja aberto, você deverá ler a mensagem e mostrar a notificação/alerta manualmente.

É isso pessoal, espero que este tutorial tenha ajudado e qualquer dúvida é só perguntar 🙂 , abs.

Enviando mensagens de Push com o Firebase Cloud Messaging (FCM)

Posted by rlecheta on julho 25, 2016
Android, Tutorial / 44 Comments

Olá pessoal.

Esta é a 1ª parte do Tutorial. A 2ª parte está aqui.

No Google I/O 2016 o Google anunciou o Firebase, uma plataforma completa com diversos serviços comuns a aplicativos móveis como analytics, crash reports, notificações push, dentre outros.

firebase

Muito tem se falado do Firebase nos últimos meses, portanto serei rápido neste post. O mais importante que você precisa saber para seguir este tutorial é que ele deve levar no máximo 10 a 15 minutos, e as mensagens de Push do Firebase são gratuitas 🙂

No livro Google Android 5a ed, explico como enviar mensagens de Push no Android com o GCM (Google Cloud Message).

Capa_AndroidLecheta4ed_FINAL

Porém como o GCM foi migrado para o FCM (Firebase Cloud Messaging), é justo atualizar os leitores do meu livro com as novidades 🙂

Neste rápido tutorial vamos aprender a enviar mensagens de Push com a nova plataforma do Firebase, e o projeto que vamos fazer é baseado na documentação do Firebase, disponível neste link:

Set Up a Firebase Cloud Messaging Client App on Android

No github do Firebase você poderá encontrar diversos exemplos, inclusive o quickstart sobre o FCM. Os códigos deste tutorial, serão baseados neste quickstart.

https://github.com/firebase/quickstart-android/tree/master/messaging

Partiu pro código!

1) Passo 1 – Criar o projeto.

Crie um projeto no Android Studio conforme a figura abaixo. Eu escolhi o template Empty Activity.

Tenha atenção no nome do pacote que você vai escolher para o projeto, pois essa informação será necessária depois para configurar o Firebase.

001

2) Configurar o Firebase no Console.

Acesse a página do console do Firebase com sua conta do Google e clique no botão Create New Project.

https://console.firebase.google.com/

002

Escolha um nome para seu projeto, selecione o Brasil como país e prossiga.

Depois de criar seu projeto, você verá a página de administração do Firebase.

003

O Firebase possui APIs para Android, iOS e Web. Neste tutorial estamos criando um app Android, portanto clique no botão Add Firebase to your Android app para configurar o projeto.

No wizard insira o nome do seu pacote, o SHA1 do seu certificado e clique em Add App.

004

Siga o wizard, e no passo 2 faça o download do arquivo google-services.json conforme indicado na figura. Este arquivo contem as configurações da sua conta do Firebase e deve ficar dentro do módulo app do projeto, conforme indicado na figura.

005

No último passo do wizard, temos as instruções de como configurar o gradle. É só copiar o código e colar no local indicado. Veja que devemos alterar o arquivo build.gradle da raiz do projeto, e depois o arquivo app/build.gradle do módulo app.
006

Depois de fazer estas configurações, edite o arquivo app/build.gradle e adicione a dependência do Firebase no projeto:

 

No Android Studio, adicione a dependência FCM ao arquivo build.gradle de nível do aplicativo:

  • app/build.gradle

dependencies {
compile ‘com.google.firebase:firebase-messaging:9.6.1’
}

Pronto! Agora vamos voltar ao projeto Android.

3) Configuração do projeto Android.

Crie a classe MyFirebaseInstanceIDService conforme o código deste link:

https://github.com/firebase/quickstart-android/blob/master/messaging/app/src/main/java/com/google/firebase/quickstart/fcm/MyFirebaseInstanceIDService.java

Veja que vamos usar o próprio exemplo de quickstart do Firebase, assim não temos como errar :-).

Nesta classe, o método onTokenRefresh() é chamado quando o aplicativo receber um token (registration id). Como você aprendeu no livro Google Android 5ed, este token representa o identificador do dispositivo e precisa ser enviado ao seu servidor, pois com ele é possível enviar uma mensagem para este dispositivo.

 

@Override
 public void onTokenRefresh() {
 // Get updated InstanceID token.
 String refreshedToken = FirebaseInstanceId.getInstance().getToken();
 Log.d(TAG, "Refreshed token: " + refreshedToken);

// TODO: Implement this method to send any registration to your app's servers.
 sendRegistrationToServer(refreshedToken);
 }

Feito isso, crie a classe MyFirebaseMessagingService. Ela será responsável por receber as mensagens de push e criar notificações para avisar ao usuário.

Novamente, vamos copiar a classe de exemplo do quickstart do Firebase.

https://github.com/firebase/quickstart-android/blob/master/messaging/app/src/main/java/com/google/firebase/quickstart/fcm/MyFirebaseMessagingService.java

O método onMessageReceived(msg) é chamado quando uma notificação de Push é recebida, simples assim 🙂


@Override
 public void onMessageReceived(RemoteMessage remoteMessage) {
 // Faça algo aqui como mostrar uma notificação.
 }

Depois de criar estes 2 serviços  do Firebase, é preciso cadastrá-los no AndroidManifest.xml, conforme mostra a figura abaixo.

b

c

Para ajudar, copie o trecho de código do manifest dos exemplos do Firebase.

https://github.com/firebase/quickstart-android/blob/master/messaging/app/src/main/AndroidManifest.xml

Ao rodar o aplicativo você verá a mensagem que o token deste dispositivo foi gerado com sucesso. Funciona mesmo no emulador do Android SDK.


I/FirebaseInitProvider: FirebaseApp initialization successful
07-23 21:04:53.633 16360-16514/br.com.livroandroid.hellofirebasemessaging D/MyFirebaseIIDService: &amp;amp;amp;amp;amp;lt;strong&amp;amp;amp;amp;amp;gt;Refreshed token&amp;amp;amp;amp;amp;lt;/strong&amp;amp;amp;amp;amp;gt;: cJmLLI-dIR0:APA91bGtuSyWqc-T7kBx_eeC2ANJbBmyl2v1zlZ74afrRiqyJOC0Y7apmfdcDuuKL0JX2_gDpGW-xzROEQS3qKYRXNTfMOloSYoE8o3dqOJobeXTsLHG4jbSU1lQ5JV2-LEM9jN5B_BI

4) Enviando uma mensagem pelo console do Firebase.

Já temos tudo configurado, e só falta enviarmos uma mensagem para testar o Push. O legal do Firebase é que isso pode ser feito pela sua própria página de console.

No console do Firebase, acesse o menu Notifications e envie uma notificação. Basta preencher o campo Message text e selecionar o aplicativo com o seu pacote no campo Target.

d

Ao enviar uma mensagem com o aplicativo aberto, você verá no LogCat conforme indicado na figura abaixo 🙂

MyFirebaseMsgService: Message Notification Body: Hello Firebase!

e

Agora pressione o botão Home do Android e deixe o aplicativo em background. Neste caso ao enviar a mensagem o Firebase vai mostrar uma notificação automaticamente, conforme este print.

f

Veja que a notificação só foi exibida com o app em background, e este é o comportamento padrão do firebase.

Basicamente, existem 2 tipos de mensagens: data messages (pares de chave=valor) e notification messages.

1) As mensagens do tipo data messages são sempre recebidas no método onMessageReceived(removeMessage), independente se o app está aberto ou em background.

Para identificar se a mensagem é do tipo data message, basta verificar se o método getData() retorna um Map com registros (chave=valor).

if (remoteMessage.getData().size() &amp;gt; 0) {
&amp;nbsp; &amp;nbsp;Log.d(TAG, "Message data payload: " + remoteMessage.getData());
}

Neste caso o desenvolvedor é sempre responsável por mostrar uma notificação para o usuário, ou seja, é preciso programar para mostrar a notificação. No código de exemplo do firebase tem até um exemplo disso basta descomentar o código.

Para enviar uma mensagem do tipo data message pelo console do Firebase, entre em opções avançadas e preencha a estrutura de chave=valor, é bem simples. Depois no app você poderá ler os valores.

2) As mensagens do tipo notification messages possuem um comportamento um pouco diferente, e foi esta mensagem que enviamos, pois ela não continha nenhum parâmetro do tipo (chave=valor).

Neste tipo de mensagem, se o app está aberto o método onMessageReceived(removeMessage) é executado. Neste caso, o desenvolvedor é responsável por programar a leitura da mensagem e mostrar a notificação para o usuário. Porém, caso o app esteja em background o Firebase vai mostrar uma notificação automaticamente para o usuário. Ao clicar na notificação os dados da mensagem de push serão enviados para a activity principal do aplicativo, então é só fazer o tratamento ao abrir o app e pronto 🙂

Para maiores detalhes sobre os tipos de notificações veja esse link:

https://firebase.google.com/docs/cloud-messaging/concept-options

É isso pessoal 🙂 Espero que este breve tutorial tenha ajudado a entender um pouco sobre como enviar mensagens de Push com o Firebase. Vale lembrar que o Google ainda vai dar suporte para o GCM um bom tempo, até porque existem muitas aplicações que estão utilizando este serviço em produção. Mas para novos apps, recomenda-se utilizar o Firebase.

Uma dica é usar o Firebase também para aplicativos iOS, pois o serviço de Push do Google é bem mais simples que o serviço da APNS (Apple Push Notification Service) da Apple.

Se você gostou, confira a 2ª parte do tutorial aqui.

Abs

 

github 5ed Livro Android atualizado com PreferenceFragmentCompat

Posted by rlecheta on maio 22, 2016
Android, Livro Android / Comentários desativados em github 5ed Livro Android atualizado com PreferenceFragmentCompat

Olá pessoal,

Postei no forum dos livros uma explicação sobre o PreferenceFragmentCompat, e atualizei o git do livro com exemplos.

Mais detalhes aqui.