Compreender aplicativos forcedroid
Objetivos de aprendizagem
Após concluir esta unidade, você estará apto a:
- Descrever o fluxo geral de um aplicativo nativo do Salesforce Mobile SDK para Android.
- Identificar as duas classes principais de um aplicativo forcedroid.
- Listar as tarefas tratadas pelo objeto SalesforceSDKManager em seu nome.
Visão geral do fluxo do aplicativo
Você criou e executou um novo aplicativo nativo forcedroid. Tem curiosidade de saber como ele funciona?
Veja um diagrama que mostra como o fluxo de inicialização do aplicativo funciona em alto nível.

No seu aplicativo, Application Object (Objeto do aplicativo) é uma instância da classe MainApplication e Main Activity (Atividade principal) representa a classe MainActivity. A classe MainApplication cria os componentes básicos do seu aplicativo e passa o controle para o objeto singleton MobileSyncSDKManager. MobileSyncSDKManager, uma subclasse de SalesforceSDKManager, por sua vez inicia o fluxo de login do Salesforce e, se a autenticação do usuário for bem-sucedida, passa o controle para a classe MainActivity. MainActivity cria uma instância e exibe tudo o que aparece na tela do modo de exibição de lista.
Senhas, login, logout e limpeza são tarefas geridas pelo singleton MobileSyncSDKManager. Os objetos de classe internos cuidam dos protocolos OAuth. Como você pode ver, a parte de senha do fluxo é opcional. Ela só ocorre se seu aplicativo de cliente externo permitir senhas, e um administrador do Salesforce pode reverter essa política a qualquer hora. De qualquer forma, você não precisa se preocupar com senhas. O Mobile SDK oferece implantação completa nos bastidores.
O que é um aplicativo forcedroid?
Um aplicativo nativo forcedroid implanta somente as funções básicas. O usuário pode alternar entre visualizar uma lista de Contatos e uma lista de Contas; é basicamente isso. No entanto, o aplicativo serve como trampolim para as suas ideias incríveis. Você pode aprimorar seu aplicativo:
- Executando operações CRUD (Create, Read, Update, Delete – Criar, Ler, Atualizar, Excluir) nos registros do Salesforce
- Adicionando atividades personalizadas
- Chamando outros componentes
- Fazendo tudo o que o escopo do projeto, sua imaginação e a tecnologia atual permitirem
Quando o forcedroid cria um aplicativo nativo, ele faz uma cópia de um modelo do Mobile SDK e o personaliza para corresponder à entrada da linha de comando. Vejamos alguns dos itens padrão que esse processo padronizado cria.
Cada aplicativo forcedroid define duas classes Android públicas:
- Uma classe de aplicativo que estende android.app.Application. Essa classe serve como o ponto de entrada do aplicativo. Essa classe se chama MainApplication no seu aplicativo.
- Uma classe de atividade principal que estende android.app.Activity. Essa classe define uma tela e contém a maior parte da lógica personalizada do aplicativo. Essa classe se chama MainActivity nos aplicativos forcedroid. Ela estende SalesforceActivity, que, por sua vez, estende android.app.Activity.
Assim como com qualquer aplicativo Android, o arquivo AndroidManifest.xml designa a configuração do aplicativo especificando a classe de aplicativo e todas as classes de atividade.
A classe de aplicativo
Sua classe de aplicativo conclui duas tarefas principais:
- Substitui a função Application.onCreate() do Android.
- Em sua substituição onCreate():
- Chama a função onCreate() da superclasse.
- Inicializa Salesforce Mobile SDK chamando initNative() no objeto do SDK Manager (MobileSyncSDKManager).
- Fornece código comentado opcional que você pode restaurar para utilizar seu aplicativo como um provedor de identidade do Salesforce.
- Fornece código comentado opcional que você pode restaurar para dar suporte a notificações por push.
Vamos dar uma olhada rápida no código.
- No Android Studio, clique em File (Arquivo) | Open... (Abrir...).
- Navegue até o diretório de destino especificado no prompt de comando do forcedroid e selecione-o. (Dica: o diretório de destino será TrailAndroidApps, se você não tiver quebrado as regras.)
- Clique em Escolher.
- Quando a janela de edição do Android Studio aparecer, abra o modo de exibição Project (Projeto) (View | Tool Windows | Project (Ver | Janelas de ferramentas | Projeto)).
- Na janela Project (Projeto), expanda app | java | com.mytrail.android e clique duas vezes em MainApplication.
A classe MainApplication é muito simples. Ela define uma substituição de um único método de classe base, onCreate(). O que essa substituição faz? Ela chama o método de superclasse OnCreate() e inicializa o objeto singleton MobileSyncSDKManager.
/**
* Application class for our application.
*/
class MainApplication : Application() {
companion object {
private const val FEATURE_APP_USES_KOTLIN = "KT"
}
override fun onCreate() {
super.onCreate()
MobileSyncSDKManager.initNative(
applicationContext,
MainActivity::class.java,
)
MobileSyncSDKManager.getInstance().registerUsedAppFeature(FEATURE_APP_USES_KOTLIN)
}
}Quando o objeto MobileSyncSDKManager é inicializado, ele começa a ser executado e não vemos a classe MainApplication novamente. Observe que MobileSyncSDKManager precisa de duas coisas para se inicializar:
- Um contexto de aplicativo, para saber como encontrar a configuração do seu aplicativo.
- Uma referência à classe mainactivity, MainActivity.class, que MobileSyncSDKManager usa no final do fluxo de login para iniciar a lógica personalizada do seu aplicativo.
Com esse pequeno pedaço de código gratuito, seu aplicativo recebe a senha, o login e o logout, o OAuth e a criptografia de dados de usuário. Um bom negócio, não é?
A classe MainActivity
Por sorte, o forcedroid é inteligente o suficiente para fazer com que a classe MainActivity estenda SalesforceActivity. Isso significa que você recebe várias coisas interessantes de graça. Por exemplo, SalesforceActivity trata eventos de pausa e retomada automaticamente, incluindo novas inserções de senha necessárias. Se você usou alguma classe base de atividade que não é do Salesforce, o que não é proibido, mas também não é recomendado, terá que escrever esse código por conta própria. Você pode definir quantas classes de atividade forem necessárias para seu aplicativo. No entanto, é bom que cada atividade estenda uma classe base do Mobile SDK, como SalesforceActivity ou SalesforceListActivity.
A classe MainActivity se ocupa com o envio de uma consulta REST para o Salesforce e o processamento da resposta. Ela usa os registros recebidos do Salesforce para preencher um modo de exibição de lista. Ela também cria dois botões que permitem ao usuário optar por consultar Accounts (Contas) ou Contacts (Contatos), além de um botão para limpar a exibição do registro e outro para fazer o logout.
Você vai se aprofundar nos detalhes da interação REST mais adiante. Por enquanto, vejamos como e onde esses botões de IU são configurados.
- Na janela Project (Projeto) do Android Studio, expanda MyTrailNative | res | layout e clique duas vezes em main.xml.
- Na parte inferior da janela do editor, selecione a guia Text (Texto).
A guia Text (Texto) mostra uma janela separada com um designer visual à direita e o arquivo de configuração XML do modo de exibição à esquerda. Um clique em uma área do designer visual destaca a configuração XML dessa área.
Se você clicar no botão FETCH CONTACTS (BUSCAR CONTATOS), por exemplo, o editor destacará um nó <LinearLayout>/<Button>. Os atributos no nó especificam as características do botão: aparência, identificação e comportamento. Verifique a documentação de desenvolvedor do Android para saber mais sobre os detalhes de configuração de IU.
O manifesto do aplicativo
O arquivo AndroidManifest.xml do seu projeto revela a configuração mais básica do aplicativo: seu nome, ícone, atividade principal, versões da API do Android mínima e desejada, e muito mais. Veja você mesmo!
- Na janela Project (Projeto) do Android Studio, expanda app.
- Clique duas vezes em AndroidManifest.xml.
No nó raiz <manifest>, logo após a declaração do namespace, você verá o nome do pacote do seu aplicativo declarado:
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.mytrail.android"
android:versionCode="1"
android:versionName="1.0"
android:installLocation="internalOnly">O elemento raiz <manifest> contém um nó <application> que define a configuração básica do seu aplicativo. No nível superior, esse nó define os atributos que indica ao soberano Android o nome da classe de inicialização do aplicativo forcedroid.
<application android:icon="@drawable/sf__icon"
android:label="MyTrailNative"
android:name=".MainApplication"
...O prefixo “.” diz ao Android para colocar o nome do pacote do aplicativo, com.mytrail.android, antes desse caminho de classe.
Além disso, todas as atividades definidas por você ou pelo forcedroid ganham uma descrição aqui.
Por exemplo, o nó único application/activity nesse caso representa a primeira atividade que aparece após o login. Como pode ver, a propriedade android:name da atividade faz referência ao nome de classe da sua atividade principal. Eis o fragmento XML application/activity de um arquivo AndroidManifest.xml do forcedroid.
<!-- Launcher screen -->
<activity android:name=".MainActivity"
android:exported="true"
android:theme="@style/SalesforceSDK">
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>Todas as outras coisas que aparecem no arquivo de manifesto padrão são configurações padrão do Android. Assim como acontece com qualquer aplicativo Android, você pode adicionar os próprios componentes do seu aplicativo ao nó <application>, como atividades, serviços e receptores personalizados.
Agora que você aprendeu o que é um aplicativo forcedroid, vamos prosseguir com as informações que você tanto esperava: como acessar dados do Salesforce.
Recursos
- Desenvolvedores do Salesforce: TemplateApp Class
- Desenvolvedores do Salesforce: MainActivity Class
- Desenvolvedores do Salesforce: TemplateApp Manifest
- Recurso externo: Documentação para desenvolvedores Android