Skip to main content
Join the Agentforce Hackathon on Nov. 18-19 to compete for a $20,000 Grand Prize. Sign up now. Terms apply.

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 y SceneDelegate 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.

Diagrama de flujo de aplicació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
Un amplio “margen de maniobra” (por ejemplo, la posibilidad de posponer el inicio de sesión de Salesforce después de iniciar) pueden convertir estos eventos en una proposición compleja. Por suerte, Mobile SDK permite evitar la complejidad mediante el objeto de gestor de SDK. Este objeto aplica la secuencia de arranque correcta de modo que no se tenga que preocupar sobre la mayoría de los eventos de inicio.

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.

  1. En Xcode, abra el archivo AppDelegate.swift.
  2. 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, consulte iOSNativeSwiftEncryptedNotificationsTemplate 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

La clase 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.

  1. En Xcode, abra el archivo SceneDelegate.swift.
  2. 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 clase AuthHelper 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étodo AuthHelper.registerBlock(_:). Llama dos métodos privados personalizados: resetViewState(_:) y setupRootViewController(). El método resetViewState(_:) 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 en setupRootViewController() en breve.
  3. 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 propiedad self.window?.rootViewController en un objeto InitialViewController recién creado. La clase InitialViewController 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 eventos sceneWillEnterForeground.
  4. 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

Comparta sus comentarios de Trailhead en la Ayuda de Salesforce.

Nos encantaría saber más sobre su experiencia con Trailhead. Ahora puede acceder al nuevo formulario de comentarios en cualquier momento en el sitio de Ayuda de Salesforce.

Más información Continuar a Compartir comentarios