Unity SDK - リファラーショートリンクのサポート

ドキュメント

短いリファラーリンクの作成

ユーザー間のアトリビューションを可能にし、オーガニックな紹介からのアプリのインストールを追跡する、共有可能な短いリファラーリンクを生成します。

バージョン要件:この機能を使用するには、SDKバージョン1.0.0以降が必要です。短いリンクは、作成後30日間有効です。

ショートリンクは、長い、パラメータいっぱいのシンギュラーリンクを、SMS、ソーシャルメディア、アプリ内招待で共有するのに便利な、コンパクトで安全なURLに変換します。

ショートリンクを動的に作成することで、ユーザーがお友達と共有し、アプリのダウンロードや使用を招待することができます。 各ショートリンクは参照ユーザーを追跡するので、バイラルの成長を測定し、新規インストールを特定の支持者に帰属させることができます。


ショートリファラーリンクを作成する前に、これらの要素を集めてください:

  • 単一リンク:アプリのダウンロードにユーザーを誘導するベーストラッキングリンク。設定方法については、シンギュラーリンクのFAQを参照してください。
  • 動的パラメータ:リンクにコンテキストを追加するオプションのカスタムパラメータ。トラッキングリンクパラメータで利用可能なオプションを見る
  • リファラー情報:リンクを共有するユーザーの名前と ID を入力して、新規インストールのリファラーへの帰属を可能にします。

カスタムパラメータと成功およびエラー状態のコールバックハンドラを使用して、短いリファラーリンクを生成します。

メソッドのシグネチャ

public static void CreateReferrerShortLink(
    string baseLink,
    string referrerName,
    string referrerId,
    Dictionary<string, string> parameters,
    Action<string, string> callback
)

パラメータ

  • baseLink:元の Singular トラッキングリンクの URL。
  • referrerName:参照元ユーザーの表示名
  • referrerId:参照元ユーザーの一意な識別子
  • parameters:追加の動的パラメータを含む辞書 (オプション。ない場合は null を渡す)
  • コールバック:パラメータを含むコールバック関数(string shortLinkURL, string error)

カスタムパラメータでショートリンクを作成し、成功コールバックで共有ロジックを実装します。

C#
using UnityEngine;
using Singular;
using System.Collections.Generic;

public class ReferralManager : MonoBehaviour
{
    public void ShareReferralLink()
    {
        // Create custom parameters for the link
        Dictionary<string, string> parameters = new Dictionary<string, string>()
        {
            { "channel", "sms" },
            { "campaign_id", "summer_promo_2025" },
            { "referral_type", "friend_invite" }
        };

        // Generate the short referrer link
        SingularSDK.CreateReferrerShortLink(
            "https://sample.sng.link/D52wc/cuvk?pcn=test",  // Base Singular Link
            "John Doe",                                      // Referrer name
            "user_12345",                                    // Referrer ID
            parameters,                                      // Custom parameters
            OnShortLinkCreated                               // Callback
        );
    }

    // Callback method that receives the short link URL or error
    private void OnShortLinkCreated(string shortLinkURL, string error)
    {
        if (!string.IsNullOrEmpty(shortLinkURL))
        {
            // Success - short link was created
            Debug.Log($"Generated short link: {shortLinkURL}");

            // Share the link using your preferred sharing method
            ShareLink(shortLinkURL);
        }
        else if (!string.IsNullOrEmpty(error))
        {
            // Error occurred during link creation
            Debug.LogError($"Error creating short link: {error}");

            // Handle error - retry or show user feedback
            ShowErrorMessage("Failed to create share link. Please try again.");
        }
    }

    private void ShareLink(string shortLinkURL)
    {
        // Example: Use Unity's native share functionality
        string shareMessage = $"Join me on this awesome app! {shortLinkURL}";

        #if UNITY_ANDROID
        ShareOnAndroid(shareMessage);
        #elif UNITY_IOS
        ShareOnIOS(shareMessage);
        #else
        // Fallback: Copy to clipboard
        GUIUtility.systemCopyBuffer = shortLinkURL;
        Debug.Log("Link copied to clipboard");
        #endif
    }

    #if UNITY_ANDROID
    private void ShareOnAndroid(string message)
    {
        using (AndroidJavaClass intentClass = new AndroidJavaClass("android.content.Intent"))
        using (AndroidJavaObject intentObject = new AndroidJavaObject("android.content.Intent"))
        {
            intentObject.Call<AndroidJavaObject>("setAction", intentClass.GetStatic<string>("ACTION_SEND"));
            intentObject.Call<AndroidJavaObject>("setType", "text/plain");
            intentObject.Call<AndroidJavaObject>("putExtra", intentClass.GetStatic<string>("EXTRA_TEXT"), message);

            using (AndroidJavaClass unity = new AndroidJavaClass("com.unity3d.player.UnityPlayer"))
            using (AndroidJavaObject currentActivity = unity.GetStatic<AndroidJavaObject>("currentActivity"))
            {
                AndroidJavaObject chooser = intentClass.CallStatic<AndroidJavaObject>(
                    "createChooser", intentObject, "Share via"
                );
                currentActivity.Call("startActivity", chooser);
            }
        }
    }
    #endif

    #if UNITY_IOS
    private void ShareOnIOS(string message)
    {
        // iOS native sharing implementation
        // You can use a plugin like NativeShare or implement UIActivityViewController
        Debug.Log($"Sharing on iOS: {message}");
    }
    #endif

    private void ShowErrorMessage(string message)
    {
        // Your UI error display logic
        Debug.LogWarning(message);
    }
}

ネットワーク障害、無効なパラメータ、またはサーバーの問題を管理するために、コールバックで堅牢なエラー処理を実装します。

  • リトライロジック:一時的なネットワークエラーのために指数関数バックオフを実装します。
  • ユーザー・フィードバック:リンク作成失敗時に明確なエラーメッセージを表示
  • フォールバック・オプション:代替共有方法の提供(例:短いリンク作成に失敗した場合、完全なシンギュラーリンクを共有する
  • 検証:問題を早期に発見するために、CreateReferrerShortLink を呼び出す前にパラメータを検証します。

リファラー情報を活用して、バイラルループを構築し、オーガニックな成長を測定する。

ベストプラクティス社内のユーザー識別システムと一致する一貫したリファラーIDを使用する。 これにより、次のことが可能になります:

  • 新規インストールを特定の参照ユーザーに帰属させる。
  • 紹介に成功したユーザーに報酬を与える
  • バイラル係数とKファクターメトリクスの追跡
  • 最も価値のあるブランド支持者を特定

共有戦略において、30日間のリンクライフサイクルを計画する。

重要:ショートリンクは30日で失効します。長期的なキャンペーンや永続的な共有機能の場合は、定期的に新しいショートリンクを生成するか、予備として完全なシンギュラーリンクを使用してください。


パーソナライズされた紹介リンクを使って、ユーザーがアプリから直接友達を招待できるようにします。

  • 報酬システム:紹介者を追跡し、友達登録に成功したユーザーに報酬を与えます。
  • ソーシャル共有:SMS、WhatsApp、Eメール、ソーシャルメディア用のプラットフォームネイティブの共有シートと統合します。
  • パーソナライズされた招待:パーソナライズするために紹介者の名前を共有メッセージに含めることができます。

ユーザーが他のユーザーと共有したいコンテンツを作成した場合、共有可能なリンクを作成します。

  • コンテンツのアトリビューション:どのコンテンツが最もアプリのインストールを促進したかを追跡
  • クリエイターの認識:新規ユーザーをコンテンツ作成者に帰属させ、ゲーミフィケーションを実現します。
  • キャンペーンタグ付け:コンテンツの種類やカテゴリーに基づいた動的なパラメータを追加

どの出席者が新規ユーザーを連れてきたかを追跡するイベント招待用のユニークなリンクを生成します。

  • イベントコンテキスト:リンクパラメータにイベントIDと詳細を含める
  • 参加者のトラッキング:イベントからイベントへのバイラル拡散を測定
  • ネットワーク効果:コンバージョン率の高いイベントを特定