Skip to main content

Compreender aplicativos nativos forceios

Objetivos de aprendizagem

Após concluir esta unidade, você estará apto a:

  • Entender o fluxo geral de um aplicativo iOS nativo Salesforce.
  • Entender o fluxo de eventos durante o lançamento do aplicativo.
  • Saiba como AppDelegate e SceneDelegate direcionam o fluxo de execução.

Acompanhar com o Trail Together

Deseja acompanhar um especialista enquanto trabalha nesta etapa? Veja este vídeo que faz parte da série Trail Together.

(Este clipe começa na marca dos 14:49 minutos, caso você queira retroceder e ver o início da etapa novamente.)

Visão geral do fluxo do aplicativo

Vamos dar uma olhada mais atenta nos aplicativos iOS nativos.

Superficialmente, um aplicativo nativo Mobile SDK se parece com um aplicativo iOS normal. Você pode ver sua arquitetura como Modelo-Visualização-Controlador (MVC):

  • O modelo é o esquema de banco de dados da Salesforce Platform.
  • As visualizações vêm dos arquivos de implementação e nib do seu projeto.
  • O recurso do controlador vem na forma de classes iOS Cocoa Touch, classes do Salesforce Mobile SDK e classes personalizadas do seu aplicativo.

Como em todos aplicativos iOS, um aplicativo nativo Mobile SDK começa com um módulo principal típico que configura o loop de evento principal. O Xcode gera esse arquivo e a maioria dos seres humanos não tem motivo para tocar nele. 

Os aplicativos do modelo Mobile SDK para iOS 13 também definem as seguintes classes que podem ser personalizadas:

  • A classe AppDelegate trata da inicialização do Mobile SDK.
  • A classe SceneDelegate trata de eventos do ciclo de vida da cena e autenticação do usuário. Ela delega a um objeto do SDK Manager compartilhado a coordenação das tarefas de autenticação e da senha do Salesforce. Se a autenticação for bem-sucedida, o controle passa para o controlador de exibição raiz do seu aplicativo.
  • A classe InitialViewController é o contêiner da tela de login do Salesforce.
  • O controlador de exibição raiz é uma classe personalizada que inicia o conteúdo do seu aplicativo.

O diagrama a seguir ilustra o fluxo de inicialização para um aplicativo nativo usando o gerenciador de SDK mais abrangente, MobileSyncSDKManager. Esse gerenciador permite a autenticação e inclui os recursos offline do Mobile SDK.

Diagrama do fluxo do aplicativo

Por padrão, os aplicativos nativos do forceios usam MobileSyncSDKManager, uma subclasse especializada do SalesforceManager, para inicializar o Mobile SDK. Essa classe habilita a gama completa de recursos do Mobile SDK.

Fluxo de inicialização do aplicativo

Quando um cliente abre seu aplicativo, ocorre uma sequência complexa de eventos. Esses eventos incluem:

  • Aplicação da configuração do aplicativo
  • Inicialização do Salesforce Mobile SDK
  • Validação da senha do aplicativo (opcional)
  • Execução de login e autenticação do Salesforce
  • Lançamento do aplicativo
Uma dose saudável de “tempo de manobra”, por exemplo, a capacidade de adiar o login do Salesforce até depois da inicialização, pode complicar o tratamento desses eventos. Por sorte, o Mobile SDK evita que você se atrapalhe fornecendo o objeto de gerenciamento do SDK. Esse objeto impõe a devida sequência de inicialização para que você não tenha que se preocupar com a maioria dos eventos de inicialização.

Como você inicializa o Mobile SDK depende da sua linguagem de desenvolvimento.

A maior parte do código que usa o SDK Manager existe em um novo aplicativo forceios. Vamos examinar esse código.

  1. No Xcode, abra o arquivo AppDelegate.swift.
  2. Vá até o método init.

Aqui, você pode ver o objeto MobileSyncSDKManager inicializando o Mobile SDK. Ele chama initializeSDK()

override init() {
    super.init()
    MobileSyncSDKManager.initializeSDK()
}

Internamente, esse método passa o nome da classe MobileSyncSDKManager para a classe "super" (ou pai), SalesforceManager. Nos bastidores, o SalesforceManager configura observadores para eventos de lançamento de aplicativos e ciclo de vida, como autenticação do usuário, falhas de código PIN e estado em primeiro plano. Exceto em casos extremos, você nunca está diretamente envolvido nesses eventos. 

O SalesforceManager também toma outras duas ações notáveis: 

  • Ele cria uma instância compartilhada dele próprio que persiste durante o resto do ciclo de vida do aplicativo.
  • Ele se configura para que o aplicativo sempre obtenha uma instância de MobileSyncSDKManager para executar suas tarefas do gerenciador do SDK.

Como resultado, se seu aplicativo chamar os métodos do gerenciador do SDK, o MobileSyncSDKManager terá a chance de personalizar o que os métodos fazem. 

Essas mudanças afetam sua codificação? Sim! Seu código deve sempre chamar métodos do gerenciador do SDK nessa única instância compartilhada: 

MobileSyncSDKManager.shared

Você verá um exemplo em breve. Primeiro, porém, vamos dar uma olhada mais de perto na classe AppDelegate do novo aplicativo.

Classe AppDelegate

Depois que o Mobile SDK é inicializado, o restante do AppDelegate implementa métodos de protocolo UIApplicationDelegate que podem ser personalizados conforme necessário. Cada um desses métodos contém instruções comentadas que indicam exatamente o que deve ser feito no caso de uso pretendido. É possível, por exemplo:

  • Personalizar uma nova sessão de cena. Para especificar sua própria configuração da sessão de cena, personalize o valor de retorno do método application(_:configurationForConnecting:options:).
  • Limpar os recursos quando o cliente descarta uma sessão de cena. Use o método application(_:didDiscardSceneSessions:) para liberar recursos personalizados que seu aplicativo adicionou às cenas descartadas.
  • Registrar seu aplicativo para receber notificações por push. Siga as instruções comentadas no método application(_:didFinishLaunchingWithOptions:). As notificações push do Mobile SDK no iOS exigem uma extensão para tratar da descriptografia. Por exemplo, consulte iOSNativeSwiftEncryptedNotificationsTemplate no repositório SalesforceMobileSDK-Templates do GitHub.
  • Registrar o dispositivo do cliente para receber notificações por push. Se você se registrou para receber notificações por push, o método de retorno de chamada application(_:didRegisterForRemoteNotificationsWithDeviceToken:) transmitirá um token de dispositivo. Para registrar esse token de dispositivo no Mobile SDK e no gerente de notificações por push do Salesforce, siga as instruções comentadas
  • Informar se o registro de notificações por push falhar. Às vezes, a tentativa do aplicativo de se registrar para receber notificações por push pode falhar. Nesse caso, você recebe uma mensagem de erro no método application(_:didFailToRegisterForRemoteNotificationsWithError:), que pode ser tratada da forma que quiser.
  • Habilitar um serviço de IDP. Você está querendo usar esse aplicativo como um provedor de identidade para seus outros aplicativos do Mobile SDK? Comece seguindo as instruções comentadas no método application(openURL:options:). Para implementar esse recurso integralmente, configure seus aplicativos conforme descrito no Guia de desenvolvimento do Mobile SDK.

Classe SceneDelegate

A classe SceneDelegate é a plataforma de lançamento do aplicativo. Ela inicia o login do Salesforce e, em seguida, passa o controle para seu conteúdo personalizado. Mas a classe faz muito mais do que isso.

Em aplicativos Swift para iOS 13 e posteriores, SceneDelegate assume o controle como o gerenciador de visualizações SwiftUI. SceneDelegate trata dos eventos do ciclo de vida de uma cena, como 

  • Conectar-se ao aplicativo
  • Entrar em primeiro plano ou no fundo
  • Tornar-se ativo ou inativo
  • Redimensionar

Você pode personalizar sua classe SceneDelegate para adicionar seu próprio tratamento para esses eventos. Na verdade, o aplicativo de modelo facilita essa operação. Ele fornece comentários em grandes manipuladores de eventos que indicam como proceder.

No que diz respeito ao Mobile SDK, SceneDelegate é onde seus recursos personalizados assumem o controle. O aplicativo de modelo usa SceneDelegate para: 

  • Publicar a tela de login do Salesforce quando necessário: antes que um usuário faça login ou sempre que um usuário faça logout.
  • Reiniciar o estado de exibição quando o usuário atual fizer logout.
  • Importar arquivos de configuração para os recursos offline SmartStore e Sincronização móvel.
  • Definir a exibição raiz da janela para a primeira exibição personalizada no aplicativo.

Vejamos o código-fonte para ver como o aplicativo mostra seus modos de exibição.

  1. No Xcode, abra o arquivo SceneDelegate.swift.
  2. Perto da parte superior da classe, você pode ver a definição da primeira função.
    func scene(_ scene: UIScene, willConnectTo session: UISceneSession, options connectionOptions: UIScene.ConnectionOptions) {
        guard let windowScene = (scene as? UIWindowScene) else { return }
        self.window = UIWindow(frame: windowScene.coordinateSpace.bounds)
        self.window?.windowScene = windowScene
        AuthHelper.registerBlock(forCurrentUserChangeNotifications: {
            self.resetViewState {
                self.setupRootViewController()
            } 
        })
    }
    Esse método é a primeira parada de todas as cenas que estão sendo inicializadas. As três primeiras linhas representam código padronizado. Elas "conectam" a cena ao aplicativo, ou seja, anexam a cena a uma janela do aplicativo para que ela possa ser exibida. A instrução final nesse método configura a classe AuthHelper do Mobile SDK para tratar das notificações atuais de alteração do usuário. O próprio manipulador é o bloco interno dentro da chamada do método AuthHelper.registerBlock(_:). Ele chama dois métodos privados personalizados: resetViewState(_:) e setupRootViewController(). O método resetViewState(_:) restaura seu aplicativo à sua condição de inicialização perfeita, retirando qualquer estado de exibição existente e, em seguida, restaurando a exibição raiz original. Vamos nos aprofundar em setupRootViewController() em breve.
  3. Procure "func initializeAppViewState”. Nessa implementação do método, veja a penúltima linha:
    self.window?.rootViewController = InitialViewController(nibName: nil, bundle: nil)
    Esse código define a propriedade self.window?.rootViewController como um objeto InitialViewController recém-criado. A classe InitialViewController é definida em seu aplicativo e é meio simples e sem graça. Esse modo de exibição, que é o primeiro a aparecer, é um simples contêiner para as telas de login e autorização do Salesforce. Isso é tudo o que você precisa saber. Esse método é chamado no manipulador de eventos sceneWillEnterForeground.
  4. Procure “func setupRootViewController”. Ele é implantado da seguinte forma:
    func setupRootViewController() {
        // Setup store based on config userstore.json
        MobileSyncSDKManager.shared.setupUserStoreFromDefaultConfig()
        // Setup syncs based on config usersyncs.json
        MobileSyncSDKManager.shared.setupUserSyncsFromDefaultConfig()
        self.window?.rootViewController = UIHostingController(
            rootView: AccountsListView()
        )
    }

O método setupRootViewController() executa algumas etapas significativas de configuração.

  • Ele carrega arquivos de configuração para os recursos offline SmartStore e Sincronização móvel.
  • Ele define o controlador de exibição raiz da janela para AccountsListView, uma visualização SwiftUI personalizada que mostra uma lista de nomes de conta da organização do usuário.

Seu controlador de exibição raiz é o ponto de partida do conteúdo do seu aplicativo. Para deixar essa escolha clara para o iOS, setupRootViewController() cria um objeto UIHostingController e inicializa sua propriedade rootView para uma instância da primeira exibição do seu aplicativo. Quando isso acontece, o controle do aplicativo passa para o código personalizado. Você pode reutilizar classes de exibição e de modelo do aplicativo de modelo ou substituí-las por suas próprias soluções. De acordo com o que é discutido na próxima seção, você ainda chamará APIs do Mobile SDK para acessar recursos do Salesforce. Mas, a partir desse ponto, o fluxo, o conteúdo e a intenção do aplicativo são todos seus. Seja criativo! 

Recursos

Continue a aprender de graça!
Inscreva-se em uma conta para continuar.
O que você ganha com isso?
  • Receba recomendações personalizadas para suas metas de carreira
  • Pratique suas habilidades com desafios práticos e testes
  • Monitore e compartilhe seu progresso com os empregadores
  • Conecte-se a orientação e oportunidades de carreira