google play services rocks!!!
Post on 06-Jan-2017
4.114 Views
Preview:
TRANSCRIPT
+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!
top related