SDK de iOS - Opciones avanzadas


Interfaz JavaScript para aplicaciones híbridas

Descripción general

Habilita la funcionalidad del SDK de Singular desde código JavaScript en aplicaciones híbridas basadas en WKWebView usando la interfaz JavaScript.

Métodos compatibles:

  • setCustomUserId: Establece un identificador de usuario personalizado
  • unsetCustomUserId: Elimina el identificador de usuario personalizado
  • event: Registra eventos con o sin atributos
  • revenue: Registra ingresos

Configuración de la integración con WKWebView

Configura la interfaz JavaScript en el WKNavigationDelegate de tu controlador de vista para habilitar los métodos del SDK de Singular desde JavaScript.

Nota: A partir de iOS 8.0+, Apple recomienda usar WKWebView para agregar contenido web a tu app. No uses UIWebView ni WebView . Consulta la documentación de WKWebView de Apple para obtener más información.

Swift Objective-C
import UIKit
import WebKit

class ViewController: UIViewController {

    var webView: WKWebView!

    override func viewDidLoad() {
        super.viewDidLoad()

        // Create WKWebView
        let webConfiguration = WKWebViewConfiguration()
        webView = WKWebView(frame: .zero, configuration: webConfiguration)
        webView.navigationDelegate = self
        view.addSubview(webView)

        // Load web content
        if let url = Bundle.main.url(forResource: "index", withExtension: "html") {
            webView.loadFileURL(url, allowingReadAccessTo: url)
        }
    }
}

extension ViewController: WKNavigationDelegate {

    func webView(_ webView: WKWebView,
                decidePolicyFor navigationAction: WKNavigationAction,
                decisionHandler: @escaping (WKNavigationActionPolicy) -> Void) {

        // Check if Singular JavaScript interface exists
        let js = "typeof(Singular)"
        webView.evaluateJavaScript(js) { (result, error) -> Void in
            if let resultString = result as? String {
                if resultString == "undefined" {
                    // Load Singular JavaScript interface
                    do {
                        if let path = Bundle.main.path(forResource: "Singular", ofType: "js") {
                            let contents = try String(contentsOfFile: path)
                            webView.evaluateJavaScript(contents, completionHandler: nil)
                        }
                    } catch {
                        print("Error loading Singular.js: \(error)")
                    }
                } else {
                    // Process Singular SDK request
                    Singular.processJSRequestWK(webView, withURL: navigationAction.request)
                }
            }
        }

        // Allow navigation
        decisionHandler(.allow)
    }
}

Requisitos de configuración:

  • Incluye el archivo Singular.js en el bundle de tu aplicación
  • Establece tu controlador de vista como el delegado de navegación del WKWebView
  • Implementa el método delegado decidePolicyForNavigationAction
  • Llama a processJSRequestWK para procesar las solicitudes del SDK de Singular

Uso de JavaScript

Llama a los métodos de Singular desde código JavaScript que se ejecuta en tu WKWebView.

Registrar eventos

JavaScript
// Simple event without attributes
Singular.event('level_completed');

// Event with attributes (pass as JSON string)
Singular.event('purchase_attempt',
    JSON.stringify({
        "item_name": "sword",
        "item_category": "weapons",
        "item_price": 9.99
    })
);

Registrar ingresos

JavaScript
// Track revenue in USD
Singular.revenue('USD', 9.99);

// Track revenue in other currencies
Singular.revenue('EUR', 8.50);

Administrar el ID de usuario personalizado

JavaScript
// Set custom user ID
Singular.setCustomUserId('user_12345');

// Remove custom user ID
Singular.unsetCustomUserId();

Notas de la API JavaScript:

  • Todos los métodos se llaman sobre el objeto global Singular
  • Los atributos del evento deben pasarse como objetos serializados en JSON
  • Los nombres de los métodos usan camelCase (por ejemplo, setCustomUserId )
  • La interfaz conecta automáticamente las llamadas de JavaScript con los métodos nativos del SDK