Criar o projeto

Siga este guia para integrar o SDK do Navigation para iOS a um app iOS.

Pré-requisitos

  • Antes de começar a usar o SDK do Navigation para iOS, você precisa de um projeto com uma conta de faturamento e ativar o SDK do Maps para iOS. Recomendamos criar vários proprietários de projetos e administradores de faturamento para que sempre haja alguém disponível com esses papéis na sua equipe. Para saber mais, consulte Configurar seu projeto do Google Cloud.
  • Para criar um projeto usando o SDK do Navigation para iOS, você precisa da versão 15.0 ou mais recente do Xcode.
  • A versão mínima de destino do iOS para o SDK de navegação é a 14.0.

Instalar o SDK

Gerenciador de pacotes do Swift

O SDK do Navigation pode ser instalado usando o Gerenciador de pacotes do Swift. Para adicionar o SDK, verifique se você removeu todas as dependências do SDK do Navigation.

Para adicionar o SDK a um projeto novo ou existente, siga estas etapas:

  1. Abra o Xcode project ou workspace e acesse File > Add Package Dependencies.
  2. Insira https://github.com/googlemaps/ios-navigation-sdk como o URL, pressione Enter para extrair o pacote e clique em "Adicionar pacote".
  3. Para instalar um version específico, defina o campo Regra de dependência como uma das opções baseadas em versão. Para novos projetos, recomendamos especificar a versão mais recente e usar a opção "Versão exata". Quando terminar, clique em "Adicionar pacote".
  4. Na janela Choose Package Products, verifique se GoogleNavigation vai ser adicionado ao destino main designado. Quando terminar, clique em "Adicionar pacote".
  5. Para verificar a instalação, navegue até o painel General do destino. Em Frameworks, bibliotecas e conteúdo incorporado, você encontra os pacotes instalados. Você também pode ver a seção "Dependências de pacotes" do "Navegador do projeto" para verificar o pacote e a versão dele.

Para atualizar o package de um projeto existente, siga estas etapas:

  1. No Xcode, acesse "File > Packages > Update To latest Package Versions".
  2. Para verificar a instalação, vá para a seção Dependências de pacotes do Navegador do projeto para verificar o pacote e a versão dele.

Para remover as dependências do SDK do Navigation adicionadas usando CocoaPods, siga estas etapas:

  1. Feche o espaço de trabalho do Xcode. Abra o terminal e execute o seguinte comando:
    sudo gem install cocoapods-deintegrate cocoapods-clean 
    pod deintegrate 
    pod cache clean --all
  2. Remova Podfile, Podfile.resolved e workspace do Xcode se eles não forem usados para outra finalidade que não seja CocoaPods.

Para remover o SDK do Navigation para iOS instalado manualmente, siga estas etapas:
  1. Nas configurações do projeto do Xcode, encontre Frameworks, bibliotecas e conteúdo incorporado. Use o sinal de menos(-) para remover o seguinte framework:
    • GoogleMaps.xcframework
    • GoogleMapsBase.xcframework
    • GoogleMapsCore.xcframework
    • GoogleNavigation.xcframework
  2. No diretório de nível superior do seu projeto Xcode, remova o pacote GoogleMaps.

CocoaPods

O SDK do Navigation para iOS está disponível como um pod do CocoaPods. O CocoaPods é um gerenciador de dependências de código aberto para projetos Cocoa em Swift e Objective-C.

Se você ainda não tem essa ferramenta, instale-a no macOS executando o seguinte comando no terminal. Para mais detalhes, consulte o Guia de primeiros passos do CocoaPods (em inglês).

sudo gem install cocoapods

Crie um Podfile para o SDK do Navigation para iOS e use-o para instalar a API e as dependências dela:

  1. Se você ainda não tiver um projeto Xcode, crie um agora e salve-o na sua máquina local. Se você ainda não tem experiência com o desenvolvimento para iOS:
    1. Crie um novo projeto.
    2. Selecione o modelo iOS > App.
    3. Na tela de opções do projeto:
      1. Digite o Nome do projeto.
      2. Registre o valor do campo Identificador do pacote. Use esse valor para restringir sua chave de API abaixo.
      3. Defina a Interface do projeto como Storyboard.
      4. Defina Language como Swift ou Objective-C.
  2. Crie um arquivo chamado Podfile no seu diretório do projeto para definir as dependências.
  3. Edite o Podfile e adicione as dependências com as versions delas. Este é um exemplo que inclui a dependência necessária para o SDK do Navigation para iOS: # Referência de instalação do Cocoapods #
    source 'https://github.com/CocoaPods/Specs.git'
    
    platform :ios, '14.0'
    
    target 'YOUR_APPLICATION_TARGET_NAME_HERE' do
      pod 'GoogleNavigation', '5.3.1'
    end
            
    Execute pod outdated regularmente para detectar versões mais recentes. Se necessário, faça upgrade para a versão mais recente.
  4. Salve o Podfile.
  5. Abra um terminal e acesse o diretório que contém o Podfile:

    cd <path-to-project>
  6. Execute o comando pod install. Isso instala as APIs especificadas no Podfile com todas as dependências.

    pod install
  7. Feche o Xcode e clique duas vezes no arquivo .xcworkspace do projeto para iniciar o programa. Depois disso, é preciso usar o arquivo .xcworkspace para abrir o projeto.

Para atualizar a API de um projeto existente, siga estas etapas:

  1. Abra um terminal e acesse o diretório do projeto que contém o Podfile.
  2. Execute o comando pod update. Isso atualiza todas as APIs especificadas no Podfile para a versão mais recente.

Instalação manual

Este guia mostra como adicionar manualmente o XCFrameworks contendo o SDK do Navigation para iOS e o SDK do Maps para iOS ao projeto e definir as configurações de compilação no Xcode. Um XCFramework é um pacote binário que pode ser usado em várias plataformas, incluindo máquinas que usam o chipset M1.

Siga estas etapas para instalar o XCFrameworks para o SDK do Navigation para iOS e o SDK do Maps para iOS:

  1. Faça o download dos seguintes arquivos binários e de recursos do SDK:
  2. Inicialize o Xcode e abra ou crie um projeto. Se você não tem experiência com o iOS, crie um novo projeto e selecione o modelo de app iOS.
  3. Remova todas as referências existentes do Maps, Navigation e Places do projeto.
  4. Arraste os seguintes XCFrameworks para seu projeto em Frameworks, bibliotecas e conteúdo incorporado para instalar os SDKs do Maps e do Navigation. Quando solicitado, selecione Copiar itens se necessário:
    • GoogleMaps.xcframework
    • GoogleMapsBase.xcframework
    • GoogleMapsCore.xcframework
    • GoogleNavigation.xcframework
  5. Arraste GoogleMaps.bundle de GoogleMapsResources para o diretório de nível superior do seu projeto Xcode. Quando solicitado, verifique se a opção Copy items if needed está selecionada.
  6. Arraste GoogleNavigation.bundle de GoogleNavigationResources para o diretório de nível superior do seu projeto Xcode. Quando solicitado, verifique se a opção Copy items into destination group's folder está selecionada.
  7. Selecione o projeto no Navegador de projetos e escolha o destino do aplicativo.
  8. Abra a guia Fases de build e, em Vincular binário a bibliotecas, adicione os seguintes frameworks e bibliotecas:
    • Accelerate.framework
    • AudioToolbox.framework
    • AVFoundation.framework
    • Contacts.framework
    • CoreData.framework
    • CoreGraphics.framework
    • CoreImage.framework
    • CoreLocation.framework
    • CoreTelephony.framework
    • CoreText.framework
    • GLKit.framework
    • ImageIO.framework
    • libc++.tbd
    • libxml2.tbd
    • libz.tbd
    • Metal.framework
    • OpenGLES.framework
    • QuartzCore.framework
    • Security.framework
    • SystemConfiguration.framework
    • UIKit.framework
    • UserNotifications.framework
    • WebKit.framework
  9. No destino do seu aplicativo, selecione a guia Capabilities, ative Background Modes e, em seguida, os seguintes modos:
    • Áudio, AirPlay e Picture-in-picture
    • Atualizações de local
  10. Escolha seu projeto, em vez de um destino específico, e abra a guia Build Settings. Na seção Outras sinalizações do vinculador, adicione ‑ObjC para debug e release. Se essas configurações não estiverem visíveis, mude o filtro na barra Build Settings de Basic para All.
  11. Abra Info.plist e adicione os seguintes pares de chave-valor:
    • Chave: NSLocationWhenInUseUsageDescription (Descrição de privacidade: local durante o uso)
      Valor: "Este app precisa de permissão para usar seu local na navegação guiada."
    • Chave: NSLocationAlwaysAndWhenInUseUsageDescription (Descrição de privacidade: local sempre e quando em uso)
      Valor: "Este app precisa de permissão para usar seu local na navegação guiada."

Adicionar arquivo de manifesto de privacidade da Apple

  1. Faça o download do pacote do Manifesto de privacidade para o SDK do Navigation para iOS: GoogleNavigationPrivacy.
  2. Extraia o arquivo para acessar GoogleNavigationPrivacy.bundle.
  3. Adicione GoogleNavigationPrivacy.bundle ao navegador do projeto Xcode usando um destes métodos. Confira se a caixa "Adicionar aos destinos" está marcada para o destino do app. Depois de adicionado, o arquivo PrivacyInfo aparece no navegador do projeto e você pode inspecionar os valores.
  4. Captura de tela das informações de privacidade do Xcode
  5. Verifique se o manifesto de privacidade foi adicionado criando um arquivo do app e gerando um relatório de privacidade a partir do arquivo.

Adicionar uma chave de API ao seu projeto

Os exemplos a seguir mostram como adicionar a chave de API ao seu projeto no Xcode:

Swift

Inclua sua chave de API ao AppDelegate.swift da seguinte maneira:

  1. Adicione as seguintes instruções de importação:
    import GoogleMaps
    import GoogleNavigation
  2. Adicione o seguinte ao seu método application(_:didFinishLaunchingWithOptions:):
    GMSServices.provideAPIKey("YOUR_API_KEY")

Objective-C

Inclua sua chave de API ao AppDelegate.m da seguinte maneira:

  1. Adicione as seguintes instruções de importação:
    @import GoogleMaps;
    @import GoogleNavigation;
  2. Adicione o seguinte ao seu método application:didFinishLaunchingWithOptions::
    [GMSServices provideAPIKey:@"YOUR_API_KEY"];

Adicionar um mapa

Este código demonstra como adicionar um mapa simples a um ViewController já existente, incluindo algumas configurações iniciais de navegação.

Antes de ativar a navegação, o usuário precisa concordar com os Termos e condições. Para fazer uma solicitação ao usuário, chame GMSNavigationServices.showTermsAndConditionsDialogIfNeeded() e verifique se os termos foram aceitos. Se o usuário rejeitar os termos, mapView.isNavigationEnabled = true não terá efeito e mapView.navigator será nulo.

Swift

import UIKit
import GoogleNavigation

class ViewController: UIViewController {

  var mapView: GMSMapView!
  var locationManager: CLLocationManager!

  override func loadView() {
    locationManager = CLLocationManager()
    locationManager.requestAlwaysAuthorization()

    let camera = GMSCameraPosition.camera(withLatitude: 47.67, longitude: -122.20, zoom: 14)
    mapView = GMSMapView.map(withFrame: CGRect.zero, camera: camera)

    // Show the terms and conditions.
    let companyName = "Ride Sharing Co."
    GMSNavigationServices.showTermsAndConditionsDialogIfNeeded(
      withCompanyName: companyName) { termsAccepted in
      if termsAccepted {
        // Enable navigation if the user accepts the terms.
        self.mapView.isNavigationEnabled = true
      } else {
        // Handle the case when the user rejects the terms and conditions.
      }
    }

    view = mapView
  }

  // TODO: Add navigation code.

}

Objective-C

#import "ViewController.h"
@import GoogleNavigation;

@interface ViewController ()
@end

@implementation ViewController
GMSMapView *_mapView;
CLLocationManager *_locationManager;

-   (void)loadView {

  _locationManager = [[CLLocationManager alloc] init];
  [_locationManager requestAlwaysAuthorization];

  GMSCameraPosition *camera = [GMSCameraPosition cameraWithLatitude:47.67
                                                          longitude:-122.20
                                                               zoom:14];
  _mapView = [GMSMapView mapWithFrame:CGRectZero camera:camera];

  // Show the terms and conditions.
  NSString *companyName = @"Ride Sharing Co.";
  [GMSNavigationServices
    showTermsAndConditionsDialogIfNeededWithCompanyName:companyName
    callback:^(BOOL termsAccepted) {
     if (termsAccepted) {
       // Enable navigation if the user accepts the terms.
       _mapView.navigationEnabled = YES;
     } else {
       // Handle the case when the user rejects the terms and conditions.
     }
   }];

  self.view = _mapView;
}

// TODO: Add navigation code.

@end

Execute o aplicativo. Será mostrado um mapa centralizado em Kirkland, Washington. Se o mapa não estiver visível, confirme se você forneceu a chave de API correta.

Se você for cliente de serviços de mobilidade

Se você é cliente de serviços de mobilidade, saiba mais sobre o faturamento na documentação do produto. Para mais informações sobre como registrar transações, consulte Configurar o faturamento. Para saber como adicionar IDs de transação à implementação do SDK do Navigation, consulte Associar o uso do serviço às transações do Mobility.