iOS

Última actualización:

Prisma Campaigns provee una librería que incluye un conjunto de controles para realizar la integración con iOS utilizando Swift 4. La sección Referencia de librería de este documento explica en más detalle cómo utilizar este recurso dentro de un proyecto con Xcode.

Descargar framework

Descargar Podspec

Primeros pasos

La librería cliente de Prisma requiere los siguientes parámetros de inicialización:

    load(String server, String port, String appToken, String customer, String protocol)

donde

  • param String server y param String portson el nombre del servidor donde está instalado el servicio de Prisma y el puerto de escucha.
  • param String appToken: token de acceso para la aplicación actual.
  • param String customer: identificador de cliente (si está disponible) o una cadena vacía ("") en caso contrario.
  • param String protocol: protocolo de conexión (https por defecto).

Para comenzar, es necesario importar el SDK Prisma e invocar el método estático Client.load() solamente una vez, preferentemente en la clase AppDelegate cuando la aplicación ha finalizado de cargar:

import Prisma

@UIApplicationMain
class AppDelegate: UIResponder, UIApplicationDelegate {
    var window: UIWindow?

    func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplicationLaunchOptionsKey: Any]?) -> Bool {
        Client.load(server: "localhost", port: "8080", appToken: "22dae0ad-a6a8-4767-80bc-b29098147813", customer: "1234")

        return true
    }

Debido a que la clase Client es un singleton, devolverá la misma instancia del objeto siempre que la aplicación la utilice a través del atributo estático shared como `Client.shared!``.

Banners embebidos

Para integrar un banner en una vista iOS y cargar contenido dinámico, se puede usar el control Placeholder como se explica a continuación.

Primero, es necesario agregar un control Horizontal Stack View a la vista:

Como próximo paso, se debe enlazar el control con la clase Placeholder provista por el framework Prisma:

y renombrar el placeholder de acuerdo a la configuración de campaña:

Luego, es preciso crear un Outlet para Placeholder:

Vale la pena aclarar que la variable se deberá nombrar de tal forma que permita referenciar el placeholder durante la sincronización de la página apropiadamente.

Finalmente, es necesario sincronizar campañas al momento de crear la vista.

import Prisma

class ViewController: UIViewController {

    @IBOutlet weak var MainPH: Placeholder!

    override func viewDidLoad() {
        super.viewDidLoad()

        Client.shared!.syncView(viewName: "Main", placeholders: [MainPH])
    }

En este caso, el parámetro placeholders deberá incluir la lista de placeholders definidos como outlets, mientras que viewName y MainPH representan los correspondientes a la vista y al outlet.

Banners personalizados

Es posible crear banners desde el código de la aplicación, independiente del SDK. Para esto, se puede utilizar el parámetro onSynced del método syncView. En este escenario, el callback OnSynced se invoca al solicitar los banners para la sincronización:

Client.shared!.syncView(viewName: "ViewControllerName", placeholders: [MainPH], onSynced: {(result: Dictionary<String, PlaceholderContent>) -> Void in
    if result["MainGeneral"] != nil {
        let content:PlaceholderContent = result["MainGeneral"]!
        let size = content.banners.count
        print("Total banners \(size) found for placeholder")
    }
})

Para recuperar las vistas desde el contenido del placeholder:

let banner = content.banners[0]
let v:UIView = banner.getView()

o el contenido de un banner HTML:

let htmlBanner = banner as! HtmlBannerView
let htmlContent:String = htmlBanner.getHTMLContent()

Para iniciar el funnel desde el banner:

let funnel = banner.getFunnel()
funnel.show()

o desestimarlo:

let funnel = banner.getFunnel()
funnel.dismiss()

Protocolos de redirección y para indicar “No me interesa”

Prisma Campaigns provee puntos de extensibilidad a través de los siguientes protocolos:

  • PrismaRedirectHandler.onRedirect se invoca al realizar un paso de redirección en el funnel. Por ejemplo, se puede emplear este recurso para dirigirse a una URL a través de SFSafariViewController e impedir que el usuario salga de la aplicación. Al devolver true se indica a Prisma que no ejecute la acción por defecto (seguir el link en Safari).

  • PrismaDismissHandler.onDismissed entra en acción cuando alguien desestima una campaña desde un banner, y devuelve true para indicar que Prisma no debe sincronizar la vista.

import Prisma

@UIApplicationMain
class AppDelegate: UIResponder, UIApplicationDelegate, PrismaRedirectHandler, PrismaDismissHandler {
    var window: UIWindow?

    func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplicationLaunchOptionsKey: Any]?) -> Bool {
        Client.load(server: "localhost", port: "8080", appToken: "22dae0ad-a6a8-4767-80bc-b29098147813", customer: "1234", redirectHandler: self, dismissHandler: self)

        return true
    }

    func onRedirect(url: URL) -> Bool {
        return true;
    }

    func onDismissed() -> Bool {
        return true;
    }
}

Referencia de librería

Existen dos métodos disponibles para integrar el framework Prisma en un proyecto:

  1. La integración manual requiere copiar el archivo Prisma.framework en el directorio del proyecto y luego agregar la referencia como se ilustra en las siguientes imágenes:

  1. Para integrar mediante CocoaPods es necesario agregar el pod Prisma al Podfile tal cual se observa debajo. Opcionalmente, se puede hacer lo mismo usando Jumio:
# Prisma requires iOS 9.0; Jumio requires iOS 10.0
platform :ios, '9.0'

target 'MyProject' do
  pod 'Prisma', :podspec => 'https://s3.sa-east-1.amazonaws.com/prisma.sdk/Prisma_Swift5_1.2.2.podspec'
  # pod 'JumioMobileSDK/Netverify', '2.14.0'
end

Finalmente, se debe instalar el pod en el proyecto mediante pod install.

Permisos de conectividad

Si se precisa emplear http, habrá que agregar la siguiente excepción en el archivo Info.plist para permitir conexiones inseguras de manera explícita, reemplazando your-server-address con la dirección IP o el nombre del servidor de Prisma Campaigns que se esté utilizando:

<key>NSAppTransportSecurity</key>
<dict>
  <key>NSAllowsArbitraryLoads</key>
  <true/>
  <key>NSExceptionDomains</key>
  <dict>
    <key>your-server-address</key>
    <dict>
      <key>NSExceptionAllowsInsecureHTTPLoads</key>
      <true/>
      <key>NSIncludesSubdomains</key>
      <true/>
    </dict>
  </dict>
</dict>