iOS SDK - 詳細オプション


ハイブリッドアプリ向け JavaScript インターフェース

概要

JavaScript インターフェースを使用して、WKWebView ベースのハイブリッドアプリの JavaScript コードから Singular SDK 機能を有効にします。

サポートされているメソッド:

  • setCustomUserId: カスタムユーザー識別子を設定
  • unsetCustomUserId: カスタムユーザー識別子を削除
  • event: 属性の有無にかかわらずイベントを追跡
  • revenue: 収益を追跡

WKWebView 統合のセットアップ

ビューコントローラーの WKNavigationDelegate で JavaScript インターフェースを構成して、JavaScript から Singular SDK メソッドを使用できるようにします。

注: iOS 8.0 以降、Apple はアプリに Web コンテンツを追加するために WKWebView の使用を推奨しています。 UIWebView WebView は使用しないでください。詳細については、 Apple の WKWebView ドキュメント を参照してください。

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

セットアップ要件:

  • アプリバンドルに Singular.js ファイルを含めます
  • ビューコントローラーを WKWebView のナビゲーションデリゲートとして設定します
  • decidePolicyForNavigationAction デリゲートメソッドを実装します
  • Singular SDK リクエストを処理するために processJSRequestWK を呼び出します

JavaScript の使用方法

WKWebView で実行されている JavaScript コードから Singular メソッドを呼び出します。

イベントの追跡

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

収益の追跡

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

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

カスタムユーザー ID の管理

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

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

JavaScript API に関する注意事項:

  • すべてのメソッドはグローバルな Singular オブジェクトで呼び出されます
  • イベント属性は JSON 文字列化されたオブジェクトとして渡す必要があります
  • メソッド名は camelCase を使用します (例: setCustomUserId )
  • インターフェースは JavaScript の呼び出しをネイティブの SDK メソッドに自動的にブリッジします