Android SDK - 詳細オプション

詳細オプション

インストールリファラー収集、セッション管理、JavaScript連携、および特殊なユースケース向けの 代替デバイス識別子を含む詳細なSDK機能を構成します。

インストールリファラー収集(レガシーデバイス)

概要

インストールリファラーは、ユーザーがGoogle Play Storeからアプリをインストールする前に クリックした広告を識別することで、正確なアトリビューションを提供します。

非推奨機能: Googleは INSTALL_REFERRER インテントブロードキャストを非推奨としました。 Still Using InstallBroadcast? Switch to the Play Referrer API by March 1, 2020 を参照してください。 最新のSingular SDKバージョンは自動的に Google Play Referrer API を使用します。

自動収集:

最新のGoogle Play Storeがインストールされたデバイスでは、Singular SDKがGoogle Play Referrer APIを使用してインストールリファラーを自動的に収集します。手動構成は レガシーデバイスのサポートにのみ必要です。


既存のレシーバーと統合する

アプリにすでに INSTALL_REFERRER 用の BroadcastReceiver がある場合は、インストールリファラーデータをSingularに転送します。

実装:

既存のレシーバーの onReceive メソッド内に SingularInstallReceiver の呼び出しを追加します。

Kotlin Java
class MyCustomInstallReceiver : BroadcastReceiver() {
    override fun onReceive(context: Context, intent: Intent) {
        // Forward install referrer to Singular
        SingularInstallReceiver().onReceive(context, intent)

        // Your existing logic
        // ...
    }
}

Singularレシーバーを登録する

アプリに既存の INSTALL_REFERRER ハンドラーがない場合、Singularのインストールリファラーレシーバーを構成します。

AndroidManifest.xmlの構成:

AndroidManifest.xml
<application>
    <!-- Other application components -->

    <receiver
        android:name="com.singular.sdk.SingularInstallReceiver"
        android:exported="true">
        <intent-filter>
            <action android:name="com.android.vending.INSTALL_REFERRER" />
        </intent-filter>
    </receiver>
</application>

推奨事項: この構成は、非常に古いデバイスをサポートするアプリにのみ必要です。 最新の実装では、自動のGoogle Play Referrer API統合に頼るべきです。


セッション管理

自動セッション管理

Singular SDKは、Android API 14(Ice Cream Sandwich)以上で追加の構成なしに セッション管理を自動的に処理します。

デフォルトの動作:

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


セッションタイムアウトを構成する

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

メソッドシグネチャ:

SingularConfig.withSessionTimeoutInSec(int timeoutInSeconds)
Kotlin Java
// Set session timeout to 120 seconds (2 minutes)
val config = SingularConfig("SDK_KEY", "SDK_SECRET")
    .withSessionTimeoutInSec(120)

Singular.init(applicationContext, config)

タイムアウト値:

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

手動セッション管理(API < 14)

minSdkVersion が14未満のアプリでは、各アクティビティでライフサイクルメソッドを呼び出して セッションを手動で管理します。

このセクションをスキップしてください: お使いの minSdkVersion が14(Ice Cream Sandwich)以上の場合 — ほぼ確実にそうです。Singular SDKは ActivityLifecycleCallbacks を使用してAPI 14以上でセッションを自動的にトラッキングするため、 onActivityResumed() / onActivityPaused() を手動で呼び出すのは冗長であり、二重のセッションイベントを引き起こす 可能性があります。Android 4.0より古いデバイスを明示的にターゲットとする 場合にのみ、以下のコードを実装してください。

実装

各アクティビティのライフサイクルメソッドで onActivityResumed() onActivityPaused() を呼び出すか、ベースアクティビティクラスで実装します。

Kotlin Java
class MainActivity : AppCompatActivity() {

    override fun onResume() {
        super.onResume()
        Singular.onActivityResumed()
        // Your other code
    }

    override fun onPause() {
        super.onPause()
        Singular.onActivityPaused()
        // Your other code
    }
}

ベストプラクティス: 共通のベースアクティビティクラスがある場合は、すべてのアクティビティで コードを重複させるのではなく、ベースクラスの onResume() onPause() メソッドでこれらの呼び出しを実装してください。


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

概要

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

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

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

WebView統合のセットアップ

Singular機能が必要な各WebViewに対して、アクティビティの onCreate() メソッドでJavaScriptインターフェースを構成します。

Kotlin Java
override fun onCreate(savedInstanceState: Bundle?) {
    super.onCreate(savedInstanceState)
    setContentView(R.layout.activity_main)

    // Initialize Singular SDK
    val config = SingularConfig("SDK_KEY", "SDK_SECRET")
    Singular.init(this, config)

    // Configure WebView
    val myWebView = findViewById<WebView>(R.id.webview)
    myWebView.settings.javaScriptEnabled = true
    myWebView.loadUrl("file:///android_asset/index.html")

    // Add Singular JavaScript interface
    val singularJSInterface = SingularJSInterface(this)
    singularJSInterface.setWebViewId(R.id.webview)
    myWebView.addJavascriptInterface(singularJSInterface, "SingularInterface")
}

複数のWebView:

  • アプリ内の各WebViewに対してJavaScriptインターフェースを構成します
  • 一貫性のために同じインターフェース名("SingularInterface")を使用します
  • 各インスタンスに一意のWebView IDを設定します

JavaScriptの使用

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

イベントをトラッキング

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

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

収益をトラッキング

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

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

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

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

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

代替デバイス識別子

OAID (Open Advertising ID)

Open Advertising Identifier (OAID) を使用して、Google Playのない地域のAndroid デバイスでトラッキングを有効にします。

OAIDサポート:

  • Huaweiデバイス: Huawei独自のOAID実装
  • MSAデバイス: Mobile Security Alliance加盟ブランド (OPPO、Vivo、Xiaomiなど)

前提条件

サポートされているすべてのプラットフォームでOAIDを収集するには、 MSA SDK Huawei OAID SDK の両方を統合してください。

OAID収集を有効にする

トラッキングのためにOAIDを収集および使用するようにSingular SDKを構成します。

Kotlin Java
val config = SingularConfig("SDK_KEY", "SDK_SECRET")
    .withOAIDCollection()

Singular.init(applicationContext, config)

自動検出:

  • SDKはデバイスにOAIDがあるかどうかを自動的に検出します
  • SDKはデバイスに基づいて適切なOAID SDK(MSAまたはHuawei)を選択します
  • Amazon Advertising ID (AMID) は追加の依存関係なしで自動的に収集されます

IMEI (International Mobile Equipment Identity)

Google Play Servicesのない地域のデバイスでのトラッキングのために、デバイスのIMEI 番号を収集します。

重要な警告: IMEIの収集はGoogle Play Services契約に違反します。Google Play Store以外で 配布されるアプリで、Googleサービスのない地域でのみIMEI収集を使用してください。

必要な権限を追加

AndroidManifest.xmlに READ_PHONE_STATE 権限を追加します。

AndroidManifest.xml
<manifest>
    <uses-permission android:name="android.permission.READ_PHONE_STATE" />

    <application>
        <!-- Your application components -->
    </application>
</manifest>

IMEI番号を取得する

適切なAPIレベル処理とともにTelephonyManagerを使用してデバイスのIMEIを取得します。

Kotlin Java
val telephonyManager = getSystemService(Context.TELEPHONY_SERVICE) as TelephonyManager

val imei: String? = if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) {
    telephonyManager.imei
} else {
    @Suppress("DEPRECATION")
    telephonyManager.deviceId
}

// Validate IMEI before use
if (imei != null && imei.isNotEmpty()) {
    // Send to Singular
    Log.d("IMEI", "Retrieved: $imei")
} else {
    Log.w("IMEI", "Failed to retrieve IMEI")
}

SingularにIMEIを送信する

SDK初期化中にIMEIを構成するか(推奨)、初期化後に動的に設定します。

オプション1: 構成メソッド(推奨)

Kotlin Java
// Set IMEI during initialization
val config = SingularConfig("SDK_KEY", "SDK_SECRET")
    .withIMEI(imei)

Singular.init(applicationContext, config)

オプション2: ランタイムメソッド

Kotlin Java
// Set IMEI after initialization
Singular.setIMEI(imei)

ベストプラクティス: 最初のセッションからIMEIが利用可能になるように、SDK初期化前に SingularConfig でIMEIを設定してください。初期化後にIMEIが利用可能になる場合にのみ、 setIMEI() を使用してください。