Esta es una traducción que desde EGA Futura ofrecemos como cortesía a toda la Ohana y comunidad de programadores, consultores, administradores y arquitectos de Salesforce para toda Iberoamérica.
El enlace a la publicación original, lo encontrarás al final de este artículo.
…
Estoy muy contento de anunciar que la nueva versión del SDK móvil de Salesforce ya está disponible. Mobile SDK 9.0 se centra en la productividad del desarrollador y del usuario final. Independientemente de si está creando aplicaciones para iOS, Android o aplicaciones multiplataforma, a usted y a sus usuarios finales les encantarán las mejoras de esta versión.
Sus usuarios finales multitarea saltarán de alegría con nuestro soporte para múltiples ventanas para iPadOS. Gestiona diferentes cuentas, registros y casos de uso en paralelo.
Habéis hablado, os hemos escuchado. Basándonos en los comentarios de los desarrolladores, hemos añadido un ID externo para eliminar la duplicación de registros tras un reinicio de la sincronización para la información de padres e hijos. No es necesario que codifiques esto tú mismo, lo hemos hecho por ti.
Y… destacamos el poder del código abierto. ¡Hemos incorporado TypeScript para React Native con la ayuda de una contribución de la comunidad! Ahora, los desarrolladores de React Native pueden aprovechar las características de depuración y detección de errores de TypeScript desde el principio y con frecuencia durante el desarrollo de aplicaciones móviles.
Si ésta es su primera introducción al SDK para móviles de Salesforce, diríjase directamente a Trailhead y consulte la ruta Desarrollar con el SDK para móviles para empezar hoy mismo.
También puede revisar las notas de la versión para SDK para iOS y SDK para Android para ver todos los cambios de esta versión.
Destacados de la versión
- SDK para iOS
- Soporte de múltiples ventanas para iPadOS
- Mejoras en el paisaje para los dispositivos iOS
- SDK para iOS
- SDK para React Native
- TypeScript para React Native
- Plantillas modernizadas
- Sistema de gestión de la información para React Native
- Generalidades
- Identificación externa para la sincronización de padres e hijos
- Actualización del sistema operativo y de la biblioteca
- Se trata de un sistema de gestión de la información
SDK para iOS
Salesforce + Apple = Mejor juntos. Ofrezca experiencias de cliente impactantes aprovechando el mejor hardware de Apple, las últimas funciones del SDK para móviles y el CRM líder en el mundo de Salesforce. En esta versión, el SDK móvil amplía nuestra asociación con Apple al ser totalmente compatible con las funciones de Apple iOS 14 y iPadOS 14, añadiendo compatibilidad con varias ventanas y realizando mejoras en la orientación horizontal. Actualice sus aplicaciones a la última versión para aprovechar las capacidades de iOS 14 y iPadOS 14.
Para obtener más información sobre el desarrollo para Salesforce & Apple iOS, revise Cómo empezar a desarrollar aplicaciones para iOS.
Apple iOS 14
A partir de Mobile SDK 8.3, podrás aprovechar todas las novedades de Apple iOS 14. Cree clips de aplicaciones, widgets, realidad aumentada y mucho más. Más información sobre las funciones de Apple iOS 14 para desarrolladores aquí.
Actualizaciones del SO y de las librerías
El SDK base de iOS es ahora el 14 (en lugar del 13) y la versión min es el 13 en lugar del 12.
Apple iPadOS 14
Con el SDK móvil 9.0, puedes aprovechar las nuevas características de Apple iPadOS y, en concreto, de iPadOS 14. Con el último SDK móvil, los desarrolladores pueden aprovechar características como copiar/pegar, multitarea, vista dividida y más cuando se construye para el iPad, todo ello sin hacer cambios adicionales en sus aplicaciones.
Para añadir compatibilidad con múltiples ventanas a las aplicaciones para iPadOS, tendrás que utilizar los nuevos métodos del SDK móvil 9.0. Obtenga más información en la siguiente sección. Más información sobre las características de Apple iPadOS para desarrolladores aquí.
Soporte de múltiples ventanas para iPadOS
Apple añadió soporte para múltiples ventanas en el iPad a partir de iOS 13. Esto significa que una sola aplicación puede tener dos ventanas que se ejecuten una al lado de la otra y que cada ventana haga lo suyo.
En el SDK móvil 9.0, ahora proporcionamos soporte para múltiples ventanas para las aplicaciones de iPadOS. La activación de esta función en su aplicación permite a sus usuarios finales ser más productivos. Por ejemplo, un usuario final puede trabajar en dos registros diferentes simultáneamente y copiar/pegar de una ventana a la otra. Las ventajas de la multitarea son infinitas.
Apple iOS tiene el concepto de escenas, que en última instancia permite la función de múltiples ventanas. Cada escena está asociada a una sesión de escena que tiene un identificador único. Para el resto de esta sección, la función de «ventana» se denominará «escena».
Para implementar esta función en aplicaciones nuevas o existentes del SDK para móviles, los desarrolladores deben utilizar nuevos métodos para gestionar adecuadamente el flujo de inicio de sesión. Mobile SDK se encarga del resto.
Aprenda más sobre las ventanas múltiples para iPadOS aquí.
Inicio de sesión
Para los usuarios finales, el flujo de inicio de sesión es muy sencillo. La aplicación mostrará una pantalla de inicio de sesión si el usuario aún no se ha autenticado en ningún sitio. Una vez que el usuario final completa un inicio de sesión exitoso en una escena, Mobile SDK lo aplica a todas las escenas y activa el bloque de finalización de inicio de sesión de cada escena. El cierre de sesión de una escena también se aplica a todas las escenas. Puede ver un ejemplo de esto en la siguiente imagen.
SFSDKAuthHelper proporciona una forma estándar y recomendada de hacer el flujo de inicio de sesión – y esta clase se ha mejorado con nuevos métodos que toman un parámetro de escena. Los desarrolladores tendrán que utilizar estos nuevos métodos para gestionar adecuadamente múltiples escenas en el flujo de inicio de sesión.
Además, RestAPIExplorer tiene ahora un delegado de escena que utiliza estos métodos.
El siguiente ejemplo muestra dos de los métodos en uso.
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: scene) { self.resetViewState { self.setupRootViewController() } } self.initializeAppViewState() AuthHelper.loginIfRequired(scene) { self.setupRootViewController() } }
IDP
Si estás usando autenticación avanzada con IDP, los delegados de escena tienen un método para abrir URLs similar a un delegado de aplicación, por lo que una aplicación cliente de IDP con múltiples escenas necesitaría usar el delegado de escena y pasar el identificador persistente de la escena. El código siguiente proporciona un ejemplo de esto.
func scene(_ scene: UIScene, openURLContexts URLContexts: Set<UIOpenURLContext>) { if let urlContext = URLContexts.first { UserAccountManager.shared.handleIdentityProviderResponse(from: urlContext.url, with: [UserAccountManager.IDPSceneKey: scene.session.persistentIdentifier]) } }
Nuevos métodos en SFSDKAuthHelper
Como he mencionado, hay cuatro nuevos métodos para el soporte de escenas en SFSDKAuthHelper. Tendrás que utilizarlos para gestionar adecuadamente el flujo de inicio de sesión para múltiples escenas.
- (*void*)loginIfRequired:(UIScene *)scene completion:(*nullable* *void* (^)(*void*))completionBlock;
- Iniciar un flujo de inicio de sesión si el usuario no ha iniciado ya la sesión en Salesforce y si el indicador `shouldAuthenticate` de la configuración de la aplicación está establecido en false.
- (*void*)handleLogout:(UIScene *)scene completion:(*nullable* *void* (^)(*void*))completionBlock;
- Maneja el cambio de usuario o la presentación de una pantalla de inicio de sesión para la escena.
- (*void*)registerBlockForCurrentUserChangeNotifications:(UIScene *)scene completion:(*void* (^)(*void*))completionBlock;
- Activa el flujo de cierre de sesión para la escena dada al recibir una notificación y registra un bloque para que se ejecute al cambiar de usuario.
- (*void*)registerBlockForLogoutNotifications:(UIScene *)scene completion:(*void* (^)(*void*))completionBlock;
- Activa el flujo de cierre de sesión para la escena dada al recibir una notificación.
Para obtener más información sobre cómo se utilizan estos métodos, revisa la Guía para desarrolladores del SDK para móviles.
Habilitar en la configuración del proyecto de XCode
Además de los métodos anteriores, también tendrás que actualizar la configuración del proyecto de tu aplicación en XCode. Una aplicación habilita múltiples escenas a través de los ajustes generales del objetivo de la aplicación en la sección «Deployment Info».Limitaciones conocidas
Hay algunas limitaciones que hay que tener en cuenta a la hora de habilitar múltiples escenas para tu aplicación.
- El código de acceso de la aplicación no es compatible actualmente con las ventanas múltiples, por lo que si una aplicación utiliza el código de acceso, no debería habilitar las ventanas múltiples.
- Una limitación a la simplicidad de inicio de sesión es la imposibilidad de que un usuario inicie sesión en su entorno de caja de arena en una escena y en el entorno de producción en otra escena.
Mejoras en el paisaje para dispositivos iOS
El SDK para dispositivos móviles es compatible con el modo horizontal desde hace un tiempo. Sin embargo, hemos recibido comentarios de los clientes de que los usuarios finales estaban experimentando casos en los que el iPhone o el iPad cambiaban inesperadamente al modo vertical. El inicio de sesión es un ejemplo de cuando el cambio a vertical ocurrió.
Para el SDK móvil 9.0, hemos cambiado nuestros controladores de vista para que sean compatibles con todas las orientaciones de los dispositivos en lugar de estar codificados en modo vertical en determinados casos. También nos hemos asegurado de que el tamaño sea correcto justo después de la rotación.
Todo lo que tienes que hacer aquí es actualizar tu aplicación Mobile SDK a la versión 9.0.
SDK para React Native
Nuestro SDK para React Native tiene unas cuantas actualizaciones impresionantes en esta versión para ayudar a aumentar la productividad de los desarrolladores.
Actualizaciones del SO y de las librerías
React Native está ahora en la versión 0.63.4 (que soluciona algunos problemas de XCode 12)
TypeScript para React Native
TypeScript es un lenguaje de programación de código abierto creado por Microsoft para ayudar a los desarrolladores a construir y mantener aplicaciones JavaScript de nivel empresarial. Es un superconjunto de JavaScript que proporciona principalmente tipado estático opcional, clases e interfaces. TypeScript ha ganado popularidad en los últimos años entre los desarrolladores de frontend por su capacidad para ayudar a detectar errores antes, su consistencia de código y sus capacidades de depuración.
Para más información ver: https://www.typescriptlang.org/
Para el SDK móvil 9.0, los módulos React Native JavaScript fueron reescritos en TypeScript.
Si ya tienes una aplicación existente de Mobile SDK para React Native, tu aplicación no necesita cambiar.
Si estás creando una nueva aplicación, ahora puedes elegir escribir tu aplicación React Native en JavaScript o TypeScript. Las aplicaciones escritas en TypeScript ahora pueden aprovechar las APIs tipificadas para hacer la validación estática de su código. Consulta los nuevos módulos de TypeScript aquí.
Nueva plantilla: ReactNativeTypeScriptTemplate
Mobile SDK 9.0 también ha añadido una nueva plantilla React Native que utiliza TypeScript llamada ReactNativeTypeScriptTemplate. Recomendamos que los desarrolladores de TypeScript generen su aplicación basándose en esa plantilla para empezar, por lo que hemos hecho que sea la plantilla por defecto.
Para construir una nueva aplicación basada en esa plantilla, haz lo siguiente:
forcereact create
Plantillas React Native modernizadas
Siempre estamos buscando formas de modernizar el SDK de Mobile e integrar las últimas tecnologías. Además de añadir TypeScript a nuestro SDK de React Native, también hemos modernizado nuestras plantillas de React Native.
A partir de Mobile SDK 9.0, las aplicaciones generadas con forcereact enlazarán automáticamente sus dependencias. Cuando añada una dependencia, sólo tiene que añadirla a su package.json – ya no necesita cambiar el podfile. Las librerías nativas para su dependencia se enlazarán automáticamente en su proyecto.
Actualizaciones generales
Identificación externa para la sincronización padre/hijo
En el SDK móvil 8.0, hemos mejorado la sincronización de un solo registro y de lotes para permitir la sincronización por identificación externa (upserts)
Los upserts son útiles para evitar la duplicación. Si la red se desconecta mientras se realiza una sincronización, un cliente puede no saber si su última petición se ha realizado o no. Reejecutar la sincronización sin usar upsert creará un duplicado si la petición de creación original ha sido realmente recibida por el servidor. Con un upsert, la solicitud reproducida no hará nada (hará una actualización que establece los mismos valores para los campos).
Hemos recibido información de nuestra comunidad de desarrolladores de que algunos de ustedes estaban teniendo problemas con la creación de registros duplicados durante la sincronización padre / hijo. Para ayudar a aliviar este problema y eliminar la necesidad de que los desarrolladores codifiquen su propia solución, el SDK para móviles ha añadido la misma capacidad de ID externo a la sincronización padre/hijo para la versión 9.0.
Cuando se proporcione un nombre de campo de ID externo en la información de padres o hijos, y un registro de padres o hijos creado localmente tenga un valor para ese campo, el motor de Mobile Sync realizará un upsert en lugar de una creación contra el servidor.
Para que este ID externo haga un upsert, debe hacer lo siguiente:
- Declarativamente: añade campos personalizados de tipo ID externo a los objetos relevantes de tu org.
- Aplicación móvil: elija entre gestionar la sincronización del ID externo a través de un archivo de configuración de sincronización o de forma programática.
Declarativamente
En su org de Salesforce, cree un campo personalizado en el objeto para la información del padre o del hijo. El campo puede tener cualquier nombre, e incluso puede ser un campo existente. El nombre del campo que especifique aquí tendrá que coincidir con el que ponga en la configuración de sincronización o utilice de forma programada.
En el cliente móvil, en la información de padres e hijos, deben especificar: externalIdFieldName: «the-actual-custom-field-name».
En el ejemplo de configuración de sincronización de abajo, el nombre del campo es:
- ExternalIdX para el padre.
- ExternalIdY para los hijos.
{ "syncName": "parentChildrenSyncUp", "syncType": "syncUp", "soupName": "cuentas", "target":{ "iOSImpl": "SFParentChildrenSyncUpTarget", "androidImpl": "com.salesforce.androidsdk.mobilesync.target.ParentChildrenSyncUpTarget", "parent":{ "idFieldName": "IdX", "externalIdFieldName": "ExternalIdX", "sobjectType": "Cuenta", "modificationDateFieldName": "LastModifiedDateX", "soupName": "cuentas" }, "createFieldlist":[ "IdX", "Name", "Descripción" ], "updateFieldlist":[ "Nombre", "Descripción" ], "children":{ "parentIdFieldName": "AccountId", "idFieldName": "IdY", "externalIdFieldName": "ExternalIdY", "sobjectType": "Contacto", "modificationDateFieldName": "LastModifiedDateY", "soupName": "contactos", "sobjectTypePlural": "Contactos" }, "childrenCreateFieldlist":[ "LastName", "AccountId" ], "childrenUpdateFieldlist":[ "FirstName", "AccountId" ], "relationshipType": "MASTER_DETAIL" }, "options":{ "fieldlist":[ ], "mergeMode": "LEAVE_IF_CHANGED" } }
Programáticamente
En iOS, crea tu parent info y/o children info pasando un externalIdFieldName no nulo a los nuevos métodos de fábrica.
// Desde SFParentInfo.h + (SFParentInfo *)newWithSObjectType:(NSString *)sobjectType soupName:(NSString *)soupName idFieldName:(NSString *)idFieldName modificationDateFieldName:(NSString *)modificationDateFieldName externalIdFieldName:(NSString * __nullable) externalIdFieldName; // De SFChildrenInfo.h + (SFChildrenInfo *)newWithSObjectType:(NSString *)sobjectType sobjectTypePlural:(NSString *)sobjectTypePlural soupName:(NSString *)soupName parentIdFieldName:(NSString *)parentIdFieldName idFieldName:(NSString *)idFieldName modificationDateFieldName:(NSString *)modificationDateFieldName externalIdFieldName:(NSString * __nullable)externalIdFieldName;
En Android, crea tu info padre y/o info hijo pasando un externalIdFieldName no nulo a los nuevos constructores.
// De ParentInfo.java
public
ParentInfo
(
String
sobjectType
,
String
soupName
,
String
idFieldName
,
String
modificationDateFieldName
,
String
externalIdFieldName
)
// De ChildrenInfo.java
public ChildrenInfo(String sobjectType, String sobjectTypePlural, String soupName, String parentIdFieldName, String idFieldName, String modificationDateFieldName, String externalIdFieldName)
Actualizaciones del SO y de la biblioteca
Además de todas las nuevas y geniales características están las actualizaciones del SO y de las bibliotecas que se esperan en una nueva versión mayor del SDK para móviles:
- SDK para iOS
- El SDK base de iOS es ahora el 14 (en lugar del 13) y la versión min es el 13 en lugar del 12
- SDK para Android
- SDK para Android
- La API de destino de Android es la 30 (en lugar de la 29)
- SDK para Android
- SDK para Hybrid
- Cordova iOS es 6.1.1 (en lugar de 5.1.1) que utiliza WKWebView y puede consumir dependencias de cocoapod de forma nativa (antes teníamos que utilizar plugins de terceros), Cordova Android es 9.0.0 (en lugar de 8.1.0) y Cordova CLI es 10.0.0 (en lugar de 8.1.2)
- Servicio de desarrollo de software (SDK) para Redova
- SDK para React Native
- React Native está ahora en la versión 0.63.4 (que soluciona algunos problemas de XCode 12)
- Sistema de desarrollo de software (SDK) para React Native
- General
- sqlcipher es 4.4.2 (en lugar de 4.4.0)
- la versión mínima de cocoapod es 1.8 (en lugar de 1.7.5)
Conclusión
El SDK móvil 9.0 tiene algo para todos. Añade la potencia de la multitarea a tus aplicaciones de iPad existentes. Aproveche los identificadores externos para tener la seguridad de que los usuarios no verán registros duplicados, incluso si la sincronización se reinicia para la sincronización padre / hijo. Aprovecha la potente depuración y detecta antes los errores con TypeScript para React Native. Aprovecha estas nuevas características para ti y para los usuarios finales hoy mismo actualizando tus aplicaciones móviles a Mobile SDK 9.0.
Ver Mobile SDK para iOS y Mobile SDK para Android.
Otros recursos
Salesforce proporciona herramientas móviles para ayudar a verificar que sus componentes web Lightning funcionan en todas partes, especialmente en los móviles. Consulte la lista de reproducción Herramientas móviles de Salesforce en el canal de YouTube de los desarrolladores de Salesforce.
Sobre los autores
Sue Berry es directora de gestión de productos en Salesforce, donde se centra en Salesforce Mobile. Actualmente está trabajando en el SDK de Salesforce Mobile y en las nuevas herramientas de Mobile para la depuración de LWC. Lleva más de 15 años creando herramientas para desarrolladores.
Brianna Birman es ingeniera principal del SDK de Salesforce Mobile y ha trabajado en los productos de Salesforce Mobile durante los últimos siete años.
Wolfgang Mathurin es arquitecto en el equipo de Salesforce Mobile Platform y ha trabajado en los productos de Salesforce Mobile durante los últimos diez años. Lleva más de 20 años dedicado al desarrollo.
Estoy muy emocionado de anunciar que la nueva versión del SDK de Salesforce Mobile ya está disponible. Mobile SDK 9.0 se centra en la productividad del desarrollador y del usuario final. Independientemente de si está creando aplicaciones para iOS, Android o aplicaciones multiplataforma, a usted y a sus usuarios finales les encantarán las mejoras de esta versión. Sus usuarios finales multitarea saltarán […]
El post ¿Qué hay de nuevo en Mobile SDK 9.0? apareció primero en Blog de desarrolladores de Salesforce.
Esta es una traducción realizada por EGA Futura, y este es el link a la publicación original: https://developer.salesforce.com/blogs/2021/02/whats-new-in-mobile-sdk-9-0.html