Blog oficial para desenvolvedores que falam português
Implementar in-app billing em Android pode ser mais simples do que você imagina
28/02/2013
Postado por
Bruno Oliveira
, Developer Relations, Android, Google.
Quando dizemos
in-app billing em Android
, o que queremos dizer é a venda de itens virtuais e serviços a partir de um aplicativo. Desde que as ferramentas de in-app billing do Android foram lançadas, seu uso vem crescendo constantemente: cada vez mais apps estão implementando modelos flexíveis de monetização, incluindo itens virtuais e assinaturas de serviços.
Naturalmente, nem todo aplicativo tem a rentabilidade como objetivo! Existem aplicativos dos mais variados tipos e com os mais variados propósitos, e não estou de forma alguma afirmando que
todo
desenvolvedor deve implementar vendas de itens virtuais. Porém, para aqueles onde a rentabilidade é um fator importante, o in-app billing pode ser uma ferramenta incrivelmente efetiva. Aliás, se observarmos uma lista de aplicativos em ordem de rentabilidade, veremos que praticamente todos os apps no topo desse ranking estão utilizando in-app billing.
Quando lançamos esse feature em 2011, adotamos uma API com um modelo assíncrono com múltiplos componentes onde era necessário implementar serviços e
broadcast receivers
. Porém, numa simplificação significativa da API,
lançamos recentemente
o in-app billing versão 3, que introduz um modelo síncrono, onde a resposta é recebida imediatamente ao invés de depender de um serviço em background, tornando muito mais fácil escrever uma implementação correta e robusta.
Implementar in-app billing no seu aplicativo pode ser mais simples do que você imagina.
Escrever o código de exemplo para o in-app billing versão 3 foi um dos meus projetos recentes, e por isso posso dizer com certo conhecimento que a implementação é bem fácil e até divertida! Esse código de exemplo pode ser encontrado no Android SDK Manager, bastando selecionar
Extras
, depois
Google Play Billing
. O código fonte também está publicamente disponível
neste repositório
.
Então, como começar?
Defina seus itens virtuais
Primeiramente, você deve adicionar itens virtuais ao seu aplicativo no
Developer Console
(certifique-se de estar utilizando a versão 2, disponível em
https://play.google.com/apps/publish/v2
, e não a versão antiga). Para isso, basta ir à aba "In-app Products" e adicionar seus itens virtuais. Por exemplo, vamos supor que você quer adicionar um item virtual que é um "upgrade premium" do seu aplicativo, que destrava conteúdo exclusivo. Então, basta adicionar um novo produto clicando
Add New Product
, inventar um Product ID (usaremos
"premium"
nesse exemplo) e selecionar "Managed product" como tipo (o in-app billing version 3 só funciona com
managed items
ou
subscriptions
). Após configurar o preço, certifique-se que o item está configurado como
"Active"
na parte superior da tela.
Após fazer isso, o item deverá estar disponível para uso dentro de algumas horas. Enquanto isso, você pode trabalhar no seu código!
Escreva seu código
Baixe o app de exemplo, que se chama
TrivialDrive
(novamente, isso pode ser feito pelo Android SDK Manager, em
Extras | Google Play Billing
). Note que o app de exemplo contém uma série de classes fáceis de reutilizar, no pacote
com.example.trivialdrivesample.util
. Copie esses arquivos para o seu próprio projeto, e, se desejar, mude o
package name
.
Na sua
Activity
, inclua o código em
onCreate()
para inicializar o in-app billing e já aproveitar para obter uma lista dos itens virtuais que o usuário possui:
// objeto "helper" para in-app billing
IabHelper mHelper;
// caixa com spinner para indicar que estamos trabalhando em algo,
// para que o usuário não perca a paciência conosco...
ProgressDialog mProgressDialog;
@Override
public void
onCreate(
Bundle
savedInstanceState) {
super
.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
// spinner que fica na tela enquanto inicializamos:
mProgressDialog =
new
ProgressDialog
();
mProgressDialog.setMessage(
"Aguarde..."
);
// chave publica do app
String
base64EncodedPublicKey =
"SUA_CHAVE_AQUI"
;
// cria o objeto auxiliar IabHelper
mHelper =
new
IabHelper
(
this
, base64EncodedPublicKey);
// inicia o setup
mHelper.startSetup(
new
IabHelper.OnIabSetupFinishedListener() {
// esse metodo é invocado quando o setup termina
public void
onIabSetupFinished(
IabResult
result) {
if (!result.isSuccess()) {
// (lidar com erro aqui)
// ...
return
;
}
// pede lista dos itens que o usuario possui
mHelper.queryInventoryAsync(this);
}
});
}
Substitua
SUA_CHAVE_AQUI
pela chave pública do seu aplicativo. Você pode obtê-la no Developer Console, na aba
Services & APIs
, sob o título "Your license key for this application." Num aplicativo de produção, recomendamos não incluir sua chave literalmente, mas construí-la em tempo de execução a partir de pedaços, encriptá-la, usar XOR e outras operações de bits, etc, para tornar a chave menos óbvia no código compilado do seu aplicativo.
Agora, faça com que sua Activity implemente a interface
QueryInventoryFinishedListener
. Quando a lista dos itens que o usuário possui tiver sido baixada do servidor, o seguinte método da sua Activity será chamado:
public void
onQueryInventoryFinished(
IabResult
result,
Inventory
inventory) {
mProgressDialog.dismiss();
if
(result.isFailure()) {
complain(
"Erro ao obter lista de itens: "
+ result);
return
;
}
// Temos o upgrade?
Purchase
premiumPurchase = inventory.getPurchase(
"premium"
);
mIsPremium = (premiumPurchase !=
null
&& verifyDeveloperPayload(premiumPurchase));
if
(mIsPremium) {
// destrava conteúdo premium
// ....
}
}
(Obs: falaremos do método
verifyDeveloperPayload()
a seguir)
Ok, até agora o que temos é um app que detecta, ao iniciar, se o usuário tem ou não o item "premium", que dá direito ao conteúdo exclusivo, e destrava o conteúdo em caso afirmativo. Mas falta algo muito importante (e notaríamos que as vendas não iriam muito bem se lançássemos o app assim). O que falta de tão importante?
Exato, falta permitir que o usuário compre o item!
Para isso, faça um elemento de UI apropriado para seu aplicativo que permita ao usuário iniciar o processo. Nesse exemplo, serei inacreditavelmente criativo e usarei... um botão:
<Button
android:onClick=
"onBuyClicked"
android:layout_width=
"wrap_content"
android:layout_height=
"wrap_content"
android:text=
"Destravar conteúdo exclusivo"
/>
E agora escrevemos o método:
final static int
RC_REQUEST = 12345;
public void
onBuyClicked(
View
unused) {
mProgressDialog.show();
String
payload =
"SEU_DEVELOPER_PAYLOAD_AQUI"
;
mHelper.launchPurchaseFlow(
this
,
"premium"
, RC_REQUEST,
this
, payload);
}
(Obs: novamente, falaremos sobre
developer payload
a seguir).
O que esse método faz é iniciar a interface que permite que o usuário compre o item. A constante RC_REQUEST é um inteiro arbitrário usado para comunicação entre Activity's (como ocorre com
startActivityForResult()
).
Agora fazemos com que a Activity implemente a interface
OnIabPurchaseFinishedListener
e implementamos o seguinte método, que será chamado quando o processo de compra terminar:
public void
onIabPurchaseFinished(
IabResult
result,
Purchase
purchase) {
mProgressDialog.dismiss();
if
(result.isFailure()) {
// (alertar usuário sobre erro na compra)
// ....
return;
}
if
(!verifyDeveloperPayload(purchase)) {
// (alertar usuário que houve falha de verificação
// de autenticidade na compra)
// ....
return;
}
if
(purchase.getSku().equals("premium")) {
// destrava conteúdo exclusivo
// ...
}
}
Pronto: agora seu app permite que o usuário compre o conteúdo exclusivo, e detecta automaticamente se o usuário tem acesso ao conteúdo ou não ao iniciar.
Resta agora falar rapidamente sobre duas coisas:
developer payload
e
consumption
.
Sobre Developer Payload
Developer payload
é uma string arbitrária que você pode especificar no ato da compra, e que será devolvida junto com o produto sempre que você recuperar aquela compra daquele usuário. É uma espécie de
tag
, que fica permanentemente anexada àquela compra daquele usuário. O uso recomendado desse campo é para determinar se uma compra é legítima -- se, no processo de compra, você colocou o tag "pertence a Bruno Oliveira" e a compra vem com um tag diferente disso, você saberá que a compra não é legítima. E difícil falsificar tags porque a compra (que inclui o tag) vem assinada por uma chave privada no servidor, que é verificada pela sua chave pública (a classe
IabHelper
faz isso para você). Recomendamos criar developer payloads que estejam vinculados
ao usuário que fez a compra
, para evitar o ataque onde a mesma compra é "transplantada" para outro dispositivo. Então se o meu gêmeo maligno, Onurb Oliveira (todos temos um gêmeo maligno!), entrar nos arquivos do meu Android e conseguir copiar os dados de compra para o aparelho dele, o app iniciará e verá pelo developer payload que aquela compra não pertence a "Onurb Oliveira" e sim a "Bruno Oliveira".
O que é
consumption
?
Para terminar, vou só mencionar um conceito importante que é o de
consumption
, que foi introduzido pela versão 3. Consumir uma compra significa simplesmente fazer com que ela desapareça. Isso deve ser feito para itens que são consumíveis pelo usuário, como por exemplo uma poção mágica no seu jogo -- o usuário compra a poção, e, quando a toma, ele não deve mais ser dono daquela poção. Para isso, basta chamar:
mHelper.consumeAsync(purchase,
this
);
Onde
purchase
é a compra da poção. Você será notificado do resultado do consumo através do método onConsumeFinished(), que indicará se houve sucesso ou falha.
Como testar?
Para testar seu aplicativo, você pode usar itens de teste como descrito
aqui
(link em inglês), ou pode fazer testes usando os itens reais e um cartão de crédito real (lembre-se de reembolsar as compras de teste para que o as despesas não sejam lançadas no seu cartão). Em todo caso, lembre de um fato importante ao testar: você não pode comprar um item virtual usando a mesma conta que o está vendendo! Ou seja, se você publicou seu aplicativo como
x@gmail.com
, então não poderá tentar comprar itens no aplicativo usando a conta
x@gmail.com
. Outro ponto importante é ter certeza de que você está assinando o seu APK com a mesma chave que usou para publicar seu aplicativo no Developer Console. Usar a chave de debug (ou qualquer outra chave) não funcionará corretamente, por motivos de segurança.
Para saber mais sobre in-app billing, leia nossa
documentação online
(em inglês) e não deixe de ler nosso
guia passo a passo sobre o assunto
(em inglês).
GDG São Paulo organiza Android Meetup no dia 05 de Março
27/02/2013
Olá pessoal !
Você quer encontrar um pessoal que desenvolve aplicativos Android ?
Venha participar do
Android Meetup
que o
GDG São Paulo
está organizando e que será realizado no dia 5 de Março, no escritório do Google Brasil em São Paulo. O evento é gratuito (vagas limitadas) e é necessária a inscrição para a participação.
A recepção vai ser a partir das 18:30 e a primeira palestra começara as 19 horas, veja a agenda do evento:
18:30 - Recepção e credenciamento
19:00 - Como criar apps Android de qualidade e ser destaque no Google Play -
Neto Marin
20:00 - Criando um negócio com a AdMob -
Talita Ferreira
20:45 - Entenda as diferenças entre a Google Maps Android API v1 e v2 -
Ricardo Ogliari
21:30 - Networking com pizza!
Então, lembre-se, vá até o post do
evento no Google+
, confirme sua presença e clique no link que está na descrição do evento para fazer sua inscrição! Não perca a oportunidade de encontrar outros desenvolvedores Android, e não importa se você está começando, é exatamente uma ótima oportunidade pra aprender e evoluir!
Aproveite e siga o
GDG São Paulo
e entre na comunidade para conversar com outras pessoas interessadas em tecnologias Google!
Vejo vocês na próxima semana!
Abraços
Neto Marin
Apresentando o login com Google+: simples, seguro e sem spam social
26/02/2013
Tradução do post "
Introducing Google+ Sign-In: simple and secure, minus the social spam
"
Criado por
Seth Sternberg
, Diretor de Gerenciamento de Produto, Google+
Hoje estamos adicionando uma nova funcionalidade à plataforma Google+:
login de aplicativos
(Google+ Sign-In). Se você está fazendo um aplicativo Android, iOS ou na web, os usuários podem agora fazer o login na sua app com o Google, e trazer junto suas informações do Google+ para uma melhor experiência. É simples, seguro e proíbe o spam social. E nós estamos apenas começando.
Nesse lançamento inicial, nos focamos em nossos quatro princípios para fazer coisas incríveis para os usuários:
1. Simplicidade e segurança vem em primeiro lugar
Se você acessa o Gmail, YouTube ou qualquer outro serviço do Google, você pode agora usar essas mesmas credenciais para acessar apps de fora do Google. Você precisa apenas revisar a tela de permissões do Google+ (que destaca as informações que você está compartilhando com a app, e as pessoas que poderão ver as atividades), e você já estará pronto. O login com Google+ também inclui as proteções salvaguardas que você espera da sua conta no Google (como por exemplo o
verificação em 2 passos
), então você pode fazer seu login sempre com confiança.
Para gerenciar as aplicações autorizadas também é simples: Visite
plus.google.com/apps
a qualquer momento, ou abra a nova aplicação Google Settings no Android.
2. Desktop e mobile são melhores juntos
Muitos desenvolvedores oferecem seus aplicativos em versões web e mobile, ainda fazendo as configurações através do browser, e com isso, telefones e tablets continuam sendo os principais problemas. E começando hoje, quando você se autenticar em um website com o Google, é possível instalar a app mobile do site no seu dispositivo Android com apenas um clique.
3. Compartilhar é seletivo; espalhar é só spam
As vezes você tem vontade de compartilhar alguma coisa com todo mundo (um recorde em um jogo, por exemplo), mas outras vezes você quer manter algumas coisas para si mesmo (como objetivos de saúde). Com o Google+ Sign-In e os circulos, você decide com quem você vai compartilhar, ou com ninguém. E além disso, o Google+ não deixa as apps espalharem atualizações freneticamente no seu stream, então, a atividade da app irá aparecer apenas quando é relevante (por exemplo, quando você realmente estiver procurando por isso).
4. Compartilhar é para o que se faz, não só para o que se vê
Fotos e vídeos são ótimos para ver, mas algumas vezes, você quer na verdade, fazer alguma coisa online. E por isso, quando você compartilha de uma app que usa o login com Google+, seus amigos irão ver um novo tipo de post "interativo" no stream do Google+. Clicando nesse post, eles serão levados para dentro da app, onde eles podem comprar, escutar ou avaliar exatamente o que você compartilhou.
Posts interativos compartilhados pelo Fancy (esquerda) e TuneIn Radio (direita)
Posts interativos compartilhados pelo OpenTable (esquerda) e Flixter (direita)
Se você está criando uma app para Android, iOS ou para web, e gostaria de incluir o login com o Google+ (Google+ Sign-In), simplesmente mergulhe em nossa
documentação para desenvolvedores
e comece a
checar as estatísticas
assim que a sua integração estiver online.
Aplicativos Android irão requerer a última versão do
Google Play Services
, que estará disponível para todos os dispositivos nos próximos dias.
Para ver o que outros desenvolvedores estão fazendo com o Google+ Sign-In, visite alguns dos sites abaixo, e veja o novo botão "Sign in with Google" (também estão sendo disponibilizados gradualmente):
Banjo
Beautylish
Fancy
Fitbit
Flixster
The Guardian
OpenTable
Shazam
TuneIn Radio
USA Today
Você conhece os GDGs ?
18/02/2013
Você gostaria de participar de reuniões, eventos e palestras sobre tecnologias do Google ? E melhor ainda, você gostaria de conversar com pessoas que implementaram, na vida real, soluções com essas tecnologias e que podem ter dicas importantes para você ?
Ou então, você é do tipo que gosta de compartilhar seu conhecimento, gosta de organizar eventos, quer apresentar um projeto open-source ou está procurando um bom profissional para o seu time ?
Então, já ouviu falar dos
Google Developer Groups
, ou da sigla GDG ?
Os GDGs são grupos para desenvolvedores que estão interessados em tecnologias do Google, como Android, App Engine, Chrome e também APIs, como Maps API, YouTube API ou Google Calendar API.
No mundo já são mais de 370 GDGs, e que nos últimos seis meses organizaram mais de 1750 eventos! Hoje temos oficialmente 6 GDGs no Brasil, e mais dois ou três devem "nascer" em breve ! Para saber onde há GDGs no Brasil e no mundo, você pode visitar a página do
diretório dos GDGs
.
Veja a lista abaixo com o nome e o link para a plus page do grupo. Lá você vai poder achar mais informações sobre quem são os organizadores, outros links importantes e interagir com o pessoal!
GDG Belo Horizonte
GDG Campinas
GDG Goiás
GDG Salvador
GDG Santa Catarina
GDG São Paulo
Não achou um GDG na sua região? porque você não se junta com alguns amigos e cria um?
Afinal, a comunidade são vocês. Se não gosta de organizar eventos, mas gosta de palestrar, é uma ótima oportunidade também. Procure um dos GDGs, pois com tanta tecnologia hoje, só não participa quem não quer !
E como posso ajudar ?
Os GDGs são grupos independentes, que tem como objetivo unir pessoas com interesses em comum. Você pode ajudar de diversas maneiras. Algumas idéias:
Ser membro da equipe de organização, afinal, alguém sempre precisa fazer trabalhos como achar espaços para as reuniões, contactar patrocinadores, cuidar de detalhes de microfone, projetor e etc. Esse tipo de ajuda é sempre bem vinda!
Apresentar uma palestra ou codelab, caso você tenha facilidade e goste de falar em público essa é uma grande oportunidade. Você pode melhorar seus skills, treinar, compartilhar e sempre, ensinar é uma ótima maneira de se aprimorar o conhecimento.
Cuidar da +Page, do perfil no Twitter e também responder perguntas nos grupos. Todos os dias novas pessoas vão ter dúvidas, e sempre é preciso ter alguém respondendo e dando atenção aos usuários.
Além dessas três formas, entre em contato com o GDG perto de você e veja como você pode ajudar. Isso com certeza irá aumentar seu networking, te trará experiências, além de ser muito divertido aprender coisas novas e conhecer gente nova!
Vejo vocês em um GDG ! =)
Abraços
Neto Marin
O impacto de ter o aplicativo em destaque
15/02/2013
Se você acessou o Google Play recentemente, deve ter notado no banner uma categoria bem especial para o brasil, o Kit de Carnaval. Em uma ação inédita, pela primeira vez tivemos no Google Play uma categoria dedicada especialmente ao Brasil, e nesse caso, para o tão esperado carnaval!
No caso de aplicativos, tivemos 3 apps brasileiras compondo essa coleção. Apesar do que se pode imaginar, não foi fácil achar os aplicativos para essa coleção. E você pode estar perguntando, mas porque ? Afinal, temos muitos desenvolvedores brasileiros e milhares de aplicativos desses desenvolvedores. O que acontece então ?
Para que uma app seja elegível para o destaque, ela precisa, acima de tudo, seguir os guidelines da plataforma para
qualidade
e também de
interface com o usuário
. Outro detalhe, que muitos deixam passar, é a atenção com a "feature image" que é opcional no momento de publicar uma app, mas que é obrigatório para caso seu aplicativo seja selecionado para destaque. Para mais detalhes, você pode encontrar um post no blog do Android Developers com o título
Google Play Featured-Image Guidelines
e que explica os principais detalhes e uso dessa imagem.
E vale a pena realmente seguir todas essas guidelines, investir nessas imagens e etc?
Essa deve ser a pergunta que muito desenvolvedor está fazendo nesse momento. Afinal, a app já está pronta e publicada, e agora, ter que rever as telas, a navegação e ícones pode dar muito trabalho, não é?
O primeiro ponto é que, seguindo esses guidelines, você irá facilitar a vida do seu usuário, pois ele está cada vez mais adaptado e treinado a usar alguns recursos que a própria plataforma Android disponibiliza.
Além disso, gostaria de mostrar para vocês um screenshot da página do aplicativo
myTrip
no Google Play. Esse screenshot foi tirado logo depois que a coleção de carnaval foi pro ar:
No lado direito, é perceptível o crescimento vertiginoso que esse aplicativo teve em poucos dias. Logo, mais instalações significam mais visibilidade para sua app, maior monetização (se você usar
AdMob
por exemplo) e claro, entrar em rankings de download e se posicionar melhor no momento de busca.
A idéia desse post era mostrar como ser destaque na loja pode ser a diferença para seu aplicativo. Nos próximos posts vou apresentar alguns casos de apps que seguiram os guidelines e também estão já como destaque ou se tornarão destaque em breve!
Abraços
Neto Marin
Labels
+page
1
20th Century Fox
1
A/B
1
Action
1
Action Console
1
Actions
3
Actions Console
1
Actions on Google
1
ActiveQA
1
Adaptive Battery
1
AddThis
1
ADK
1
ADL
1
Admin do Firebase
1
AdMob
6
Ads
2
AdWords
1
AdX
1
AI
4
algoritmo
1
AMP
6
AMP Linker
1
AMP Project
1
Analytics API
1
Android
58
Android 8.0 Oreo
1
Android 8.1
1
Android ADK
2
Android API
2
Android App Bundle
1
Android Dev Summit
1
Android Developers
23
Android Marshmallow
1
Android N
3
Android Nougat
2
Android P
3
Android P Beta 2
1
Android Preview
1
Android SDK
1
android studio
8
Android Studio 3.2
1
android wear
2
AndroidDev
6
AndroidX
1
Announcement
2
AoG
1
AoGDevs
1
api
15
API 25
1
API 28
1
APIs
4
Aplicativos
4
app
1
App Engine
1
Apple
1
apply
1
Apps
9
AR
1
ARCore
3
artificial intelligence
1
AsyncTask
1
AUC
1
AutoAugment
1
Avro
1
Awareness API
1
Biblioteca do Google
1
Big Data
1
BigQuery
1
BiometricPrompt
1
bitcode
1
Borg
1
Bot
1
bytecode Dalvik
1
C++
1
câmera
1
CameraDevice
1
Canal Beta
1
canary
1
câncer de próstata
1
Capital One
1
Cast
1
CFI
1
Chrome
8
Chrome 68
1
Chrome Dev Summit
1
Chrome DevTools
1
Chrome OS
2
Chromecast
1
Chromium
2
CI
1
CLI
1
Cloud
6
Cloud Computing
1
Cloud Console
1
Cloud Dataflow
1
Cloud Developers
2
Cloud DLP
1
Cloud Firestore
1
Cloud Messaging
1
Cloud ML Engine
1
Cloud Scheduler
1
Cloud Shell
1
Cloud Source Repositories
1
Cloud Spanner
2
CodeSchool
1
código aberto
2
Compute Engine
1
ConfigMap
1
Container Builder
1
CPU
2
Crash Reporting
2
Crashlytics
3
credential api
1
criptografia
1
CSS
3
CSS Grid Layout
1
CSV
1
CTA
1
Curitiba
1
Dart API
1
Data Validation
1
DBAs
1
DCGAN
1
Desenvolvedores Google
11
Desenvolvimento
3
DevBusBrasil
1
DevBytes
2
Developer Bus
1
Developer Preview
1
developer quiz
1
DevFest
3
DevFest16
1
DevFest18
1
DevFestW
1
DFP
2
Dialogflow
1
DLP
1
DLS
1
documentação
1
Dragon Ball Legends
1
E2E
1
eclipse
1
end-to-end-encryption
1
Estimator
1
Estimators API
1
estudantes
1
Eventos
15
Famílias multilíngue
1
FCM
2
Featured
1
Firebase
24
Firebase Analytics
6
Firebase App Indexing
2
Firebase Cloud Messaging
5
Firebase Crashlytics
2
Firebase Dynamic Links
3
Firebase In-App Messaging
1
Firebase Invites
2
Firebase Lab
1
Firebase Links Dinamicos
1
Firebase Notifications
3
Firebase Remote Config
1
Flutter
3
FRR
1
G+
1
game
1
game dev
3
Games
2
games services
1
GCloud
3
GCM
1
GCP
7
GDD
7
GDE
1
GDEs
1
GDG
12
GDG Curitiba
1
GDG Floripa
1
GDG OpenSampa
1
GDG Porto Alegre
1
GDG Recife
1
GDG SP
3
GDGs
1
GDL
1
Git
1
GitHub
1
GNMT
1
Google
3
Google Ad Manager
1
Google AI
1
Google Analytics
1
Google Assistant
1
Google Assistente
3
Google Brain
2
Google Cast SDK
1
google clou
1
Google Cloud
17
Google Cloud Certified
1
Google Cloud Healthcare API
1
Google Cloud Platform
3
google code-in
1
Google Developer Advocate
1
Google Developer Expert
1
Google Developers
11
Google Fotos
1
Google I/O
6
Google Play
16
Google Play Games services
1
Google Play Protect
1
Google Play Services
4
Google Slides
1
Google Speech
1
google summer of code
1
Google+
2
Google+ sign-in
1
Googlers
1
GPU
2
GSuites
1
GUI
1
Hackathon
1
Hangouts
1
Hangouts Chat
1
HDR
1
High Quality Apps
2
HTML5
6
HTTP
3
HTTPS
2
HttpURLConnection
2
I/O
1
IA
2
Illusive Images
1
ImageReader
1
In-App Messaging
1
Inglês
1
Instant Apps
1
inteligencia artificial
1
IntelliJ REPL
1
IntentService
1
Interoperabilidade
1
IO Extended
1
IO13
1
iOS
9
IU
2
Java
1
Java 8
1
javascript
2
JPEG
1
JSON
2
Kaggle
1
kernel
1
Keyboard Map API
1
Knowledge Connectors
1
Kotlin
6
Kotlin da Udacity
1
Kubernetes
5
LangID
1
Launchpad
1
launchpad accelerator
2
Learning Augmentation
1
LEGO
1
Listas
1
ListFragment
1
LLVM
1
LTO
1
Machine Learning
2
Meetup
2
mensagens
1
Mentoria
1
Messaging
2
microsserviços
1
ML
2
ML Kit
1
Mobile
3
Mobile Ads SDK
1
Monetização
3
Monetize
3
MySQL
1
Native
1
Navigation Architecture Component
1
NES
1
Neto Marin
2
Next Level Apps
2
Next Level Tips
2
NNLM
1
Node.js
2
Notificações
1
novembro azul
1
Number Genie
1
Nuvem Profissional
1
OAuth
2
OAuth2
1
Open Images Extended
1
open source
3
Options Menu
1
Options Menu virtual
1
Orkut
2
Payment Request
1
pesquisa
1
PHA
1
Phone Gateway
1
PII
1
pixel
1
Play Academy
1
Play Console
1
Play Services
1
Playtime 2018
1
plug-in AMP
1
Porto Alegre
1
Preact
1
PRIV
1
program
1
progressive web apps
2
Push Notification
2
Python
1
QA
1
RA
2
Raspberry Pi
1
RBDMS
1
React
1
recording apis
1
remarketing
1
Remote Config
2
research
4
ResultReceiver
1
reward
1
RNN
2
Robolectric 4.0
1
RV
1
Sceneform
1
SDK
4
SDK Manager
3
Security
2
Server
1
service worker
1
sign-in
1
Sliding Tabs
1
Smartronix
1
social
6
Spark
1
SRE
1
Stack
1
Stack Overflow
1
Startups
2
Storage
2
story
1
Support Library
1
SurfaceView
1
Svelte
1
switch
1
Tag Manager
1
Tag Manager 360
1
tensorflow
5
TensorFlow Hub
2
TensorFlow Lite
1
TensorFlow Transform
1
Test Lab
2
Testes
1
TF Hub
2
tf.keras
1
TFDV
1
TFX
1
TI essencial
1
toolkit
1
tradução
1
TTS
1
Udacity
1
Universal Apps
1
Universal Sentence Encoder
1
user experience
1
ux
1
VectorDrawable
1
Velostrata
1
Volley
1
vr
2
vulnerabilidades
1
vulnerabilidades do Google
1
vulnerability
1
web
2
web dev
2
WebKit
1
webservice
3
when
1
WordPress
1
WorkerDOM
1
YouTube
4
YouTube API
1
YUV
1
Zomato
1
Archive
2022
nov.
out.
jul.
jun.
mai.
abr.
mar.
fev.
jan.
2021
dez.
nov.
out.
set.
ago.
jul.
jun.
mai.
abr.
mar.
fev.
jan.
2020
dez.
nov.
out.
set.
ago.
jul.
jun.
mai.
abr.
mar.
fev.
jan.
2019
dez.
nov.
out.
set.
ago.
jul.
jun.
mai.
abr.
2018
dez.
nov.
out.
set.
ago.
jul.
jun.
mai.
abr.
mar.
fev.
2017
ago.
jul.
jun.
mai.
abr.
mar.
jan.
2016
dez.
nov.
out.
set.
ago.
jul.
mai.
mar.
2014
jul.
jun.
abr.
mar.
fev.
2013
dez.
nov.
out.
set.
ago.
jul.
jun.
mai.
mar.
fev.
jan.
2012
nov.
jul.
jun.
mai.
abr.
mar.
2011
nov.
set.
ago.
jul.
jun.
Feed
Follow @googledevbr