{"id":137946,"date":"2022-12-15T00:00:00","date_gmt":"2022-12-15T00:00:00","guid":{"rendered":"https:\/\/adapty.io\/pt-android-in-app-purchases-part-5-server-side-purchase-validation\/"},"modified":"2022-12-15T00:00:00","modified_gmt":"2022-12-15T00:00:00","slug":"android-in-app-purchases-part-5-server-side-purchase-validation","status":"publish","type":"post","link":"https:\/\/adapty.io\/pt\/blog\/android-in-app-purchases-part-5-server-side-purchase-validation\/","title":{"rendered":"Compras no aplicativo para Android, parte 5: valida\u00e7\u00e3o de compras do lado do servidor."},"content":{"rendered":"\n

A valida\u00e7\u00e3o do lado do servidor (server-side) pode ajud\u00e1-lo a validar a autenticidade da compra. O dispositivo far\u00e1 uma solicita\u00e7\u00e3o aos servidores do Google para confirmar se a compra foi realmente realizada e se \u00e9 v\u00e1lida.<\/p>\n\n\n\n

Neste guia, vamos discutir como configurar a valida\u00e7\u00e3o do lado do servidor para aplicativos (apps) Android. <\/p>\n\n\n\n

Por que validar as compras?<\/h2>\n\n\n\n

Deve-se salientar que a valida\u00e7\u00e3o do lado do servidor n\u00e3o \u00e9 obrigat\u00f3ria \u2014 as compras no aplicativo ainda ser\u00e3o realizadas sem ela. No entanto, h\u00e1 alguns benef\u00edcios significativos em rela\u00e7\u00e3o \u00e0 valida\u00e7\u00e3o:<\/p>\n\n\n\n

    \n
  1. Fazer o analytics avan\u00e7ado do pagamento, <\/strong>o que \u00e9 particularmente importante no caso de assinaturas, uma vez que tudo o que acontece ap\u00f3s a ativa\u00e7\u00e3o n\u00e3o \u00e9 processado pelo dispositivo. Sem o processamento da compra pelo lado do servidor, n\u00e3o \u00e9 poss\u00edvel recuperar o status atual da assinatura e saber se o usu\u00e1rio renovou ou cancelou a assinatura, se ocorreu algum problema de pagamento, e assim por diante.<\/li>\n\n\n\n
  2. Verificar a autenticidade da compra. <\/strong>Voc\u00ea deve se certificar de que a transa\u00e7\u00e3o n\u00e3o \u00e9 fraudulenta, e que o usu\u00e1rio realmente pagou pelo produto.<\/li>\n\n\n\n
  3. Cruzar assinaturas em diferentes plataformas. <\/strong>Caso seja poss\u00edvel verificar o status da assinatura do usu\u00e1rio em tempo real, \u00e9 poss\u00edvel sincroniz\u00e1-la com outras plataformas. Por exemplo, o usu\u00e1rio que adquiriu a assinatura em um dispositivo iOS poder\u00e1 utiliz\u00e1-la no Android, na Web e em outras plataformas. <\/li>\n\n\n\n
  4. Conseguir controlar o acesso ao conte\u00fado do lado do servidor<\/strong>, o que o protege dos usu\u00e1rios que tentam acessar os dados sem assinatura, simplesmente fazendo solicita\u00e7\u00f5es ao servidor. <\/li>\n<\/ol>\n\n\n\n

    Segundo nossa experi\u00eancia, a primeira vantagem, por si s\u00f3, j\u00e1 \u00e9 suficiente para configurar o processamento de compras no lado do servidor.<\/p>\n\n\n\n\n\n

    Valida\u00e7\u00e3o do pagamento<\/h2>\n\n\n\n

    Podemos resumir a valida\u00e7\u00e3o do pagamento no Android com este esquema:<\/p>\n\n\n\n

    \"\"<\/figure>\n\n\n\n

    Autentica\u00e7\u00e3o para solicita\u00e7\u00f5es da API do Google Play Developer<\/h3>\n\n\n\n

    Para trabalhar com a API do Google Play Developer, voc\u00ea deve primeiro gerar uma chave para assinar as solicita\u00e7\u00f5es. Primeiro, voc\u00ea deve vincular sua conta Google Play Console (onde voc\u00ea gerencia o aplicativo) \u00e0 sua conta Google Cloud (onde voc\u00ea ir\u00e1 gerar uma chave para assinatura da solicita\u00e7\u00e3o). Depois que tudo estiver configurado, voc\u00ea deve conceder ao usu\u00e1rio direitos de gerenciamento de compras. Para descrever este processo, \u00e9 necess\u00e1rio um artigo espec\u00edfico. Felizmente, j\u00e1 tratamos do assunto em um guia passo a passo que est\u00e1 dispon\u00edvel na documenta\u00e7\u00e3o da Adapty<\/a>. <\/p>\n\n\n\n

    Lembre-se que normalmente voc\u00ea deve esperar 24 horas ou mais depois de gerar uma chave para que ela seja ativada. Para evitar essa situa\u00e7\u00e3o, basta atualizar a descri\u00e7\u00e3o de qualquer produto ou assinatura no sistema, o que ativar\u00e1 instantaneamente a chave. <\/p>\n\n\n\n

    Utilizamos a biblioteca oficial google-api-python-client<\/a> (Biblioteca cliente da API do Google para Python) para trabalhar com a API do Google Play Developer. Esta biblioteca est\u00e1 dispon\u00edvel na maioria dos idiomas conhecidos, e eu recomendo us\u00e1-la, pois ela \u00e9 compat\u00edvel com todos os m\u00e9todos que voc\u00ea possa precisar.<\/p>\n\n\n\n

    Valida\u00e7\u00e3o de transa\u00e7\u00f5es de assinatura<\/h3>\n\n\n\n

    Ao contr\u00e1rio da valida\u00e7\u00e3o do lado do servidor iOS<\/a>, no Android, a assinatura e a valida\u00e7\u00e3o de outros produtos podem ser implementadas usando uma variedade de m\u00e9todos. Portanto, ao validar uma transa\u00e7\u00e3o, \u00e9 preciso saber se voc\u00ea est\u00e1 lidando com um produto ou com uma assinatura. Na pr\u00e1tica, isto significa que se deve transferir estes dados do aplicativo m\u00f3vel, assim como manter a bandeira no banco de dados caso seja necess\u00e1ria a revalida\u00e7\u00e3o do token.<\/p>\n\n\n\n

    A segunda diferen\u00e7a mais importante \u00e9 que enquanto cada transa\u00e7\u00e3o tem seu pr\u00f3prio token no Android, todas as transa\u00e7\u00f5es no iOS usam um segredo compartilhado (shared secret) espec\u00edfico do aplicativo para armazenar todo o hist\u00f3rico da transa\u00e7\u00e3o. Isto significa que se voc\u00ea deseja restaurar as compras do usu\u00e1rio a qualquer momento, voc\u00ea deve armazenar todos os tokens de compra, ao inv\u00e9s de escolher apenas um token de forma aleat\u00f3ria.<\/p>\n\n\n\n

    Para validar a assinatura, voc\u00ea deve usar o m\u00e9todo purchases.subscriptions.get<\/em><\/a>.  Basicamente, trata-se de uma chamada para solicita\u00e7\u00e3o GET:<\/p>\n\n\n\n

    <\/path><\/path><\/svg><\/span>
    https<\/span>:<\/span>\/\/androidpublisher.googleapis.com\/androidpublisher\/v3\/applications\/{packageName}\/purchases\/subscriptions\/{subscriptionId}\/tokens\/{token}<\/span><\/span><\/code><\/pre><\/div>\n\n\n\n

    Todos os par\u00e2metros s\u00e3o obrigat\u00f3rios:<\/p>\n\n\n\n