Concepto de aplicaciones nativas forceios
Objetivos de aprendizaje
Después de completar esta unidad, podrá:
- Comprender el flujo general de una aplicación iOS nativa de Salesforce.
- Comprender el flujo de eventos durante el inicio de la aplicación.
- Comprender cómo
AppDelegate
ySceneDelegate
dirigen el flujo de ejecución.
Siga el proceso con Trail Together
¿Desea seguir el proceso con un experto a medida que realiza este paso? Mire este video que forma parte de la serie Trail Together.
(Este video comienza en el minuto 14:49, en caso de que desee rebobinar y mirar el comienzo del paso nuevamente).
Descripción general del flujo de aplicación
Vamos a examinar más detenidamente las aplicaciones iOS nativas.
En la superficie, una aplicación Mobile SDK nativa es tan solo una aplicación iOS típica. Puede describir su arquitectura en términos de Modelo-Vista-Controlador (MVC):
- El modelo es el esquema de base de datos de Plataforma Salesforce.
- Las vistas proceden de los archivos nib y de implementación de su proyecto.
- La funcionalidad del controlador se incluye como clases de iOS Cocoa Touch, clases de Salesforce Mobile SDK y clases personalizadas de su aplicación.
Como todas las aplicaciones iOS, las aplicaciones nativas Mobile SDK se inician con un módulo principal reutilizable que configura el bucle de evento principal. Xcode genera este archivo, el cual no necesitan consultar por ningún motivo la mayoría de los usuarios.
Las aplicaciones de plantilla Mobile SDK para iOS 13 definen las siguientes clases que puede personalizar:
- La clase
AppDelegate
controla la inicialización de Mobile SDK. - La clase
SceneDelegate
controla los eventos del ciclo de vida de la escena y la autenticación del usuario. Hace referencia a un objeto de gestor de SDK compartido para coordinar el código de aprobación y las tareas de autenticación de Salesforce. Si la autenticación es correcta, pasa el control al controlador de vista raíz de su aplicación. - La clase
InitialViewController
es el contenedor para la pantalla de inicio de sesión de Salesforce. - El controlador de vista raíz es una clase personalizada que inicia el contenido de su aplicación.
El siguiente diagrama ilustra el flujo de inicio para una aplicación nativa utilizando el gestor de SDK más completo, MobileSyncSDKManager
. Este gestor activa la autenticación e incluye las funciones de Mobile SDK sin conexión.
De forma predeterminada, las aplicaciones nativas forceios utilizan MobileSyncSDKManager
, una subclase especializada de SalesforceManager
, para inicializar Mobile SDK. Esta clase activa la gama completa de funciones de Mobile SDK.
Flujo de inicio de aplicación
Cuando un cliente abre su aplicación, se genera una secuencia de eventos bastante compleja. Estos eventos incluyen lo siguiente:
- Aplicación de la configuración de su aplicación
- Inicialización de Salesforce Mobile SDK
- Validación de un código de aprobación a la aplicación (opcional)
- Inicio de sesión y autenticación en Salesforce
- Lanzamiento de su aplicación
El modo de inicializar Mobile SDK depende de su lenguaje de desarrollo.
La mayoría del código que utiliza el gestor de SDK existe en una aplicación forceios nueva. Vamos a examinar este código.
- En Xcode, abra el archivo AppDelegate.swift.
- Desplácese al método
init
.
Aquí, puede ver que el objeto MobileSyncSDKManager
inicializa Mobile SDK; llama a initializeSDK()
.
override init() { super.init() MobileSyncSDKManager.initializeSDK() }
Internamente, este método pasa el nombre de clase MobileSyncSDKManager
a la clase "super" (o principal), SalesforceManager
. Entre bastidores, SalesforceManager
establece observadores para los eventos del lanzamiento de la aplicación y del ciclo de vida, como la autenticación del usuario, los fallos de código PIN y el estado de primer plano. Excepto en casos extremos, usted nunca está involucrado directamente en estos eventos.
SalesforceManager
también realiza otras dos acciones importantes:
- Crea una instancia compartida de sí mismo que persiste durante el resto del ciclo de vida de la aplicación.
- Se configura a sí mismo para que la aplicación siempre reciba una instancia de
MobileSyncSDKManager
para realizar sus tareas de gestor de SDK.
Como resultado, si su aplicación llama a los métodos del gestor de SDK, MobileSyncSDKManager
tiene la oportunidad de personalizar lo que hacen.
¿Estos cambios afectan su codificación? ¡Sí! Su código siempre debe llamar a los métodos del gestor de SDK en esta única instancia compartida:
MobileSyncSDKManager.shared
Veremos un ejemplo en breve. Primero, echemos un vistazo más de cerca a la nueva clase de su aplicación, AppDelegate
.
AppDelegate Class
Después de la inicialización de Mobile SDK, el resto de AppDelegate implementa los métodos de protocolo UIApplicationDelegate que puede personalizar de manera pertinente. Cada uno de estos métodos contiene instrucciones comentadas que le indican qué puede hacer en el caso de uso de destino. Por ejemplo, puede hacer lo siguiente:
- Personalizar una nueva sesión de escena. Para especificar la configuración de sesión de su propia escena, personalice el valor devuelto del método
application(_:configurationForConnecting:options:)
. - Limpiar recursos cuando el cliente descarta la sesión de una escena. Utilice el método
application(_:didDiscardSceneSessions:)
para publicar recursos personalizados que su aplicación haya agregado a las escenas descartadas. - Registrar su aplicación para notificaciones distribuidas. Siga las instrucciones comentadas en el método
application(_:didFinishLaunchingWithOptions:)
. Las notificaciones distribuidas de Mobile SDK en iOS requieren una extensión para controlar el descifrado. Para ver un ejemplo, consulteiOSNativeSwiftEncryptedNotificationsTemplate
en el repositorio SalesforceMobileSDK-Templates de GitHub. - Registre el dispositivo del cliente para notificaciones distribuidas. Si se registró para notificaciones distribuidos, el método de devolución de llamada
application(_:didRegisterForRemoteNotificationsWithDeviceToken:)
le pasa un token de dispositivo. Para registrar este token de dispositivo con Mobile SDK y el gestor de notificaciones distribuidas de Salesforce, siga las instrucciones comentadas. - Difunda la información si falla el registro de las notificaciones distribuidas. A veces, el intento de registrarse para notificaciones distribuidas de la aplicación falla. De ser así, recibirá un mensaje de error en el método
application(_:didFailToRegisterForRemoteNotificationsWithError:)
, que puede solucionar como desee. - Active un servicio IDP. ¿Tiene intención de utilizar esta aplicación como proveedor de identidad para el resto de sus aplicaciones Mobile SDK? Para comenzar, siga las instrucciones comentadas en el método
application(openURL:options:)
. Para implementar completamente esta función, configure sus aplicaciones según se describe en la Guía de desarrollo de Mobile SDK.
Clase SceneDelegate
SceneDelegate
es la plataforma de lanzamiento de su aplicación. Inicia el inicio de sesión de Salesforce y, luego, pasa el control a su contenido personalizado. Pero hace mucho más que solo eso.En aplicaciones Swift para iOS 13 y versiones posteriores, SceneDelegate
ocupa el primer plano como gestor de vistas de SwiftUI. SceneDelegate
controla los eventos del ciclo de vida de una escena, como
- La conexión a la aplicación
- El ingreso del frente o del fondo
- La activación o desactivación
- El cambio de tamaño
Puede personalizar su clase SceneDelegate
para agregar su propia gestión de estos eventos. De hecho, la aplicación de plantilla le facilita la tarea, ya que proporciona comentarios en controladores de eventos importantes que le indican cómo proceder.
En términos de Mobile SDK, SceneDelegate
es donde los recursos personales toman el control. La aplicación de plantilla utiliza SceneDelegate
para:
- Publicar la pantalla de inicio de sesión de Salesforce cuando es necesario, antes de que el usuario haya iniciado sesión o cada vez que la cierra.
- Restablecer el estado de vista cuando el usuario actual cierra sesión.
- Importar archivos de configuración para las funciones de SmartStore y Mobile Sync sin conexión.
- Establecer la vista raíz de la ventana en la primera vista personalizada en la aplicación.
Vamos a examinar el código abierto para comprobar cómo muestra la aplicación sus vistas.
- En Xcode, abra el archivo SceneDelegate.swift.
- Junto a la parte superior de la clase, puede ver la definición de la primera función.
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() } }) }
Este método es la primera parada para las escenas que se inicializan. Las primeras tres líneas son código reutilizado. "Conectan" la escena a la aplicación; en otras palabras, adjuntan la escena a una ventana de la aplicación para que pueda verse. La declaración final de este método configura la claseAuthHelper
de Mobile SDK para controlar las notificaciones de cambio de usuario actual. El controlador en sí mismo es el bloque interno dentro de la llamada al métodoAuthHelper.registerBlock(_:)
. Llama dos métodos privados personalizados:resetViewState(_:)
ysetupRootViewController()
. El métodoresetViewState(_:)
restaura su aplicación a su estado inicial perfecto al eliminar los estados de vista existentes y, luego, restaurar la vista raíz original. Ahondaremos ensetupRootViewController()
en breve. - Busque "func initializeAppViewState”. En la implementación de este método, examine la anteúltima línea:
self.window?.rootViewController = InitialViewController(nibName: nil, bundle: nil)
Este código establece la propiedadself.window?.rootViewController
en un objetoInitialViewController
recién creado. La claseInitialViewController
se define en la aplicación y es bastante escasa y aburrida. Esta vista, que es la primera en mostrarse, es solo un contenedor para las pantallas de inicio de sesión de Salesforce. Esto en todo cuanto necesita saber al respecto. Este método se llama desde el controlador de eventossceneWillEnterForeground
. - Busque “func setupRootViewController”. Se implementa del modo siguiente:
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() ) }
El método setupRootViewController()
realiza un par de pasos de configuración importantes.
- Carga archivos de configuración para las funciones de SmartStore y Mobile Sync sin conexión.
- Establece el controlador de vista raíz de la ventana en
AccountsListView
, una vista de SwiftUI personalizada que muestra una lista de nombres de cuentas de la organización del usuario.
El controlador de vista raíz es el punto de partida del contenido de su aplicación. Para que esta elección sea clara para iOS, setupRootViewController()
crea un objeto UIHostingController
e inicializa su propiedad rootView
a una instancia de la primera vista de su aplicación. Cuando esto sucede, el control de la aplicación pasa a su código personalizado. Luego, puede reutilizar clases de modelos y vistas de la aplicación de plantilla o reemplazarlas con sus propias soluciones. En la siguiente sesión, aún llamará a API de Mobile SDK para acceder a recursos de Salesforce. Pero a partir de este punto, el flujo, el contenido y la intención de la aplicación dependen de usted. ¡Sea creativo!
Recursos