Skip to content
스토브
마지막 업데이트

딥링크

이해하기


딥링크는 외부로부터 특정 주소나 값을 전달받아 게임(앱)을 실행하고, 게임 내 특정 화면으로 이동시키는 기능이에요.
쿠폰 등록, 이벤트 참여, 캐시샵 진입, 특정 팝업 호출 등 다양한 이용자 유입 시나리오에서 활용돼요.

스토브 플랫폼은 파트너스에서 딥링크를 손쉽게 생성·관리할 수 있는 기능을 제공하며, SDK가 수신된 딥링크 데이터를 게임에 전달해
후속 동작(쿠폰 등록 API 호출, 화면 이동 등)을 수행하도록 지원해요.

딥링크는 외부 진입(웹·메시지·QR 등) → 모바일 앱 실행 → 게임 내 특정 화면 진입까지의 흐름을 하나의 URL로 처리해요.



적용 환경 및 동작 범위

항목 내용
적용 플랫폼 모바일(Android · iOS). PC는 대표 URL 기반 웹 페이지로 이동.
지원 엔진 Android(Java/Kotlin), iOS(Objective-C/Swift), Unity, Unreal.
딥링크 타입 일반형(쿠폰 미연동), 쿠폰형(파트너스 Billing 센터에서 발행한 쿠폰과 연동).
유효 기간 기본 90일. 용도에 따라 지정 가능(최대 999일) 또는 기간 제한 없음 설정.
권장 실행 시점 SDK 초기화 · 로그인 · 캐릭터 설정이 완료된 게임 메인 페이지.



딥링크 기본 실행 동선

이용자 → 파트너스 → Billing → SDK → Game 영역이 순차적으로 연동되어 동작해요.

영역 역할
User 딥링크 클릭 후 게임 진입, 보상 확인.
Partners 파트너스 GM 센터에서 쿠폰 및 딥링크 생성·관리.
Billing 쿠폰 생성 및 쿠폰 API 실행 처리.
SDK 수신된 딥링크 데이터 파싱, 쿠폰 API 호출 및 응답 처리.
Game 딥링크 확인 및 실행, SDK에 월드/캐릭터 정보 전달, 보상 지급 처리.



URI Scheme 동작 원리

URI Scheme은 모바일에서 특정 링크 클릭 시 지정된 게임(앱)을 실행하기 위해 게임(앱)에서 정의해야 하는 값이에요.

text
형식 : myapp://open/community
- myapp           : OS에서 앱을 식별하는 고유한 값
- //open/community : URI Scheme을 통해 실행하고 싶은 모바일 앱의 화면 경로

  • 동작 흐름
    • 웹페이지 또는 게임(앱)에서 하이퍼링크(예: myapp://open/community)를 클릭해요.
    • OS는 전달된 URI Scheme을 확인하여 실행 가능한 앱이 있는지 검색해요.
    • 해당 URI Scheme이 지정된 앱이 있으면 앱을 실행하면서 URI를 함께 전달해요.
    • 앱은 실행되면서 URI에 포함된 내용을 참조해 특정 기능(쿠폰 등록·팝업 호출·화면 이동 등)을 수행해요.

연동 가이드



연동 준비

딥링크를 등록하기 전에 다음 항목이 준비되어 있어야 해요.

항목 설명
패키지명/Bundle ID 파트너스 Launching > 모바일 마켓 정보 메뉴에 환경별 패키지명/Bundle ID 사전 등록.
URI Scheme 정의 게임(앱)에서 사용할 URI Scheme 형식 결정.
쿠폰 발행(쿠폰형 딥링크) 쿠폰형 딥링크를 등록하기 전에 파트너스 Billing 센터에서 쿠폰을 먼저 발행.

쿠폰형 딥링크는 등록 전 파트너스 Billing 센터에서 쿠폰 발행이 필요해요.



단계 1. 딥링크 등록

스토브 백오피스 사이트인 파트너스 GM 센터에서 딥링크를 생성해요. 5개 단계를 거쳐 등록을 완료해요.


  • 딥링크 관리 페이지로 이동
    • 위치는 파트너스 딥 링크 관리 메뉴이며, 새 링크 등록 버튼을 눌러 등록 화면에 진입해요.
    • 등록된 딥링크는 ID, 타입(일반형/쿠폰형), 링크 이름, URL, 상태, 유효 기간, 등록일 정보를 함께 확인할 수 있어요.

  • 기본 정보 입력
    • 생성할 딥링크의 타입, 링크 이름, 유효 기간, 대표 URL을 지정해요.
    항목 설명
    링크 타입 일반형 또는 쿠폰형 중 선택.
    링크 이름 파트너스에서 조회 시 식별 가능한 이름. 100자 이내.
    링크 유효 기간 기본 90일. 일 단위 숫자 입력(최대 999일) 또는 '기간 제한 없음' 선택 가능.
    대표 URL 모바일 앱 실행이 불가한 환경(예: PC 데스크톱)에서 딥링크 URL 접근 시 이동되는 기본 경로.

  • OS 별 링크 정보 입력
    • 모바일 앱 링크 정보를 등록해요. 안드로이드, iOS 중 최소 1개 이상 입력이 필수예요.
    • 안드로이드는 패키지명과 URL을, iOS는 App ID, 패키지명, URL을 입력해요. 패키지명은 파트너스 모바일 마켓 정보 메뉴에 등록된 값이 자동 입력되며, 미등록 시 공란으로 노출돼요.
    • URL에는 게임(앱) 실행 시 노출될 화면의 URL Scheme 정보를 입력해요. 예) com.stove.mvp.google://stovelink/coupon.

  • 쿠폰 정보 입력 (쿠폰형 딥링크 사용 시)
    • 쿠폰형 딥링크에서 활용할 쿠폰 정보를 입력해요. 일반형 딥링크 선택 시 해당 영역은 노출되지 않아요.
    • 쿠폰 및 회차 선택에서는 발행된 쿠폰 중 딥링크를 생성할 쿠폰을 선택해요. 이미 딥링크가 발행된 쿠폰은 중복 생성이 불가해요.
    • URL 생성 수는 선택된 쿠폰 개수만큼 자동으로 딥링크 URL을 생성해요.

  • 랜딩 페이지 설정 및 등록 완료
    • 딥링크 URL 접근 시 노출되는 랜딩 페이지 설정 후 등록을 완료해요.
    • 언어 선택, 게임명(언어별 최대 60자), 앱 아이콘(100x100px), 랜딩 버튼 및 가이드(기본/커스텀), 미리 보기 항목을 설정해요. 추가 언어 설정 시 미입력된 정보는 기본 언어 정보로 대체돼요.
    • 쿠폰형 딥링크 등록 시 CSV 파일이 제공되며, 첫 번째 열은 '딥링크 URL', 두 번째 열은 '단축 URL'이에요. 쿠폰 번호는 딥링크 URL 내 p={쿠폰 번호} 형태로 포함돼요.



단계 2. 딥링크 실행

이용자가 모바일에서 딥링크 URL을 클릭하면 랜딩 화면을 거쳐 딥링크가 실행돼요.
OS 종류, 버전, 브라우저 종류, 이용자 액션에 따라 동작이 달라질 수 있어요.


  • OS 별 딥링크 실행 동작
    OS 앱 설치 상태 경로 이동 방식 자동 실행 여부 랜딩 페이지 설치 버튼 클릭 시
    Android 미설치 삼성/크롬 브라우저에서 URL 입력 X 마켓 이동
    네이버 브라우저에서 URL 입력 O (마켓 이동) -
    다른 앱에서 링크 클릭 O (마켓 이동) -
    설치 삼성/크롬 브라우저에서 URL 입력 X 앱 이동
    네이버 브라우저에서 URL 입력 O (앱 이동) -
    다른 앱에서 링크 클릭 O (앱 이동) -
    iOS 13 이상 미설치 사파리/크롬 브라우저에서 URL 입력 X 마켓 이동
    설치 사파리/크롬 브라우저에서 URL 입력 X 앱 이동
    iOS 13 미만 미설치 사파리/크롬 브라우저에서 URL 입력 O (마켓 이동) -
    설치 사파리/크롬 브라우저에서 URL 입력 O (앱 이동) -

iOS 13 이상에서는 보안 강화를 위해 브라우저 onLoad 단계에서 딥링크 자동 실행을 차단해요.
이 경우 랜딩 페이지 화면을 통해 이용자가 직접 실행 버튼을 클릭하도록 유도하는 방식으로 동작해요.



단계 3. SDK-게임 간 통신

딥링크 URL을 통해 게임이 실행된 이후 SDK와 게임 간 통신 흐름이에요.
딥링크 실행 권장 시점은 캐릭터 설정을 완료한 게임 메인 페이지예요.


  • 게임(앱) 실행
    • 딥링크 URL을 통해 OS가 게임 앱을 실행하면서 URI 데이터를 함께 전달해요.

  • SDK 로그인 및 캐릭터 설정 완료
    • InitializeLoginSetCharacter 순서로 SDK 초기화 및 이용자 인증을 완료해요.
    • 딥링크 처리는 캐릭터 설정 완료 이후 시점에 호출하는 것을 권장해요.

  • 수신되는 Deep Link 데이터 읽기
    • Android는 Activity.onNewIntent 또는 onCreate에서 수신되는 Intent로부터 데이터를 읽어요.
    • iOS는 application:openURL:options: 메서드를 통해 NSURL을 수신해요.
    • Unity는 Native 플러그인을 통해 전달받은 URL을 게임 코드에서 처리해요.

  • Stove Link 실행(처리)
    • 수신된 Deep Link URI 값에 따라 Stove SDK Method를 실행해요.
    • 사용 빈도가 높은 기능(쿠폰 등록·수동 팝업·특정 URL 로드·캐시샵)의 호출 예시는 아래와 같으며, 필요에 따라 샘플 코드(DeepLinkManager)를 확장해 SDK의 다양한 기능 API를 호출할 수 있어요.

  • Stove Link 호출 형식
    기능 딥링크 형식
    쿠폰 등록 {packageName}://stovelink/coupon?pin={couponCode}
    예) com.stove.mvp.google://stovelink/coupon?pin=B1A4-1424-1241-QWA1
    수동 팝업 호출 {packageName}://stovelink/popup/manual?popupnotice_param={location}
    예) com.stove.mvp.google://stovelink/popup/manual?popupnotice_param=1
    특정 URL 로드 {packageName}://stovelink/popup/load?url={url}
    예) com.stove.mvp.google://stovelink/popup/load?url=https%3A%2F%2Fwww.onstove.com%2F
    캐시샵 {packageName}://cashshop
    예) com.stove.mvp.google://cashshop



URI Scheme 설정

파트너스에서 딥링크 등록 시 URI Scheme 정보를 등록하는 방법과,
게임(앱)에서 사용할 URI Scheme을 직접 정의하는 iOS·Android 앱 설정 방법이 있어요.


  • 파트너스 설정
    • 파트너스에서 딥링크 등록 시 URL Scheme 정보를 기재해요.
    • 예를 들어 com.stove.epic7.googleqa2://stovelink/coupon으로 설정하면 pin 파라미터 및 값은 지정된 쿠폰 정보에 의해 자동 생성돼요.

  • Android URI Scheme 설정
    • AndroidManifest.xml의 MainActivity 설정에 Intent Filter를 추가해요. android:launchMode="singleTask" 속성과 함께 VIEW/DEFAULT/BROWSABLE 카테고리를 포함한 intent-filter 블록과 <data android:scheme="${applicationId}"/> 데이터 스킴을 등록해요.

  • iOS URI Scheme 설정
    • Info.plist의 URL Types > URL Schemes에 Bundle identifier 값을 추가해요. 예) com.stove.mvp.ios.
    • Xcode UI 또는 Info.plist XML 수정 두 방법 모두 사용 가능하며, CFBundleURLTypes 배열 내 CFBundleTypeRole(Editor)과 CFBundleURLSchemes 항목을 등록해요.

개발하기


Android 구현


  • AndroidManifest.xml Intent Filter 등록
    • 메인 Activity에 android:launchMode="singleTask" 속성과 함께 딥링크 수신용 intent-filter를 추가해요. ${applicationId} 자리에 게임 앱의 패키지명이 자동으로 들어가요.
    xml
    <manifest>
        <application>
            <activity
                android:name="com.stove.mvp.MainActivity"
                android:configChanges="keyboard|keyboardHidden|screenLayout|screenSize|orientation"
                android:launchMode="singleTask"
                android:screenOrientation="fullSensor">
                <intent-filter>
                    <action android:name="android.intent.action.MAIN" />
                    <category android:name="android.intent.category.LAUNCHER" />
                </intent-filter>
                <intent-filter>
                    <action android:name="android.intent.action.VIEW"/>
                    <category android:name="android.intent.category.DEFAULT"/>
                    <category android:name="android.intent.category.BROWSABLE"/>
                    <data android:scheme="${applicationId}"/>
                </intent-filter>
            </activity>
        </application>
    </manifest>
    

  • MainActivity onCreate / onNewIntent 처리
    • onCreateonNewIntent에서 전달받은 Intent를 StoveDeepLinkManager.setData(intent)로 등록해요. 두 메서드 모두에서 처리해야 콜드 스타트(앱 미실행 → 딥링크로 실행)와 핫 스타트(앱 실행 중 딥링크 수신) 양쪽이 모두 지원돼요.
    • 수신된 Intent 데이터의 직접 파싱 방식은 Android 공식 가이드를 참고하세요.

  • StoveDeepLinkManager 클래스 활용
    • 샘플 클래스는 SDK 포럼에서 제공되며, CP사(개발사)에서 직접 관리·수정 가능한 영역이에요. URI 패턴이 늘어나면 이 클래스를 확장해 처리 로직을 추가하면 돼요.
    • StoveDeepLinkManager.kt · StoveDeepLinkManager.java

  • parseStoveDeepLink 호출 및 Stove SDK Method 실행
    • SDK 로그인·캐릭터 설정이 완료된 게임 메인 페이지 시점에 StoveDeepLinkManager.parseStoveLink(activity)를 호출해요. SDK가 등록된 URI를 파싱해 대응되는 기능(쿠폰 등록, 팝업 호출 등)을 실행해요.

kotlin
class MainActivity : AppCompatActivity() {

    override fun onNewIntent(intent: Intent?) {
        super.onNewIntent(intent)
        StoveDeepLinkManager.setData(intent)
    }

    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        StoveDeepLinkManager.setData(intent)
    }

    fun parseStoveDeepLink(activity: Activity) {
        StoveDeepLinkManager.parseStoveLink(activity)
    }
}

iOS 구현


  • Info.plist URL Types > URL Schemes 등록
    • 딥링크로 앱이 실행되도록 Info.plistCFBundleURLTypes > CFBundleURLSchemes에 게임 Bundle Identifier 값을 추가해요. (예: com.stove.mvp.ios)
    • Xcode UI에서 등록하거나 Info.plist XML을 직접 수정하는 두 방법 모두 사용 가능해요.
    xml
    <?xml version="1.0" encoding="UTF-8"?>
    <!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
    <plist version="1.0">
    <array>
        <dict>
            <key>CFBundleTypeRole</key>
            <string>Editor</string>
            <key>CFBundleURLSchemes</key>
            <array>
                <string>com.stove.mvp.ios</string>
            </array>
        </dict>
    </array>
    </plist>
    

  • AppDelegate application:openURL:options: 처리
    • iOS 시스템이 딥링크 URL을 전달하는 application:openURL:options: 콜백에서 SGSDeepLinkManager에 URL을 등록해요. 이후 STOVE SDK의 application:openURL:options:로 위임해 SDK 내부 처리도 함께 진행돼요.
    • URL Scheme 정의 방법은 Apple 공식 가이드를 참고하세요.

  • SGSDeepLinkManager 클래스 활용
    • 샘플 클래스는 SDK 포럼에서 제공되며, CP사에서 직접 관리·수정 가능한 영역이에요. URI 패턴 확장 시 이 클래스를 수정해 처리 로직을 추가하면 돼요.
    • SGSDeepLinkManager.h · SGSDeepLinkManager.m

  • parseStoveLink 호출 및 Stove SDK Method 실행
    • SDK 로그인·캐릭터 설정이 완료된 게임 메인 페이지 시점에 [[SGSDeepLinkManager sharedInstance] parseStoveLink]를 호출하면 SDK가 등록된 URI를 파싱해 대응되는 기능을 실행해요.

objectivec
#import "SGSDeepLinkManager.h"

@implementation AppDelegate

- (BOOL)application:(UIApplication *)app openURL:(NSURL *)url options:(NSDictionary<UIApplicationOpenURLOptionsKey,id> *)options
{
    [[SGSDeepLinkManager sharedInstance] setURL:url];
    return [SGSApplicationDelegate application:app openURL:url options:options];
}

- (void)parseStoveLink {
    [[SGSDeepLinkManager sharedInstance] parseStoveLink];
}

@end

Unity 구현


Unity는 별도의 스토브 전용 헬퍼 클래스를 제공하지 않아요. Unity의 표준 딥링크 처리 흐름을 그대로 사용하면서, Android·iOS 빌드 결과물에 위 Android/iOS 섹션의 Manifest·Info.plist 설정을 동일하게 적용해요.


  • Unity 표준 딥링크 처리
    • Unity 내장 Application.deepLinkActivated 이벤트로 수신된 URL 문자열을 받아 처리해요. Unity 공식 가이드는 딥링크 매뉴얼을 참고하세요.

  • Android 빌드
    • Android 구현 섹션의 AndroidManifest.xml Intent Filter를 Unity Plugins/Android 또는 커스텀 manifest 템플릿에 동일하게 적용해요.

  • iOS 빌드
    • iOS 구현 섹션의 Info.plist URL Types > URL Schemes 설정을 Xcode Post-Process(또는 PlayerSettings)에서 동일하게 적용해요.

  • DeepLinkManager 호출 및 SDK Method 실행
    • Application.deepLinkActivated에서 받은 URL을 게임 측 매니저에서 파싱해 STOVE SDK API(쿠폰 등록·팝업 호출·캐시샵 진입 등)에 매핑해요. URI 형식과 매핑 대상은 딥링크 호출 처리 섹션을 참고하세요.

Unreal 구현


  • StoveDeepLink 파일 추가
    • StoveDeepLink.zip을 다운로드해 압축 해제 후 Unreal 프로젝트에 아래 파일들을 추가해요.
      • StoveDeepLink_APL.xml

      • StoveLinkBridge.h / StoveLinkBridge.cpp
      • StoveDeepLinkGameHandler.h / StoveDeepLinkGameHandler.cpp

  • Android — Build.cs에 APL.xml 등록
    • 프로젝트 Build.cs의 Android 분기에 AdditionalPropertiesForReceiptStoveDeepLink_APL.xml을 추가해요.
    csharp
    if (Target.Platform == UnrealTargetPlatform.Android)
    {
        PrivateDependencyModuleNames.AddRange(new string[] { "Launch" });
        string PluginPath = Utils.MakePathRelativeTo(ModuleDirectory, Target.RelativeEnginePath);
    
        // ...
    
        /* StoveDeepLink_APL 추가 */
        AdditionalPropertiesForReceipt.Add("AndroidPlugin", Path.Combine(PluginPath, "StoveDeepLink_APL.xml"));
    }
    

  • Android — URI Schemes 등록
    • Unreal Editor의 Project Settings에서 Android URI Schemes 항목에 게임 패키지 기반 intent-filter를 등록해요.
    xml
    <intent-filter>
        <action android:name="android.intent.action.VIEW" />
        <category android:name="android.intent.category.DEFAULT" />
        <category android:name="android.intent.category.BROWSABLE" />
        <data android:scheme="{packageName}" android:host="{게임사 연동 HOST}" />
    </intent-filter>
    

  • iOS — 엔진 코드 추가
    • Unreal 엔진은 기본적으로 딥링크 응답을 처리하지 않으므로, 엔진 코드에 FIOSCoreDelegates::FOnOpenURLwithOptions를 반드시 추가해야 해요. 자세한 방법은 엔진 코드 추가 가이드를 참고하세요.

엔진 코드 수정이 필수예요
커스텀 엔진 빌드 환경에서만 동작하며, 수정 없이 빌드한 표준 엔진에서는 iOS 딥링크 응답을 수신할 수 없어요.


  • iOS — DeepLink 수신 리스너 등록
    • 프로젝트에 StoveLinkBridge.h / StoveLinkBridge.cpp를 추가하고, RegisterStoveDeepLinkBridge()를 게임 시작 시점에 한 번만 호출해 iOS 딥링크 응답 리스너를 등록해요.
    • 권장 호출 시점은 GameInstance::Init() 또는 StartupModule()이에요. iOS 생명주기 중 application:openURL:options: 이전에 등록되어야 딥링크 응답이 정상 수신돼요.

리스너는 단 한 번만 등록하세요
FIOSCoreDelegates::OnOpenURLwithOptions.AddStatic은 "추가 등록" 방식이라 여러 번 호출하면 그만큼 중복 실행돼요. 게임 부팅 시퀀스에서 1회만 호출되도록 가드해야 해요.

cpp
// StoveLinkBridge.h
#pragma once
// iOS 딥링크 수신 등록 (게임 시작 시점에 1회 호출)
void RegisterStoveDeepLinkBridge();
cpp
// StoveLinkBridge.cpp
#include "StoveLinkBridge.h"
#include "CoreMinimal.h"

#if PLATFORM_IOS
#import <UIKit/UIKit.h>
#import <Foundation/Foundation.h>

#include "IOS/IOSAppDelegate.h"
#include "Async/Async.h"

#include "StoveDeepLinkGameHandler.h"
#endif

#if PLATFORM_IOS
static void OnOpenURLwithOptions(UIApplication* application, NSURL* url, NSDictionary* options)
{
    if (!url) return;
    NSString* abs = [url absoluteString];
    if (!abs) return;

    const FString UrlString = UTF8_TO_TCHAR([abs UTF8String]);
    AsyncTask(ENamedThreads::GameThread, [UrlString]()
    {
        StoveDeepLinkGameHandler::CacheIfStoveLink(UrlString);
    });
}
#endif

void RegisterStoveDeepLinkBridge()
{
#if PLATFORM_IOS
    FIOSCoreDelegates::OnOpenURLwithOptions.AddStatic(&OnOpenURLwithOptions);
#endif
}
cpp
// GameInstance에서 1회 등록
#include "StoveSDKGameInstance.h"
#include "StoveLinkBridge.h"

void UStoveSDKGameInstance::Init()
{
    Super::Init();
    #if PLATFORM_IOS
        RegisterStoveDeepLinkBridge();
    #endif
}

  • iOS — URL Scheme 등록
    • Info.plistCFBundleURLTypes > CFBundleURLSchemes에 게임 BundleID를 추가해요. (예: $(PRODUCT_BUNDLE_IDENTIFIER))
    xml
    <key>CFBundleURLTypes</key>
    <array>
        <dict>
            <key>CFBundleTypeRole</key>
            <string>Editor</string>
            <key>CFBundleURLSchemes</key>
            <array>
                <string>$(PRODUCT_BUNDLE_IDENTIFIER)</string>
            </array>
        </dict>
    </array>
    

  • StoveDeepLinkGameHandler::HandleDeepLink_OnGameThread 호출
    • SDK 로그인·캐릭터 설정이 완료된 게임 메인 페이지 시점에 호출하면 캐시된 딥링크가 SDK 기능으로 디스패치돼요. StoveDeepLinkGameHandler는 CP사에서 직접 관리·수정 가능한 영역이라 URI 패턴 확장 시 자유롭게 변경할 수 있어요.
    cpp
    #include "StoveDeepLinkGameHandler.h"
    
    // 딥링크 사용 호출
    StoveDeepLinkGameHandler::HandleDeepLink_OnGameThread();
    

딥링크 호출 처리

parseStoveLink(Android: StoveDeepLinkManager.parseStoveLink, iOS: [SGSDeepLinkManager parseStoveLink], Unreal: StoveDeepLinkGameHandler::HandleDeepLink_OnGameThread)가 호출되면, 수신된 URI 경로별로 아래 SDK 기능이 실행돼요.


  • 쿠폰 등록 처리 (stovelink/coupon?pin={couponCode})
    • pin 파라미터의 쿠폰 코드를 추출해 SDK 쿠폰 등록 API를 호출해요. 이용자 로그인·캐릭터 설정이 완료된 시점이어야 정상 등록돼요.

  • 수동 팝업 호출 처리 (stovelink/popup/manual?popupnotice_param={location})
    • popupnotice_param으로 지정된 위치 ID의 수동 팝업을 띄워요. 파트너스에 사전 등록된 팝업이 있어야 정상 노출돼요.

  • 특정 URL 로드 처리 (stovelink/popup/load?url={url})
    • url 파라미터로 전달된 외부 URL을 WebView 팝업으로 띄워요. URL은 반드시 URL-encoded 상태로 전달돼야 해요.

  • 캐시샵 진입 처리 ({packageName}://cashshop)
    • 인게임 캐시샵 화면으로 이동시켜요. 게임 측 라우팅과 매핑되어 있어야 동작해요.

  • DeepLinkManager 확장 — 신규 URI 패턴 추가
    • StoveDeepLinkManager / SGSDeepLinkManager / StoveDeepLinkGameHandler는 CP사에서 직접 관리·수정 가능한 영역이에요. 신규 URI 패턴(예: 이벤트 페이지·친구 초대 등)을 추가하려면 해당 클래스의 디스패치 로직을 확장해 새 URI를 게임/SDK API에 매핑하세요.

예외 처리


  • 잘못된 URI 포맷 수신 시 처리
    • 필수 파라미터 누락(예: stovelink/couponpin 없음)이나 알 수 없는 경로가 들어오면 DeepLinkManager에서 분기 처리로 무시하거나, 이용자에게 안내 메시지를 띄우세요. URI 검증 로직은 SDK가 아닌 CP사 매니저 클래스(StoveDeepLinkManager / SGSDeepLinkManager / StoveDeepLinkGameHandler)에서 구현해요.

  • SDK 로그인·캐릭터 설정 미완료 상태의 딥링크 큐잉
    • 딥링크는 앱 실행 시점에 수신되지만, 실제 처리(parseStoveLink / HandleDeepLink_OnGameThread)는 SDK 로그인과 캐릭터 설정이 완료된 게임 메인 페이지 시점에 호출하세요. 그 이전에 수신된 URI는 setData/setURL로 매니저에 보관해 두고, 메인 페이지 진입 콜백에서 한 번에 처리하면 돼요.

  • iOS 13 이상 자동 실행 차단 대응
    • iOS 13부터는 보안 정책으로 브라우저 onLoad 단계에서 딥링크 자동 실행이 차단돼요. 스토브 랜딩 페이지가 자동으로 이용자에게 실행 버튼 클릭을 유도하므로 게임 측 추가 구현은 필요 없어요. 단, 자체 웹 페이지에서 딥링크를 트리거하는 구조라면 이용자 직접 클릭 UI를 반드시 마련하세요.

  • 딥링크 중복 호출 방지 (Unreal iOS)
    • Unreal iOS는 FIOSCoreDelegates::OnOpenURLwithOptions.AddStatic 방식이라 여러 번 호출 시 그만큼 리스너가 누적돼 동일 딥링크가 중복 처리돼요. RegisterStoveDeepLinkBridge()는 게임 부팅 시퀀스에서 단 한 번만 호출되도록 가드하세요. Android는 setData가 매번 덮어쓰는 구조라 별도 가드가 필요 없어요.



직접 문의하고 싶으신가요? stove.developers@smilegate.com