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.