iOS SDK - 詳細オプション

ドキュメント iOS SDK - 詳細オプション

高度なオプション

WKWebViewベースのハイブリッドアプリのためのセッション管理やJavaScript統合を含む高度なSDK機能を設定します。

セッション管理

自動セッション管理

Singular SDKは、モダンなiOSアプリ向けに追加設定なしでセッション管理を自動的に処理します。

デフォルトの動作

アプリが60秒以上バックグラウンドに移動すると、SDKはフォアグラウンドに戻ったときに新しいセッションを登録します。


セッションタイムアウトの設定

アプリの使用パターンに合わせてセッションタイムアウト時間をカスタマイズします。

メソッドのシグネチャ

+ (void)setSessionTimeout:(int)timeoutInSeconds;
SwiftObjective-C
// Initialize SDK configuration
guard let config = SingularConfig(
    apiKey: "SDK_KEY",
    andSecret: "SDK_SECRET"
) else {
    return
}

// Set session timeout to 120 seconds (2 minutes)
Singular.setSessionTimeout(120)

// Start the SDK
Singular.start(config)

タイムアウトの値

  • デフォルト:60秒
  • 最小値:0秒0秒(バックグラウンド/フォアグラウンドの遷移ごとに新しいセッションが作成される
  • 推奨:アプリの使用パターンに応じて30~180秒

ベストプラクティス: Singular.start() を呼び出す前にsetSessionTimeoutを呼び出し、タイムアウト値が最初のセッションから適用されるようにする。


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

概要

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

サポートされるメソッド

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

WKWebView統合の設定

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

注:iOS 8.0+から、Appleはアプリにウェブコンテンツを追加するためにWKWebViewを使用することを推奨しています。UIWebViewや WebViewは使用しないでください。詳しくはAppleのWKWebViewのドキュメントを参照してください。

SwiftObjective-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 デリゲートメソッドを実装する。
  • processJSRequestWK を呼び出し、Singular SDK リクエストを処理する

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 文字列化オブジェクトとして渡す必要があります。
  • メソッド名はキャメルケースを使用します(例:setCustomUserId )。
  • インターフェースは、JavaScript 呼び出しをネイティブ SDK メソッドに自動的にブリッジします。