Comprender las aplicaciones forcedroid
Objetivos de aprendizaje
Después de completar esta unidad, podrá:
- Describir el flujo general de una aplicación de Salesforce Mobile SDK para Android.
- Identificar dos clases principales de una aplicación forcedroid.
- Indicar las tareas que el objeto SalesforceSDKManager controla por usted.
Descripción general del flujo de aplicación
Ha creado y ejecutado una aplicación forcedroid nativa. ¿Se pregunta cómo funciona?
En el siguiente diagrama se incluye una descripción de alto nivel del funcionamiento del flujo de inicio de la aplicación.
En la aplicación, el “objeto de aplicación” es una instancia de la clase MainApplication y la “actividad principal” representa la clase MainActivity. La clase MainApplication crea los componentes básicos de la aplicación y, a continuación, pasa el control al objeto de singleton MobileSyncSDKManager. MobileSyncSDKManager, una subclase de SalesforceSDKManager inicia el flujo de inicio de sesión de Salesforce y, si la autenticación de usuario es correcta, transfiere el control a la clase MainActivity. MainActivity crea una instancia y muestra todo cuanto aparece en la pantalla de vista de lista.
Los códigos de aprobación, el inicio de sesión, el cierre de sesión y la limpieza son tareas que gestiona el singleton MobileSyncSDKManager. Los objetos de clase interna se ocupan de los protocolos OAuth. Como puede ver, la parte del código de aprobación del flujo es opcional. Solo se usa si la aplicación conectada permite códigos de aprobación y un administrador de Salesforce puede revertir esta política en cualquier momento. En cualquier caso, no tiene por qué preocuparse por los códigos de aprobación. Mobile SDK permite una implementación completa en segundo plano.
¿Qué se incluye en una aplicación forcedroid?
- Realización de operaciones CRUD (crear, leer, actualizar y eliminar) en registros de Salesforce
- Adición de actividades personalizadas
- Llamada a otros componentes
- Realización de cualquier otra operación si lo permiten el ámbito del proyecto, su imaginación y la tecnología actual
Cuando forcedroid crea una aplicación nativa, hace una copia de un proyecto de plantilla de Mobile SDK y la personaliza para que coincida con su entrada de línea de comandos. Vamos a ver algunos de los elementos estándar que crea este molde.
- Una clase de aplicación que extiende android.app.Application. Esta clase es el punto de entrada de la aplicación. En su aplicación, esta clase se llama MainApplication.
- Una clase de actividad principal que extiende android.app.Activity. Esta clase define una pantalla y contiene la mayor parte de la lógica personalizada de la aplicación. En las aplicaciones forcedroid, esta clase se llama MainActivity. Extiende SalesforceActivity, que a su vez extiende android.app.Activity.
Como en el caso de cualquier otra aplicación Android, el archivo AndroidManifest.xml designa la configuración de la aplicación, donde se especifican la clase de aplicación y todas las clases de actividad.
Clase de aplicación
Su clase de aplicación realiza dos tareas principales:
- Sustituye el método Application.onCreate() de Android.
- En su onCreate() sustituye:
- Llamadas al método onCreate() de superclase.
- Inicializa Salesforce Mobile SDK llamando a initNative() en el gestor de objetos del SDK (MobileSyncSDKManager).
- Proporciona el código comentado opcional que puede reutilizar para emplear su aplicación como un proveedor de identidad de Salesforce.
- Proporciona código comentado opcional que puede reutilizar para admitir notificaciones distribuidas.
- En la pantalla de bienvenida de Android Studio, seleccione Import project (Eclipse ADT, Gradle, etc.) (Importar proyecto [Eclipse ADT, Gradle, etc.]). O bien, si Android Studio ya está abierto, haga clic en (Archivo | Abrir...).
- Busque el directorio de destino especificado en el símbolo del sistema de forcedroid y selecciónelo. (Una pista: El directorio de destino es “TrailAndroidApps”, a menos que incumpla las reglas).
- Haga clic en Choose (Seleccionar).
- Cuando se muestre la ventana de modificación de Android Studio, abra la vista de proyecto ( [Ver | Ventanas de herramientas | Proyecto]).
- En la ventana de proyecto, expanda , y, a continuación, haga doble clic en MainApplication.
La clase MainApplication es bastante sencilla. Define una sustitución de un método de clase de base única, en este caso onCreate(). ¿Qué hace la sustitución? Llama al método de superclase OnCreate() y, a continuación, inicializa el objeto de singleton MobileSyncSDKManager.
/** * Application class for our application. */ public class MainApplication extends Application { @Override public void onCreate() { super.onCreate(); MobileSyncSDKManager.initNative(getApplicationContext(), MainActivity.class); /* * Uncomment the following line to enable IDP login flow. This will allow the user to * either authenticate using the current app or use a designated IDP app for login. * Replace 'idpAppURIScheme' with the URI scheme of the IDP app meant to be used. */ // MobileSyncSDKManager.getInstance().setIDPAppURIScheme(idpAppURIScheme); /* * Un-comment the line below to enable push notifications in this app. * Replace 'pnInterface' with your implementation of 'PushNotificationInterface'. * Add your Google package ID in 'bootonfig.xml', as the value * for the key 'androidPushNotificationClientId'. */ // SalesforceSDKManager.getInstance().setPushNotificationReceiver(pnInterface); } }
- Un contexto de aplicación para saber dónde buscar la configuración de su aplicación.
- Una referencia a la clase de actividad principal (MainActivity.class) que MobileSyncSDKManager usa al final del flujo de inicio de sesión para iniciar la lógica personalizada de la aplicación.
Clase de actividad principal
Por suerte, forcedroid es lo bastante inteligente para que la clase MainActivity extienda SalesforceActivity. Esta buena suerte significa que puede lograr cosas increíbles de forma gratuita. Por ejemplo, SalesforceActivity controla automáticamente la pausa y reanudación de eventos, lo que incluye volver a ingresar el código de aprobación necesario. Si en lugar de esto, hubiera usado una clase base de actividad no proporcionada por Salesforce (lo cual no es un método prohibido, aunque no se recomienda), tendría que escribir el código. Puede definir tantas clases de actividad como requiera la aplicación. No obstante, es una buena idea para cada actividad extender una clase base de Mobile SDK, como SalesforceActivity o SalesforceListActivity.
La clase MainActivity está ocupada con el envío de una solicitud REST a Salesforce y el procesamiento de la respuesta. Usa los registros que recibe de Salesforce para completar una vista de lista. Además, proporciona dos botones que permiten al usuario elegir entre la consulta de cuentas o contactos además de un botón para borrar la pantalla de registros y otro botón para cerrar sesión.
- En la ventana del proyecto de Android Studio, expanda y, a continuación, haga doble clic en main.xml.
- En la parte inferior de la ventana del editor, seleccione la ficha Text (Texto).
<include layout="@layout/header" />
Manifiesto de la aplicación
- En la ventana del proyecto de Android Studio, expanda .
- Haga doble clic en AndroidManifest.xml.
<manifest xmlns:android="http://schemas.android.com/apk/res/android" package="com.mytrail.android" android:versionCode="1" android:versionName="1.0" android:installLocation="internalOnly">
<application android:icon="@drawable/sf__icon" android:label="MyTrailNative" android:name=".MainApplication" ...
Además, se asigna una descripción a cada actividad definida por usted o forcedroid. Por ejemplo, tan solo el nodo application/activity en este caso representa la primera actividad que se muestra después del inicio de sesión. Como puede ver, la propiedad android:name de la actividad hace referencia al nombre de clase de su actividad principal. Este es el fragmento XML de application/activity de un archivo AndroidManifest.xml de forcedroid.
<!-- Launcher screen --> <activity android:name=".MainActivity" android:label="@string/app_name" android:theme="@android:style/Theme.NoTitleBar.Fullscreen"> <intent-filter> <action android:name="android.intent.action.MAIN" /> <category android:name="android.intent.category.LAUNCHER" /> </intent-filter> </activity>
Aparte de esto, todo lo que vea en el archivo de manifiesto predeterminado es la configuración de Android estándar. Al igual que con cualquier aplicación Android, puede agregar los componentes propios de su aplicación al nodo <application>, como actividades, servicios y receptores.
Ahora que ya sabe lo que incluye una aplicación forcedroid, vamos a continuar con la información que estaba esperando: cómo acceder a los datos de Salesforce.