iOS
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.
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
yparam String port
son 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 deSFSafariViewController
e impedir que el usuario salga de la aplicación. Al devolvertrue
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 devuelvetrue
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:
- 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:
- Para integrar mediante CocoaPods es necesario agregar el pod
Prisma
al Podfile tal cual se observa debajo. Opcionalmente, se puede hacer lo mismo usandoJumio
:
# 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>
En esta página