Xamarin Forms -  Gerando e restringindo a Chave para usar Mapas


  Neste artigo vou mostrar como gerar uma chave para usar mapas em uma aplicação Xamarin Forms e como restringir o uso da chave.

Se você quiser usar o Google Maps em seu aplicativo Xamarin.Forms, você vai precisar obter uma chave de API ou API Key. 

Gerar a chave é um processo simples mas a chave gerada não contém nenhuma restrição e poderá ser usada por terceiros para consumir recursos da sua conta no Google.

Pensando nisso vou mostrar também como você pode restringir o uso da chave gerada de forma a que somente você e sua aplicação utilize a chave.

Nota: Você não precisa restringir o acesso a sua chave se você for usar apenas localmente para teste.

Então vamos ao que interessa...

Recursos usados:

Criando o projeto no VS Community 2017

Abra o VS 2017 Community e clique em New Project;

Selecione Visual C#, o template Cross Plataform e a seguir Cross Plataform App(Xamarin.Forms or Native);

Informe o nome XF_Maps e clique no botão OK;

Projeto criado agora vamos atualizar o Xamarin Forms pois usando o VS 2017 update 15.4 ele gera um projeto com uma versão não atual.

No meu Tools abra o Manage Nuget Packages for Solution e a seguir clique em Updates , marque Xamarin.Forms (se ele aparecer) e atualize a versão do Xamarin Forms no projeto.

Incluindo o pacote Nuget Xamarin.Forms.Maps

1- No menu Tools clique em Nuget Package Manager -> Mange Nuget Packages for Solution

2- Clique em Browse e digite : xamarin.forms.maps

3- Selecione o item encontrado, marque todos os projetos e clique no botão Install

4- A seguir clique em Google Maps Android API

5- Depois clique no botão Ativar:

6- Agora clique no menu Credenciais e depois clique no botão Criar Credenciais e a seguir em Chave de API :

7- Sua Chave de API será gerada e exibida conforme a figura abaixo:

Com a API Key gerada abra o arquivo AndroidManifest.xml do seu projeto Android e inclua na tag application a sua chave:

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android" package="Droid_Maps.Droid_Maps" android:versionCode="1" android:versionName="1.0" android:installLocation="auto">
<uses-sdk android:minSdkVersion="21" />
<uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" />
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />
<uses-permission android:name="android.permission.INTERNET" />
<application android:allowBackup="true" android:label="@string/app_name">
                      <meta-data android:name="com.google.android.maps.v2.API_KEY" android:value="SUA-API-KEY-AQUI" />
               </application>

</manifest>

Mas esteja atento ao seguinte detalhes:

Sua chave da API está disponível, mas ela pode ser usada por qualquer pessoa que tenha acesso a ela. Se você estiver usando a chave no lado do Servidor, os problemas de segurança não são graves. No entanto, se você precisar distribuir a sua chave com sua aplicação, então é melhor restringir o acesso a sua chave de forma que somente sua aplicação possa usá-la.

Restringindo a sua API Key - Gerando um Fingerprint

Para restringir a sua API Key precisamos gerar um fingerprint, que é um método de identificar unicamente um objeto.

Para gerar um fingerprint podemos usar a janela de comandos e usar o comando com o seguinte formato:

Keytool -list -v -keystore [STORE FILENAME] -alias [ALIAS NAME] -storepass [STORE PASSWORD] -keypass [KEY PASSWORD]

Para o Debug os valores usados são :

  1. [ALIAS NAME] = androiddebugkey
  2. [STORE PASSWORD] = android
  3. [KEY PASSWORD] = android

onde STORE FILENAME é a pasta onde será armazenada o resultado gerado.

Para executar o comando keytool você vai precisar localizar pasta do JDK do Java. Veja abaixo um exemplo de uso para um usuário genérico:

C:\Program Files (x86)\Java\jdk1.8.0_112\bin>keytool -list -v -keystore "C:\Users\user\AppData\Local\Xamarin\Mono for 
Android\debug.keystore" -alias androiddebugkey -storepass android -keypass android

Abaixo vemos o resutlado da execução do comando

O que você precisa obter do resultado gerado acima é a assinatura SHA-1 :

 SHA1: CF:EXXXXX5:B1:XXXXXXXXXX5:EE:9D:C5:EE:8XXXXXXXXX7:F1:76

Agora que você já tem o código SHA1 gerado retorne para a página onde você gerou a sua API KEY e clique no ícone para editar.

A seguir marque a opção Apps para Android :

A seguir adicione o código SHA-1 obtido e o nome do pacote da sua aplicação Xamarin Android e clique no botão Salvar:

Fique atento ao nome do pacote informado. Ele deverá ser igual ao definido na sua aplicação.

Pronto !

Mas perceba que geramos uma chave e uma restrição para a versão Debug da sua aplicação.

Quando você for fazer o deploy na produção entre e gere outra chave e crie outra assinatura de restrição por questão de segurança.

"E o mundo passa, e a sua concupiscência; mas aquele que faz a vontade de Deus permanece para sempre."
1 João 2:17

Referências:


José Carlos Macoratti