Criando Aplicativo Cordova + PHP + MYSQL – Video

Fala galera!!!!! Tudo bem??
Algum tempo atrás fiz uma postagem no blog falando sobre o aplicativo Híbrido e como conectar em um WebService. Porém refiz ele de forma mais resumida em um vídeo…
Segue abaixo:

Espero o seu feedback!!!

Powered by YouTube Video Embed

Usando API PHP do Google Adwords – AWQL

E ai meu povo, tudo bom?

Putz… estou anos luzes sem postar nada aqui no fórum, inclusive fiz algumas promessas no passado mas não consegui realizar, porém, neste novo ano tentarei ser um pouco mais ativo no blog!
Bom, estive envolvido em vários projetos, entre eles mudei de empresa (sempre estive envolvido no setor Automobilístico trabalhando em Concessionárias, passei por um período na Fábrica da Case New Holland e hoje voltei para o setor de concessionárias, melhor dizendo, hoje desenvolvo soluções para esse setor em uma empresa focada nisso).

Neste novo desafio que estou precisei fazer algumas integrações no Google Analytics, SEO e Adwords. Baixei o SDK da Google em PHP e particularmente achei muito complexo para realizar coisas um tanto ‘simples’. E nisso resolvi compartilhar e guardar aqui no Blog a forma que realizo essas integrações usando o recurso AWQL.

Começando pelo Google Adwords…

1° Baixem a biblioteca do Google Adwords
https://github.com/googleads/googleads-php-lib

2° Sigam os passos de autenticação oAuth2 que o Google faz neste link:
https://developers.google.com/adwords/api/docs/guides/authentication?hl=pt-br

3° Realizado os passos 1 e 2, vamos configurar o arquivo ‘adsapi_php.ini’ que está dentro da pasta que você baixou.
Obs.: Estarei fazendo os testes dentro da pasta GoogleAds-Php-Lib.

<?php
[ADWORDS]
; Required AdWords API properties. Details can be found at:
; https://developers.google.com/adwords/api/docs/guides/basic-concepts#soap_and_xml
developerToken = "SEU_TOKEN"
clientCustomerId = "CLIENT_ID VOCÊ PEGA NA CONTA DO ADWORDS"

; Optional. Set a friendly application name identifier.
; userAgent = "INSERT_USER_AGENT_HERE"

; Optional additional AdWords API settings.
; endpoint = "https://adwords.google.com/"
; isPartialFailure = false

; Optional setting for utility usage tracking in the user agent in requests.
; Defaults to true.
; includeUtilitiesInUserAgent = true

[ADWORDS_REPORTING]
; Optional reporting settings.
; isSkipReportHeader = false
; isSkipColumnHeader = false
; isSkipReportSummary = false
; isUseRawEnumValues = false

[OAUTH2]
; Required OAuth2 credentials. Uncomment and fill in the values for the
; appropriate flow based on your use case. See the README for guidance:
; https://github.com/googleads/googleads-php-lib/blob/master/README.md#getting-started

; For installed application or web application flow.
 clientId = "CLIENT ID DO PROJETO CRIADO NO CONSOLE DEVELOPER"
 clientSecret = "SENHA CRIADO NO PROJETO DO CONSOLE DEVELOPER"
 refreshToken = "ESSE ITEM VOCÊ CONSEGUE PEGANDO OAUTH2 PLAYGROUD (SEGUIR O PASSO 2)"

; For service account flow.
;jsonKeyFilePath = ""
;scopes = "https://www.googleapis.com/auth/adwords"
;impersonatedEmail = ""

[SOAP]
; Optional SOAP settings. See SoapSettingsBuilder.php for more information.
; compressionLevel = 

[CONNECTION]
; Optional proxy settings to be used by requests.
; If you don't have username and password, just specify host and port.
; proxy = "protocol://user:pass@host:port"
; Enable transparent HTTP gzip compression for all reporting requests.
; enableReportingGzip = false

[LOGGING]
; Optional logging settings.
; soapLogFilePath = "path/to/your/soap.log"
; soapLogLevel = "INFO"
; reportDownloaderLogFilePath = "path/to/your/report-downloader.log"
; reportDownloaderLogLevel = "INFO"
; batchJobsUtilLogFilePath = "path/to/your/bjutil.log"
; batchJobsUtilLogLevel = "INFO"
?>

Feito isto, vamos ao primeiro código, na pasta raiz do Google crie um arquivo chamado ‘index.php’.

<?php
ini_set('display_errors',1);
ini_set('display_startup_erros',1);
error_reporting(E_ALL);

require __DIR__ . '/vendor/autoload.php';

use Google\AdsApi\AdWords\AdWordsServices;
use Google\AdsApi\AdWords\AdWordsSessionBuilder;
use Google\AdsApi\AdWords\ReportSettingsBuilder;
use Google\AdsApi\AdWords\v201705\cm\CampaignService;
use Google\AdsApi\AdWords\v201702\cm\ReportDefinitionReportType;
use Google\AdsApi\AdWords\v201702\cm\ReportDefinitionService;
use Google\AdsApi\AdWords\Reporting\v201705\ReportDownloader;
use Google\AdsApi\AdWords\v201705\cm\OrderBy;
use Google\AdsApi\AdWords\v201705\cm\Paging;
use Google\AdsApi\AdWords\v201705\cm\Selector;
use Google\AdsApi\Common\OAuth2TokenBuilder;

class Adwords
{    

    public static function getData(){
        $oAuth2Credential = (new OAuth2TokenBuilder())
            ->fromFile()
            ->build();            

        /*
            Aqui você pode recuperar dados de outro clientId, diferente do que informou no adsapi_php.ini
            porém pode retirar o método "withClientCustomerId" para pegar os dados padrões do clientId do arquivo adsapi
        */
        $session = (new AdWordsSessionBuilder())
            ->fromFile()
            ->withOAuth2Credential($oAuth2Credential)  
            ->withClientCustomerId('CLIENT_ID_CUSTOMER')                      
            ->build();   
        
        #Utilizando AWQL poderá ver os exemplos e combinações no link: https://developers.google.com/adwords/api/docs/appendix/reports
        $reportQuery = 'SELECT Impressions,Clicks, Cost, AverageCpc, Conversions, ConversionRate, CostPerConversion 
                 FROM ACCOUNT_PERFORMANCE_REPORT DURING 20171101,20171130';
        
        $reportFormat = 'XML';
        $reportDownloader = new ReportDownloader($session);
        $reportDownloadResult = $reportDownloader->downloadReportWithAwql(
        $reportQuery, $reportFormat);

        $datatest =  $reportDownloadResult->getAsString();

        $xml = simplexml_load_string($datatest);
        $json = json_encode($xml);        

        //return array        
        echo ($json);                
    }
}

AdWords::getData();
?>

O retorno que você terá será algo parecido com isto:

{  
   "report-name":{  
      "@attributes":{  
         "name":"ACCOUNT_PERFORMANCE_REPORT"
      }
   },
   "date-range":{  
      "@attributes":{  
         "date":"Nov 1, 2017-Nov 30, 2017"
      }
   },
   "table":{  
      "columns":{  
         "column":[  
            {  
               "@attributes":{  
                  "name":"impressions",
                  "display":"Impressions"
               }
            },
            {  
               "@attributes":{  
                  "name":"clicks",
                  "display":"Clicks"
               }
            },
            {  
               "@attributes":{  
                  "name":"cost",
                  "display":"Cost"
               }
            },
            {  
               "@attributes":{  
                  "name":"avgCPC",
                  "display":"Avg. CPC"
               }
            },
            {  
               "@attributes":{  
                  "name":"conversions",
                  "display":"Conversions"
               }
            },
            {  
               "@attributes":{  
                  "name":"convRate",
                  "display":"Conv. rate"
               }
            },
            {  
               "@attributes":{  
                  "name":"costConv",
                  "display":"Cost \/ conv."
               }
            }
         ]
      },
      "row":{  
         "@attributes":{  
            "impressions":"752389",
            "clicks":"16051",
            "cost":"2246940000",
            "avgCPC":"139988",
            "conversions":"137.00",
            "convRate":"0.85%",
            "costConv":"16401022"
         }
      }
   }
}

Muito simples não é? Desta maneira achei mais rápido e fácil realizar as integrações e retorno de dados do Google Adwords.

Bônus: Os valores monetários, por exemplo, “costConv” (Custo de conversões) é retornado em microunidades monetárias então é necessário realizar um cálculo para encontrar o valor ‘real’, um exemplo disso:

//(16401022 / 1000000) = R$ 16,40
$costConv / 1000000;

Está e outras dicas poderá ser visto no link:
https://developers.google.com/adwords/api/docs/guides/reporting?hl=pt-br

Até a próxima galera!

Hacker desenvolve App que se comporta igual o sensor 3D do iPhone 6s

Fala galera!!!

Navegando na internet na busca de gifs de gatinhos fofos  me deparei com uma noticia no qual um Hacker desenvolveu um aplicativo para Android que se comporta igual o novo sensor 3D do iPhone 6s, e o mais legal da noticia é o que ele usou para desenvolver, nada mais do que o Cordova, mas o que isso tem de tão legal?  Para mim é a questão da popularização do Cordova, como já citei algumas vezes, acredito que até aqui no blog também, é a facilidade e rapidez no qual temos em desenvolver um aplicativo hibrido, e acredito eu ainda que o Cordova vai ganhar muito mais mercado, e isso é bom, através disso podemos ter grandes melhorias tanto no Framework que utilizamos como novos recursos para nossos aplicativos.

Segue abaixo o vídeo do Hacker.



Noticia:

O hacker Marco Chiappetta provou que isso é possível e postou o resultado no YouTube. No vídeo acima, ele mostra como um um Xperia Z3 Compact, com Android, pode ganhar algo parecido com o recurso da Maçã.

Ele aproveitou-se das entradas seladas do dispositivo e usou o barômetro para medir o aumento da pressão interna de ar no aparelho quando a tela é pressionada com mais força. Assim, quando o dedo encosta com mais vontade no display, ele programou para que a imagem fosse ampliada com um zoom.

Fonte TecMundo

Framework7 – Desenvolvimento Mobile

Fala galera tudo beleza?

Fiquei meio ausente do blog porque estou com vários projetos para concluir e acabo sem tempo, porém estou passando rapidamente por aqui apenas para falar do Framework7, para quem desenvolve aplicativos Híbridos e encontra algumas dificuldades para montar o seu Front-End ou até mesmo para encontrar plugins (ou desenvolver) para executar determinadas funções, com o Framework7 agora ficou mais fácil.

Algum tempo atrás fiz uma pequena postagem falando sobre alguns Frameworks que já possui na internet, entre eles citei sobre o Framework7, naquele tempo como falei o Framework7 estava pensando em lançar uma versão para Android com o design Material o mesmo usado agora pelos novos modelos de smartphone que possui Android.

Bom, eu não tinha usado o Framework7 até ter a nova versão de design material para android, e em meus projetos estava usando apenas o jQuery Mobile e começando a ver o IONIC, porém gostei do Framework7 e estou concluindo um projeto hoje usando ele.

Bom chega de lero lero…

Qual a vantagem do Framework7?

Como disse o Framework7 trabalha com design padrão do sistema, algo que achei muito bacana, com o lançamento do Framework7 para Android desenvolver os aplicativos para as duas plataformas ficou muito fácil e rápido, apenas algumas linhas de códigos é possível mudar o visual do App sendo o aparelho iOS ou Android.
Além disso possui vários recursos que vem colaborar na hora do desenvolvimento.

Na documentação do Framework7 tem vários exemplos, Clique aqui para conhecer este Framework.

Estarei fazendo uma postagem mostrando na prática, mas isto assim que arrumar um tempo.. Hahaha!

Até a próxima!

Frameworks para Mobile

Iremos falar sobre uma pacotão de códigos que poderão ajudar no seu desenvolvimento mobile no dia-a-dia.
O mercado mobile cresceu muito, e com isso apareceu várias ferramentas que facilita nossa vida de desenvolvedor, estarei falando um pouco dos principais Frameworks que está no mercado de desenvolvimento.

Continue lendo sobre Framework