st_open_browser=true
en la WebView, la URL se lanza en el navegador.sendDismissedClick
para enviar clics cuando la inapp es descartada.PrivacyInfo.xcprivacy
y XCFramework.setCurrencyCode
. currencyCode
se selecciona en el panel de control de EMMA. Todos los precios enviados en la orden no serán convertidos por EMMA a una moneda específica, serán interpretados como un valor unitario.currencyCode
distinto de EUR en la solicitud trackOrder
.updatePostbackConversionValue
con el parámetro lockWindow
.closeStrip
para darle la libertad de cerrar el Strip cuando se quiera.iAd.framework
. Sólo para iOS < 14.3, a partir de la versión 4.10.2 se utiliza AdService.framework
.://startview/close
.AdServices.framework
. En iOS 14.3 a 14.8.1 podría producirse un cuelgue.rootViewController
y errores menores.customerId
en compras añadidas en la versión 4.9.0.EMMAEventRequest
como opcional al instanciar.+(void)startSession:(NSString*)appKey withOptions:(NSDictionary*)launchOptions __attribute__((deprecated("Use startSession without options")));
.+(void) startPushSystem: (NSDictionary*) launchOptions __attribute__((deprecated("Use startPushSystem without parameters")));
.+(void)startOrder:(NSString*)orderId customerId:(NSString*)customerId totalPrice:(float)totalPrice coupon:(NSString*)coupon;
.+(void)registerUser:(NSString*)userId forMail: (NSString*)mail;
y sustituidos por opcionales.+(void)loginUser:(NSString*)userId forMail:(NSString*)mail;
y sustituidos por opcionales.+(void)addProduct:(NSString*)productId name:(NSString*)name qty:(float)qty price:(float)price;
.+(void)addRateAlertForAppStoreURL:(NSString*)appStoreURL;
.+(void) setRateAlertFreq: (int) hours;
.+(void) setRateAlertTitle: (NSString*) title;
.+(void) setRateAlertMessage: (NSString*) message;
.+(void) setRateAlertCancelButton: (NSString*)>cancelButtonText;
.+(void) setRateAlertRateItButton: (NSString*) rateItButtonText;
.+(void) setRateAlertLaterButton: (NSString*) laterButtonText;
.+(void) setRateAlertShowAfterUpdate:(BOOL) showAlert;
.EMMA.add(inAppDelegate: self)
por EMMA.addInAppDelegate(delegate: self)
.EMMA.trackEvent(eventRequest)
por EMMA.trackEvent(request: eventRequest)
.EMMA.handleLink(url)
por EMMA.handleLink(url: url)
.EMMA.handlePush(userInfo)
por EMMA.handleLink(userInfo: userInfo)
.EMMA.openNativeAd(nativeAdCampaignId: campaignId)
por EMMA.opeNativeAd(campaignId: campaignId)
. if #available(iOS 14.0, *) {
EMMA.requestTrackingWithIdfa()
}
EMMA.setCustomerId("198284343")
En la versión 4.6.2 o superior del SDK se ha añadido el código de extensión dentro de un método SDK. Reemplaza todo el contenido del archivo con el código de abajo:
import UIKit
import UserNotifications
import EMMA_iOS
class NotificationService: UNNotificationServiceExtension {
var contentHandler: ((UNNotificationContent) -> Void)?
var bestAttemptContent: UNMutableNotificationContent?
override func didReceive(_ request: UNNotificationRequest, withContentHandler contentHandler: @escaping (UNNotificationContent) -> Void) {
self.contentHandler = contentHandler
bestAttemptContent = (request.content.mutableCopy() as? UNMutableNotificationContent)
if let bestAttemptContent = bestAttemptContent {
EMMA.didReceive(request, with: bestAttemptContent) { (content) in
contentHandler(bestAttemptContent)
}
}
}
override func serviceExtensionTimeWillExpire() {
if let contentHandler = contentHandler, let bestAttemptContent = bestAttemptContent {
contentHandler(bestAttemptContent)
}
}
}
Para añadir el SDK a la extensión es necesario modificar el archivo Podfile añadiendo el pod eMMa al objetivo de la extensión:
target 'ProjectName' do
pod 'eMMa', '~> 4.6.2'
end
target 'EMMANotificationServiceExtension' do
pod 'eMMa', '~> 4.6.2'
end
Se ha eliminado del delegado EMMAPushDelegate los métodos pushMessage y pushTag y se ha añadido el método onPushOpen. A este método se le pasa la campaña de push que se ha abierto en ese momento. Esta campaña tiene atributos como tag o message, que reemplazarían los métodos eliminados.
-(void)onPushOpen:(EMMAPush*)push
Las versiones previas que se actualicen a la 4.5 deberán realizar los siguientes cambios.
Los siguiente métodos que quedaron deprecados en la versión 4.4 se han eliminado en la 4.5:
+(void) trackEvent:(NSString*)token
+(void) trackEvent:(NSString *)token withAttributes: (NSDictionary*) attributtes
+(void) trackEventWithRequest:(EMMAEventRequest *) request
Ambos se remplazan por el siguiente método:
+(void) trackEvent:(EMMAEventRequest *) request
Ejemplo de uso:
let eventRequest = EMMAEventRequest.init(token: "<token>")
// Optional: You can add your custom event attributes
eventRequest?.attributes = ["test_attribute":"test_value"]
// Optional. You can capture emma requests with this delegate
eventRequest?.requestDelegate = self
// Optional. Append your request ID to capture it later
eventRequest?.customId = "MY_EVENT_REQUEST"
EMMA.trackEvent(eventRequest)
Los siguiente métodos que quedaron deprecados en la 4.4 se han eliminado en la 4.5:
+(void)inAppMessage:(InAppType)type andRequest:(EMMAInAppRequest*) request
+(void)inAppMessage:(InAppType)type andRequest:(EMMAInAppRequest*) request withDelegate:(id) delegate
Ambos se remplazan por los siguientes métodos:
+(void)inAppMessage:(EMMAInAppRequest*) request
+(void)inAppMessage:(EMMAInAppRequest*) request withDelegate (id) delegate
Ejemplo de uso:
import UIKit
import EMMA_iOS
class InAppExampleViewController: UIViewController, EMMAInAppMessageDelegate {
override func viewDidLoad() {
super.viewDidLoad()
getStartView()
// You can add as many request delegates as you want
EMMA.add(inAppDelegate: self)
//Check if any adball is showing
if EMMA.isAdBallShowing() {
print("There is an adball floating arround")
}
}
// MARK: - EMMA InApp Messages Requests
func getStartView() {
let startViewinAppRequest = EMMAInAppRequest(type: .Startview)
// Optional. You can filter by label
startViewinAppRequest?.label = "<LABEL>"
/*
By default Startview presents on UIApplication.shared.delegate?.window?.rootViewController
You can customize this behavior uncommenting following line
*/
//EMMA.setRootViewController(UIViewController!)
EMMA.inAppMessage(startViewinAppRequest)
}
func getBanner() {
let bannerRequest = EMMAInAppRequest(type: .Banner)
EMMA.inAppMessage(bannerRequest)
}
func getAdBall() {
let adballRequest = EMMAInAppRequest(type: .Adball)
EMMA.inAppMessage(adballRequest)
}
func getDynamicTabBar() {
// You must define your UITabBarController
// Uncomment following line!
// EMMA.setPromoTabBarController(UITabBarController!)
// Sets default promo tab index if not defined in EMMA Platform
EMMA.setPromoTabBarIndex(5)
// Sets a tab bar item to be shown if not defined in EMMA Platform
// EMMA.setPromoTabBarItem(UITabBarItem!)
let dynamicTabBarRequest = EMMAInAppRequest(type: .PromoTab)
EMMA.inAppMessage(dynamicTabBarRequest)
}
func getStrip() {
let stripRequest = EMMAInAppRequest(type: .Strip)
EMMA.inAppMessage(stripRequest)
}
// MARK: - EMMA InApp Message Delegate
func onShown(_ campaign: EMMACampaign!) {
guard let c = campaign else {
print("Error getting campaign info")
return
}
print("Shown campaign \(c)")
}
func onHide(_ campaign: EMMACampaign!) {
guard let c = campaign else {
print("Error getting campaign info")
return
}
print("Hide campaign \(c)")
}
func onClose(_ campaign: EMMACampaign!) {
guard let c = campaign else {
print("Error getting campaign info")
return
}
print("Closed campaign \(c)")
}
}
Si el mensaje es para solicitar un Native Ad es obligatorio usar EMMANativeAdRequest (subclase de EMMAInAppRequest) para añadir el templateId y su delegado específico.
En esta nueva versión se han realizado mejoras en la gestión de notificaciones push.
Quedan deprecados los siguientes métodos:
+(void) startPushSystem: (NSDictionary*) launchOptions
+(void) startSession:(NSString*)appKey withOptions:(NSDictionary*)launchOptions
Debido a unas mejoras en el SDK simplemente añadiendo la disposición de los delegados de Push no hace falta notificar las launchOptions
al SDK.