Integración Nästa Coach iOS

General

Utilizarás un WKWebView para mostrar el componente. Asegurate de tener WebKit.framework agregado al proyecto.

  1. Abre el proyecto en Xcode, en la navegación del proyecto (Project Navigator) a la izquierda de Xcode, haz clic en el nombre del proyecto para acceder a la configuración del mismo.
  2. En la configuración, en el panel izquierdo, selecciona el target al que agregarás el framework WebKit.
  3. Ve a la pestaña "General" y baja hasta encontrar la sección "Frameworks, Libraries, and Embedded Content".
  4. Utiliza el botón de "+" al final de esta sección para desplegar una lista de frameworks disponibles. Busca "WebKit" y el framework WebKit debería aparecer en esta. Selecciona WebKit.framework y haz clic en el botón de Agregar (Add) para incluirlo en el proyecto.

Una vez mostrado, el WKWebView necesitara acceder a la cámara, asegúrate de configurar la posibilidad de pedir estos permisos en el archivo Info.plist:

  1. Abre el proyecto en Xcode y selecciona el archivo Info.plist file en la navegación del proyecto (Project Navigator).
  2. Agrega una nueva entrada haciendo clic derecho en cualquier otra entrada existende o haciendo clic en el botón "+" que aparece cuando colocas el ratón sobre las entradas existentes.
  3. Introduce la clave (key) como: NSCameraUsageDescription.
  4. Introduce como valor una cadena que describa la razón por la que acceder a la cámara es necesario en la aplicación, por ejemplo, "Esta aplicación requiere acceso a la cámara para hacer fotografías".

Swift

  1. Agregar un WKWebView al storyboard: Abre el storyboard de tu proyecto, arrastra un WKWebView desde la biblioteca de objetos a tu vista de controlador y conecta el WKWebView a tu ViewController creando un IBOutlet

  2. Configurar el WKWebView en el ViewController: Abre el archivo de tu ViewController y configura el WKWebView para cargar el HTML.

    import UIKit
    import WebKit
    
    class ViewController: UIViewController {
    
        @IBOutlet weak var webView: WKWebView!
    
        override func viewDidLoad() {
            super.viewDidLoad()
    
            let token = "<your-token>"
            let clientId = "<your-client-id>"
            let mainColor = "#4b858e" /* Puedes cambiar los valores por defecto */
            let mainActive = "#2c4e54"
            let mainDisabled = "#9db8bc"
            let secondary = "#a3d5cd"
            let secondaryDark = "#9ac6bf"
            let secondaryMiddle = "#c8e7e2"
            let secondaryLight = "#e8f6f3"
            let secondarySuperDark = "#7baaa3"
            let font = "'Montserrat', sans-serif"
            let language = "" // Si se deja vacío, se utilizará el lenguaje del sistema. Las opciones son: "es" para español, "en" para inglés y "va" para valenciano
            let maxWidth = "420px"
            let height = "500px"
    
            let htmlData = """
                <html>
                  <head>
                   <style>
                     :root {
                       --nasta-main: \(mainColor);
                       --nasta-mainActive: \(mainActive);
                       --nasta-mainDisabled: \(mainDisabled);
                       --nasta-secondary: \(secondary);
                       --nasta-secondaryDark: \(secondaryDark);
                       --nasta-secondaryMiddle: \(secondaryMiddle);
                       --nasta-secondaryLight: \(secondaryLight);
                       --nasta-secondarySuperDark: \(secondarySuperDark);
                       --nasta-font: \(font);
                       --nasta-microMaxWidth: \(maxWidth);
                       --nasta-microHeight: \(height);
                     }
                   </style>
                 </head>
                 <body>
                 <recycling-app
                   client-id="\(clientId)"
                   token="\(token)"
                   language="\(language)"
                 ></recycling-app>
                 <script src="https://recycling.nastaeco.com/recycling.umd.js"></script>
               </body>
             </html>
            """
    
            let baseURL = URL(string: "https://www.recycling.nastaeco.com")
            webView.loadHTMLString(htmlData, baseURL: baseURL)
        }
    }
    

Recuerda cambiar los valores de your-token por tu token y your-client-id por tu client id.

Objective-C

  1. Agregar un WKWebView al storyboard: Abre el storyboard de tu proyecto, arrastra un WKWebView desde la biblioteca de objetos a tu vista de controlador y conecta el WKWebView a tu ViewController creando un IBOutlet

  2. Configurar el WKWebView en el ViewController: Abre el archivo de tu ViewController y configura el WKWebView para cargar el HTML.

    #import "ViewController.h"
    @import WebKit;
    
    @interface ViewController ()
    @property (weak, nonatomic) IBOutlet WKWebView *webView;
    @end
    
    @implementation ViewController
    
    - (void)viewDidLoad {
        [super viewDidLoad];
    
        NSString *token = @"<your-token>";
        NSString *clientId = @"<your-client-id>";
        NSString *mainColor = @"#4b858e"; /* Puedes cambiar los valores por defecto */
        NSString *mainActive = @"#2c4e54";
        NSString *mainDisabled = @"#9db8bc";
        NSString *secondary = @"#a3d5cd";
        NSString *secondaryDark = @"#9ac6bf";
        NSString *secondaryMiddle = @"#c8e7e2";
        NSString *secondaryLight = @"#e8f6f3";
        NSString *secondarySuperDark = @"#7baaa3";
        NSString *font = @"'Montserrat', sans-serif";
        NSString *language = @""; // Si se deja vacío, se utilizará el lenguaje del sistema. Las opciones son: "es" para español, "en" para inglés y "va" para valenciano
        NSString *maxWidth = @"420px";
        NSString *height = @"500px";
    
        NSString *htmlData = [NSString stringWithFormat:@"<html><head><style>:root { --nasta-main: %@; --nasta-mainActive: %@; --nasta-mainDisabled: %@; --nasta-secondary: %@; --nasta-secondaryDark: %@; --nasta-secondaryMiddle: %@; --nasta-secondaryLight: %@; --nasta-secondarySuperDark: %@; --nasta-font: %@; --nasta-microMaxWidth: %@; --nasta-microHeight: %@; }</style></head><body><recycling-app client-id='%@' token='%@' language='%@'></recycling-app><script src='https://recycling.nastaeco.com/recycling.umd.js'></script></body></html>", mainColor, mainActive, mainDisabled, secondary, secondaryDark, secondaryMiddle, secondaryLight, secondarySuperDark, font, maxWidth, height, clientId, token, language];
    
        NSURL *baseURL = [NSURL URLWithString:@"https://www.recycling.nastaeco.com"];
        [self.webView loadHTMLString:htmlData baseURL:baseURL];
    }
    
    @end
    

Recuerda cambiar los valores de your-token por tu token y your-client-id por tu client id.

Resolución de problemas

Algunas versiones de iOS requieren que la propiedad allowsInlineMediaPlayback se agregue a la configuración del WKWebView para evitar que la imagen de la cámara ocupe toda la pantalla y no se pueda capturar la imagen correctamente.

Swift

// Inicializar un objeto WKWebViewConfiguration.
let webViewConfiguration = WKWebViewConfiguration()
// Permitir que videos en el HTML con el atributo "playsinline" se visualicen dentro del elemento.
webViewConfiguration.allowsInlineMediaPlayback = true
// Inicializar el WkWebView con el objeto WKWebViewConfiguration.
webView = WKWebView(frame: view.frame, configuration: webViewConfiguration)
view.addSubview(webView)

Objective-C

// Inicializar un objeto WKWebViewConfiguration.
WKWebViewConfiguration *webViewConfiguration = [[WKWebViewConfiguration alloc] init];
// Permitir que videos en el HTML con el atributo "playsinline" se visualicen dentro del elemento.
webViewConfiguration.allowsInlineMediaPlayback = YES;
// Inicializar el WkWebView con el objeto WKWebViewConfiguration.
self.webView = [[WKWebView alloc] initWithFrame:self.view.frame configuration:webViewConfiguration];
[self.view addSubview:self.webView];