SDK do iOS - Opções avançadas


Interface JavaScript para aplicativos híbridos

Visão geral

Habilite a funcionalidade do SDK do Singular a partir de código JavaScript em aplicativos híbridos baseados em WKWebView usando a interface JavaScript.

Métodos compatíveis:

  • setCustomUserId: Define um identificador de usuário personalizado
  • unsetCustomUserId: Remove o identificador de usuário personalizado
  • event: Rastreia eventos com ou sem atributos
  • revenue: Rastreia receita

Configuração da integração com WKWebView

Configure a interface JavaScript no WKNavigationDelegate do seu view controller para habilitar os métodos do SDK do Singular a partir do JavaScript.

Observação: A partir do iOS 8.0+, a Apple recomenda usar WKWebView para adicionar conteúdo web ao seu aplicativo. Não use UIWebView ou WebView . Consulte a documentação do WKWebView da Apple para obter mais informações.

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 configuração:

  • Inclua o arquivo Singular.js no bundle do seu aplicativo
  • Defina seu view controller como o delegado de navegação do WKWebView
  • Implemente o método delegado decidePolicyForNavigationAction
  • Chame processJSRequestWK para processar as solicitações do SDK do Singular

Uso de JavaScript

Chame os métodos do Singular a partir de código JavaScript em execução no seu WKWebView.

Rastrear 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
    })
);

Rastrear receita

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

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

Gerenciar ID de usuário personalizado

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

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

Notas da API JavaScript:

  • Todos os métodos são chamados no objeto global Singular
  • Os atributos do evento devem ser passados como objetos serializados em JSON
  • Os nomes dos métodos usam camelCase (por exemplo, setCustomUserId )
  • A interface conecta automaticamente as chamadas do JavaScript aos métodos nativos do SDK