Google Play Services Rocks!!!

Post on 06-Jan-2017

4.114 views 0 download

Transcript of Google Play Services Rocks!!!

+Nelson Glauber@nglauber www.nglauber.com.br

Google Play Services! ROCKS!!!

@nglauber

+NelsonGlauber

www.nglauber.com.br

Visão geral• Com o Google Play Services, sua app pode utilizar os

serviços do Google como Mapas, Google+, Drive, e muito mais.

• Tudo isso com atualização automática via Google Play por meio de um simples APK. (5 versões só em 2015)

• Isso torna mais ágil para os usuários receberem atualizações de serviços do Google e fácil para o desenvolvedor em integra-las ao seu app!

• Tudo isso compatível com Android 2.3 (API Level 9) ou superior.

BUILD

+MagnusHyttsen

BETTERAPPS!!!

Google Play Services allows you to…

Arquitetura

Setup

buildscript { repositories { jcenter() } dependencies { classpath 'com.android.tools.build:gradle:1.3.0' classpath 'com.google.gms:google-services:1.4.0-beta3' } }

Setup

apply plugin: 'com.android.application' apply plugin: 'com.google.gms.google-services'

...

dependencies { compile 'com.google.android.gms:play-<API>:8.1.+' }

<meta-data android:name="com.google.android.gms.version" android:value="@integer/google_play_services_version" />

https://developers.google.com/mobile/add?platform=android

Áreas

✓ Desenvolvimento

- Usando as APIs disponíveis

✓ Engajamento

- Mais de um 1 Bilhão de aparelhos

✓ Rentabilidade

- Em 2015, mais de 7 Bilhões de dólares pagos aos desenvolvedores.

Desenvolvimento

Analytics

Analytics

compile 'com.google.android.gms:play-services-analytics:8.1.0'

GoogleAnalytics analytics = GoogleAnalytics.getInstance(this); Tracker mTracker = analytics.newTracker(R.xml.global_tracker); mTracker.send(new HitBuilders.EventBuilder() .setCategory("Ação") .setAction("Compartilhar") .build()); mTracker.setScreenName("TelaPrincipal"); mTracker.send(new HitBuilders.ScreenViewBuilder().build());

Login e senha pls!

Google Sign in

Google Sign in

compile 'com.google.android.gms:play-services-plus:8.1.0'

GoogleApiClient mGoogleApiClient = new GoogleApiClient.Builder(this) .addConnectionCallbacks(this) .addOnConnectionFailedListener(this) .addApi(Plus.API) .addScope(new Scope(Scopes.PROFILE)) .addScope(new Scope(Scopes.EMAIL)) .build(); mGoogleApiClient.connect();

Mapas e Localização

• Diferentes visualizações

• Marcadores customizados

• Polylines + Directions

• Geofencing

• Fused Location

Places

Place Picker Add places / photos Place autocomplete

Current Place

Places

GoogleApiClient mGoogleApiClient = new GoogleApiClient.Builder(this) .addApi(Places.GEO_DATA_API) .addApi(Places.PLACE_DETECTION_API) .addConnectionCallbacks(this) .addOnConnectionFailedListener(this) .build(); mGoogleApiClient.connect();

compile "com.google.android.gms:play-services-location:8.1.0"

Places

PendingResult<PlaceLikelihoodBuffer> result = Places.PlaceDetectionApi.getCurrentPlace(mGoogleApiClient, null); result.setResultCallback(new ResultCallback<PlaceLikelihoodBuffer>() { @Override public void onResult(PlaceLikelihoodBuffer likelyPlaces) { for (PlaceLikelihood placeLikelihood : likelyPlaces) { Log.i(TAG, String.format("Place '%s' has likelihood: %g", placeLikelihood.getPlace().getName(), placeLikelihood.getLikelihood())); } likelyPlaces.release(); } });

PlacesPlacePicker.IntentBuilder intentBuilder = new PlacePicker.IntentBuilder(); Intent intent = intentBuilder.build(getActivity()); startActivityForResult(intent, REQUEST_PLACE_PICKER);

@Override public void onActivityResult(int requestCode, int resultCode, Intent data) { if (requestCode == REQUEST_PLACE_PICKER && resultCode == Activity.RESULT_OK) { final Place place = PlacePicker.getPlace(data, getActivity());

final CharSequence name = place.getName(); final CharSequence address = place.getAddress(); final CharSequence phone = place.getPhoneNumber(); final String placeId = place.getId(); ...

Engajamento

Google Cloud Messaging

Google Cloud Messaging

1. registrar

2. enviar chave para o servidor

a. envia uma mensagem

b. mensagementregue

App Indexing & Deep Linking

App Install Ads

• Estratégia do AdWords para divulgar seu aplicativo.

• Dentro de outros aplicativos

• Resultado de buscas

• Vídeo no YouTube

App Invites

private void onInviteClicked() { Intent intent = new AppInviteInvitation.IntentBuilder("Título") .setMessage("Mensagem") .setDeepLink(Uri.parse(getString(R.string.invitation_deep_link))) .setCustomImage(Uri.parse("http://example.com/imagem.jpg")) .setCallToActionText("Install!!!") .build(); startActivityForResult(intent, REQUEST_INVITE); }

@Override protected void onActivityResult(int requestCode, int resultCode, Intent data) { super.onActivityResult(requestCode, resultCode, data); if (requestCode == REQUEST_INVITE) { if (resultCode == RESULT_OK) { String[] ids = AppInviteInvitation.getInvitationIds(resultCode, data); ... } } }

Rentabilidade

AdMob

<com.google.android.gms.ads.AdView android:id="@+id/adView" … ads:adSize="BANNER" ads:adUnitId="@string/test_banner_ad_unit_id"/>

AdView mAdView = (AdView) findViewById(R.id.adView); AdRequest adRequest = new AdRequest.Builder().build(); mAdView.loadAd(adRequest);

compile 'com.google.android.gms:play-services-ads:8.1.0'

AdMob

InterstitialAd mInterstitialAd = new InterstitialAd(this); mInterstitialAd.setAdUnitId( getString(R.string.test_interstitial_ad_unit_id)); AdRequest adRequest = new AdRequest.Builder().build(); mInterstitialAd.loadAd(adRequest); if (mInterstitialAd.isLoaded()) { mInterstitialAd.show(); }

In-App Billing

• Venda de produtos (não físicos)

• Administração de produtos

• Assinaturas

• 70% do valor vendido é seu!

Android pay

Acabou???

Mobile Vision

Mobile Vision

• getIsLeftEyeOpenProbability()getIsRighteyeOpenProbability()Retorna um valor entre 0 e 1 dando a probabilidade de olho esquerdo estar aberto.

• getIsSmilingProbability()Retorna um valor entre 0 e 1 com a probabilidade de estar sorrindo.

Mobile VisionFaceDetector faceDetector = new FaceDetector.Builder(getApplicationContext()) .setTrackingEnabled(false) .build(); if(faceDetector.isOperational()){ Frame frame = new Frame.Builder().setBitmap(myBitmap).build(); SparseArray<Face> faces = faceDetector.detect(frame);

for(int i=0; i<faces.size(); i++) { Face thisFace = faces.valueAt(i); float x1 = thisFace.getPosition().x; float y1 = thisFace.getPosition().y; float x2 = x1 + thisFace.getWidth(); float y2 = y1 + thisFace.getHeight(); tempCanvas.drawRoundRect( new RectF(x1, y1, x2, y2), 2, 2, myRectPaint); } }

Nearby API

Nearby API

mGoogleApiClient = new GoogleApiClient.Builder(this) .addApi(Nearby.MESSAGES_API) .addConnectionCallbacks(this) .addOnConnectionFailedListener(this) .build();

// Publish bytes to send message = new Message(yourByteArray); Nearby.Messages.publish(mGoogleApiClient, message) .setResultCallback(new ErrorCheckingCallback("publish()"));

Nearby API

// Create an instance of MessageListener messageListener = new MessageListener() { @Override public void onFound(final Message message) { // Do something with message.getContent() } };

// Subscribe to receive messages Nearby.Messages.subscribe(mGoogleApiClient, messageListener) .setResultCallback(new ErrorCheckingCallback("subscribe()"));

Nearby API

Android Wear

Node API

Message API

Data API

Channel API

Fit

Drive

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

Dúvidas?

@nglauber

+NelsonGlauber

www.nglauber.com.br

Obrigado!