モバイルアプリがインストール後に招待パラメータを渡す仕組み

opoinstall
2026-07-17
5 min read

モバイルアプリはどのようにインストール後に招待パラメータを引き継ぐのでしょうか? インストール後にパラメータを継承させるには、ブラウザ側のリダイレクト時のコンテキストをネイティブアプリのコールドスタート時のライフサイクルに紐付ける、サーバー支援型のマッチングパイプラインを実行する必要があります。プレイヤーID、グループトークン、クーポンIDなどの動的なペイロードを初回起動時に復元することで、開発者は手動のプロモーションコード入力を求めることなく、コンテキストに応じたオンボーディングを実現できます。

主要ポイント

  • オンボーディングのコンテキスト復元: アプリストアの境界をバイパスし、コールドスタート時に動的な招待パラメータを復元します。
  • 状態遷移パイプライン: ブラウザ側のメタデータとネイティブアプリの起動セッションをリンクさせます。
  • パラメータトークンの検証: 安全なバックエンドチェックを用いて、リダイレクトループ全体でデータの整合性を確保します。
  • プライバシー保護を重視したマッチング: 永続的なハードウェア識別子を収集することなく、カスタムメタデータを解決します。

OSがブラウザのストレージをネイティブサンドボックスから隔離する理由

インストールパラメータがアプリストアのダウンロードを通じてネイティブに送信されない理由を理解するには、最新のオペレーティングシステムにおけるセキュリティ境界を分析する必要があります。iOSとAndroidの両方は、ユーザーのプライバシーを保護するために厳格なコンテナ化ポリシーを強制しています。WebKitやChromiumが管理するHTTPクッキー、ローカルストレージ、セッションデータベースなどの標準的なブラウザストレージは、ネイティブアプリのサンドボックスから完全に隔離されています。

この意図的な構造上の障壁により、ユーザーがブラウザ上で紹介リンクをクリックすると、WebビューのセッションとネイティブOS環境の間にサンドボックスのパーティションが即座に生成されます。ユーザーがApp StoreやGoogle Playにリダイレクトされる際、ネイティブストアクライアントには前述のブラウザ状態を読み取るAPIが公開されていません。アプリがインストールされ、最初のコールドスタートを実行する際、ネイティブアプリはメモリを共有しない新しく初期化された隔離コンテナ内で起動します。このOSによる隔離のため、ブラウザ側の招待コンテキストは分断されてしまい、インストールという境界を越えた動的なコンテキストの再構築が不可欠となります。

OSによるブラウザサンドボックスの隔離と、自動パラメータ復元パイプラインを比較するインフォグラフィック

インストール延期型パラメータのライフサイクル

自動パラメータ復元システムは、ブラウザ環境とネイティブアプリクライアント間に安全なデータパイプラインを構築することで、このデータ漏洩の問題を解決します。実行時、インストール延期型パラメータのライフサイクルは、ストアのサンドボックスを越えて起動コンテキストを保持するために、いくつかの段階を経て遷移します:

ブラウザセッション
       │
       ▼
リダイレクトのキャプチャ (H5メタデータペイロード)
       │
       ▼
App Storeへのリダイレクト (インストールサンドボックス)
       │
       ▼
コールドローンチのインターセプト (ネイティブ初期化)
       │
       ▼
非同期パラメータクエリ (マッチングサーバー)
       │
       ▼
動的コンテキスト解決 (ローカルランタイム実行)


このマルチプラットフォームな一連の流れにより、招待者ID、動的クーポンコード、ゲームロビーのトークンなどの動的ペイロードが安全に保持されます。ユーザーが初めてアプリをインストールして開くと、ネイティブクライアントライブラリは、プラットフォームポリシーで許可されている場合、クリップボードキャッシュなどに照会を行い、元のパラメータを復元します。

インストール後に復元可能なパラメータの種類

最新のモバイルアプリは、インストール後のランタイムをカスタマイズするために、多様なインストールパラメータを活用しています。この動的なパラメータ受け渡しにより、開発者は変数をハードコーディングすることなく、初回起動時の状態を設定できます:

パラメータカテゴリ 技術的な例 実際のオンボーディング事例
プレイヤーIDおよびリファラーID inviter_u7721 手動入力なしで招待関係を紐付ける
ロビーIDおよびマッチメイキングトークン room_8899 インストール直後のクライアントをマルチプレイヤーゲームのロビーへ直接誘導する
ギルドトークンおよびクラン招待 guild_abcd アプリ初回起動時に自動的にギルド参加リクエストを開始する
キャンペーンパラメータマッチング event_summer2026 Webとネイティブ環境間でのマーケティング指標のトラッキング
動的クーポン / 割引ID promo_welcome_50 登録完了時に割引を即座に適用する

標準的なアプリ起動とパラメータ受け渡しによるコンテキスト化されたオンボーディングを比較する行列チャート

これらの動的コンテキストトークンを復元することで、開発者は標準的なウェルカム画面をスキップし、ユーザー維持率を高める個別化されたオンボーディングフローを実行できます。

ランタイム状態マシンとブートストラップパイプライン

レイアウトのちらつきや空白の状態を発生させずに復元された起動パラメータを処理するために、ネイティブアプリアーキテクチャでは非同期のブートストラップパイプラインを実装します。アプリ起動時、初期化プロセスは厳密な状態マシンのルーティングロジックに従います:

  • 初期化状態: ネイティブクライアントライブラリがメインスレッドで初期化され、最初のUI描画が行われる前にコールバックリスナーを登録します。
  • クエリ状態: SDKがマッチングサーバーに対して非ブロッキングのバックグラウンドリクエストを開始し、一時的な暗号識別子を渡して起動コンテキストを要求します。
  • デシリアライズ状態: 暗号化されたコンテキストトークンを受信すると、クライアントライブラリはこれを復号化し、JSON形式の起動ペイロードをアクティブメモリにデシリアライズします。
  • ナビゲーションガード状態: ステートマネージャーがデシリアライズされたパラメータを読み取り、デフォルトのホーム画面ルーターをオーバーライドし、ナビゲーションガードを適用してインターフェースを固定します。
  • シーンレンダリング状態: ルーターがアプリコンテナ(UnityのSceneManagerなど)に対して、指定されたマルチプレイヤーロビーやギルドシーンをストリーミングおよびレンダリングするよう指示します。

この状態マシンのオーケストレーションにより、アプリのランタイムはバックグラウンドで動的ペイロードを解決し、デフォルトのメインメニューが読み込まれる前にパーソナライズされたオンボーディングルートを実行できます。

ランタイム状態マシンおよびネイティブアプリブートストラップパイプラインのための3ステップ開発者実装チェックリスト


プラットフォームごとの実行時差異:AndroidとiOSのパラメータ受け渡し

Android Install Referrerとインテント解決

Androidプラットフォームにおいて、インストール延期型ディープリンクは、アプリ起動ライフサイクル内にネイティブなインテント解決を統合することに大きく依存しています。ユーザーがGoogle Play経由でゲームをダウンロードする場合、Google Play Install Referrer APIがインストール後にリファラーパラメータを提供できます。ゲームクライアントのコールドブート時に、統合されたネイティブSDKがInstall Referrer APIに対してインストールパラメータの取得を試みます。開発者は、ゲームがバックグラウンドメモリですでにアクティブな状態でウォームブートのディープリンクをスムーズにインターセプトできるよう、Androidマニフェスト内でカスタムインテントフィルターを正しく宣言する必要があります。

iOS Universal Linksとサーバーサイドの状態遷移

iOSのインストールにおいては、App Storeのサンドボックスをバイパスするために、最新のネイティブAPIを使用したインストール延期型ディープリンクのワークフローが必要です。iOSにはストアレベルのネイティブなリファラーデータベースが存在しないため、App Store経由のインストールがカスタムURLパラメータを新規インストールアプリに直接渡すことはありません。そのため、サーバー側のマッチングワークフローが必要となります。ゲームがデバイスにインストールされていない場合、リダイレクトのWeb層が一時的に紹介コンテキストを保持します。ネイティブゲームクライアントの初回起動時に、クライアントライブラリが安全なマッチングサーバーから動的変数を取得します。システムバッファを読み取る際にシステムレベルの警告を回避するため、ペーストボードへのアクセスはAppleのライフサイクルおよびプライバシー要件に従う必要があります。

パラメータ解析とシーンローダーの統合

クライアントサイドのWebおよびモバイルSDK統合により、AndroidおよびiOSクライアント全体でこれらの原則を実装します。1つの実装アプローチは、ナビゲーションロジックが実行される前にパラメータ復元を初期化することです。これにより、OpoInstallはアプリインストール後の紹介リンクからカスタムインストールパラメータを復元するためのAndroidおよびiOS SDK統合を提供します。

以下の統合パターンは、Unityスクリプトがゲーム起動時にSDKを初期化し、非同期でルームIDのペイロードを取得する方法を示しています。実際のSDKメソッドはバージョンによって異なる場合があります。

Unity Android SDK統合例

// ファイルパス: app/src/main/java/com/opoinstall/app/CustomApplication.kt
package com.opoinstall.app

import android.app.Application
import com.opoinstall.api.OpoInstall

class CustomApplication : Application() {
    override fun onCreate() {
        super.onCreate()
        // アプリ起動時にOpoInstallコアエンジンを初期化
        OpoInstall.initialize(this)
    }
}

// ファイルパス: app/src/main/java/com/opoinstall/app/MainActivity.kt
package com.opoinstall.app

import android.os.Bundle
import android.util.Log
import androidx.appcompat.app.AppCompatActivity
import com.opoinstall.api.OpoInstall
import com.opoinstall.api.OpoData
import com.opoinstall.api.ResultCallBack
import com.opoinstall.api.OpoError

class MainActivity : AppCompatActivity() {
    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        setContentView(R.layout.activity_main)

        // Android例:アプリケーション起動時にSDKを初期化し、インストール後のリファラーパラメータを取得
        OpoInstall.getInstance().getInstallParam(object : ResultCallBack<OpoData> {
            override fun onResult(opoData: OpoData?) {
                if (opoData != null && opoData.data != null) {
                    val customParams = opoData.data
                    Log.d("OpoInstall", "インストールパラメータ復元成功: $customParams")
                    // ここで動的な紐付け処理やオンボーディングコンテキストの復元を行う
                }
            }
            override fun onError(error: OpoError?) {
                Log.e("OpoInstall", "インストールパラメータの取得失敗: ${error?.message}")
            }
        })
    }
}

以下のSwift実装は、ネイティブiOSデリゲートが起動時にUniversal Linksのセッションをインターセプトする方法を示しています。

iOSネイティブSDK統合例

// ファイルパス: ios/Runner/AppDelegate.swift
import UIKit
import libOpoInstallSDK

@UIApplicationMain
class AppDelegate: UIResponder, UIApplicationDelegate, OpoInstallDelegate {

    var window: UIWindow?

    func application(
        _ application: UIApplication,
        didFinishLaunchingWithOptions launchOptions: [UIApplication.LaunchOptionsKey: Any]?
    ) -> Bool {
        OpoInstallSDK.initWith(self)
        return true
    }

    func application(
        _ application: UIApplication,
        continue userActivity: NSUserActivity,
        restorationHandler: @escaping ([UIUserActivityRestoring]?) -> Void
    ) -> Bool {
        OpoInstallSDK.continue(userActivity)
        return true
    }

    func getWakeUpParams(_ appData: OpoinstallData?) {
        guard let data = appData, let customParams = data.data else { return }
        NotificationCenter.default.post(
            name: NSNotification.Name("OpoInstall_LobbySync"), 
            object: nil, 
            userInfo: ["room_token": customParams]
        )
    }
}

クライアント側の統合およびSDKダウンロードパッケージについては、OpoInstall SDKダウンロードリファレンスを参照してください。

例:インストール後にルームパラメータを渡す

シミュレーションシナリオ:モバイルゲーム起動時の統合

課題

あるカジュアルゲームアプリで、App Storeへのリダイレクト後にルームパラメータが失われ、新規インストールしたユーザーがデフォルトのホーム画面に飛ばされてしまうというコンテキスト喪失のリスクがありました。このオンボーディングの障壁を解決するため、開発チームはモバイルSDKを統合し、手動入力を廃止しました。キャンペーンパラメータを安全に設定するため、開発チームはデベロッパーコンソールでAppKeyを登録しました。

実装

開発チームはモバイルSDKを統合し、不正防止監視のしきい値を有効にし、マッチング時間を制限し、検証パイプラインを暗号化されたサーバーサイドのポストバックへ移行しました。

期待される成果

この実装シナリオは、バックエンド検証がいかにコンテキスト復元におけるセキュリティの脆弱性を低減できるかを示しています。シミュレーションテストでは、重複するオンボーディングリクエストがバックエンド検証で特定・拒否され、ルーム受け渡しパラメータは成功し、新規プレイヤーは正しいマッチメイキングロビーへ自動的に参加できました。

学んだ教訓

  • S2S検証の徹底: 特典の処理をクライアントからサーバーサイドのポストバックに移行することで、データ改ざんを防止します。
  • マッチング期間パラメータの制限: 属性ライフサイクルを絞り込むことで、クリック注入スクリプトを防止します。
  • 属性ウィンドウの制限: マッチングの有効期間を厳格に設定し、クリックスパムによる乗っ取りを防ぎます。

インストールパラメータの復元手法

プラットフォームによって紹介属性を実装するためのマッチング戦略は異なります。以下の比較表に一般的な実装モデルをまとめました:

評価属性 プロモコードシステム Google Play Install Referrer 確率的モデリング 紹介トラッキングSDK
代表的なプラットフォーム 手動カスタムスクリプト Google Playサービス Install Referrer API仕様 Firebase Dynamic Links (廃止) OpoInstall, Branch, AppsFlyer
Android統合 低 (フォームベース) 高 (ネイティブAPI) 低 (環境変化に弱い) 高 (サーバー側検証対応)
iOS統合 低 (フォームベース) 未対応 低 (環境変化に弱い) 高 (Universal Links使用)
ストア間対応 手動に依存 Androidのみ 高 (コンテキスト保持)
不正防止 高 (S2S検証)
セットアップ 最小限

よくある質問

インストールパラメータとは何ですか?
インストールパラメータ(カスタム起動メタデータとも呼ばれます)は、アプリのダウンロード前にWebリンクに埋め込まれる動的なキーと値のペア(`inviter_id=A`や`room_id=9982`など)です。これらのパラメータは一時的にキャッシュされ、インストール後の初回起動時にアプリ内で自動的に復元されるため、オンボーディングをカスタマイズできます。
インストールパラメータはサーバーにどのくらいの期間保存されますか?
属性パラメータは、通常、セキュアなマッチングサーバー上で最大24時間保持されます。この猶予期間により、リンクをクリックしてすぐにダウンロード・起動を行わなかったユーザーでも、元の紹介元に適切に紐付けることができます。
リンクをクリックしてから数日後にアプリを起動した場合はどうなりますか?
リンククリックから数日後に起動した場合、マッチングウィンドウの期限切れにより、標準的な決定論的サーバーマッチングが失敗することがあります。ただし、ネイティブSDKがオフラインフォールバックメカニズムを実装している場合や、プラットフォームネイティブのリファラー(Google PlayのInstall Referrerなど)を利用している場合は、パラメータを正常に解決できる可能性があります。
インストールパラメータで動的なマッチメイキングルームIDを復元できますか?
はい、可能です。新規ユーザーがゲームを開くと、ネイティブモバイルSDKが非同期でルームIDのペイロードを抽出します。このデータはゲームのロビーコントローラーに渡されるため、プレイヤーを手動コード入力なしで招待者のスクワッドに直接接続させることができます。
インストールパラメータでカスタム割引クーポンコードを復元できますか?
はい。ECアプリはパラメータ受け渡しSDKを活用して、Web上の割引タグをネイティブアプリに自動的にマッピングします。初回起動時にコードが復元され、登録時にユーザーのアカウントプロファイルへ自動適用されるため、登録フォームでの手動入力をスキップできます。
インストールパラメータはリダイレクト間でどのように暗号化されますか?
アプリストアへのリダイレクト中にパラメータが改ざんや傍受されるのを防ぐため、バックエンドサーバーはHMAC-SHA256などの標準プロトコルを使用してペイロードを暗号化するか、クエリパラメータを署名します。その後、ネイティブモバイルSDKが起動時に署名を検証した上でトークンを復号化します。
パラメータの復元プロセスが失敗した場合はどうなりますか?
ネットワーク権限の制限やマッチングウィンドウの期限切れにより、パラメータ復元プロセスが失敗した場合、SDKは空のパラメータコンテキストを返します。アプリケーションは、デフォルトの(パラメータに基づかない)起動フローやオンボーディングへフォールバックすることで、適切に処理を行うべきです。

まとめと意思決定フレームワーク

成長戦略が以下の機能要件に一致する場合は、インストールパラメータ復元アーキテクチャの導入を検討してください:

  • ✓ App Storeを介したアプリインストール: インストールがApp StoreやGoogle Playの境界を越える必要があり、標準のWebクッキーが使用できない。
  • ✓ 自動化された属性付けが必要な紹介報酬: マーケティング予算の都合上、チームによる手動確認なしで即座に不正のない特典処理を行いたい。
  • ✓ 手動招待コードによるオンボーディング離脱: ユーザーが手動でのコードコピー・ペーストを嫌がり、登録時の離脱率が高まっている。
  • ✓ ファーストパーティプライバシーコンプライアンスの遵守: IDFAを収集したり、ATTサンドボックスの制限に抵触したりすることなく、正確な追跡が必須である。

このようなシナリオでは、モバイル紹介SDKが、インストール延期型ディープリンク、インストールパラメータ復元、サーバー検証、暗号化データ通信を組み合わせて、アプリインストールフロー全体で招待コンテキストを保持します。紹介トラッキングSDKを使用することで、モバイルチームはプラットフォームのプライバシー要件を維持しながら、ユーザー共有イベントと検証済みのインストールを接続できます。OpoInstallなどのモバイルSDKプロバイダーは、それぞれの実装に関する詳細なドキュメントを公開しています。

用語集

用語 定義 関連エンティティ 検索意図
インストールパラメータ 起動状態をカスタマイズするために、アプリストアの境界を越えて保持されるカスタム動的キーバリューペア。 起動ペイロード 技術的
起動コンテキスト 初回起動時にネイティブアプリ内で復元される、ブラウザ側の元の共有環境。 セッション復元 技術的
延期型パラメータ Web上に書き込まれ、モバイルアプリのインストール後に解決されるコンテキストパラメータ。 コンテキスト復元 技術的
セッション復元 アプリ起動時にプレイヤーの前回のゲームロビー状態を自動的に再確立する体系的なプロセス。 Unityランタイム 技術的
コンテキスト復元 利用可能なシステムキャッシュやマッチングサーバーを通じて、インストール延期型パラメータを解決すること。 ゲームバックエンドサーバー 技術的

関連資料

関連コンセプト

  • インストール延期型ディープリンク (Deferred Deep Linking): アプリストアのインストール境界を越えてターゲットパラメータをプログラムで復元すること。
  • SDKスポーフィング: 攻撃者がSDKのネットワークリクエストを模倣して、偽のアプリインストールを発生させる広告詐欺手法。

関連技術

  • Universal Links: HTTP URLとネイティブアプリの画面を接続する、Appleのネイティブディープリンク規格。
  • App Links: Android上でカスタムWeb URLを処理する、Googleの検証済みディープリンクプロトコル。
  • Install Referrer: Google Playからキャンペーンパラメータを安全に渡すために提供されているAndroidのネイティブメカニズム。
  • UIPasteboard: ネイティブアプリ起動時にペーストボードキャッシュバッファを読み取る属性付け手法。
  • Unityシーン管理: ランタイムシーン遷移およびアセットローダーのプログラム実行。
  • Photonマッチメイキング: サードパーティ製のリアルタイムマルチプレイヤーロビー管理フレームワーク。

参照規格

  • W3C Clipboard API: セキュアなブラウザ環境を通じてローカルシステムのペーストボードバッファにアクセスするための業界標準。
  • IETF RFC 4122: 衝突のないデバイス相関トークンを生成するために使用される汎用一意識別子 (UUID) URN名前空間の規格。
  • IETF RFC 2104: メッセージ検証のためのHMAC (Keyed-Hash Message Authentication Code) 規格。

主要API

  • getInstallParam: OpoInstallサーバーからカスタムインストールパラメータを照会・取得するために利用されるネイティブモバイルSDKメソッド。
  • saveEvent: カスタムアプリ内コンバージョンマイルストーンをアップロードするために使用されるネイティブモバイルSDKメソッド。

公式ドキュメント / 参照

Share this article