- 마지막 업데이트
딥링크
이해하기
딥링크는 외부로부터 특정 주소나 값을 전달받아 게임(앱)을 실행하고, 게임 내 특정 화면으로 이동시키는 기능이에요.
쿠폰 등록, 이벤트 참여, 캐시샵 진입, 특정 팝업 호출 등 다양한 이용자 유입 시나리오에서 활용돼요.
스토브 플랫폼은 파트너스에서 딥링크를 손쉽게 생성·관리할 수 있는 기능을 제공하며, 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은 모바일에서 특정 링크 클릭 시 지정된 게임(앱)을 실행하기 위해 게임(앱)에서 정의해야 하는 값이에요.
형식 : 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 로그인 및 캐릭터 설정 완료
Initialize→Login→SetCharacter순서로 SDK 초기화 및 이용자 인증을 완료해요.- 딥링크 처리는 캐릭터 설정 완료 이후 시점에 호출하는 것을 권장해요.
- 수신되는 Deep Link 데이터 읽기
- Android는
Activity.onNewIntent또는onCreate에서 수신되는 Intent로부터 데이터를 읽어요. - iOS는
application:openURL:options:메서드를 통해 NSURL을 수신해요. - Unity는 Native 플러그인을 통해 전달받은 URL을 게임 코드에서 처리해요.
- Android는
- 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> - 메인 Activity에
- MainActivity onCreate / onNewIntent 처리
onCreate와onNewIntent에서 전달받은 Intent를StoveDeepLinkManager.setData(intent)로 등록해요. 두 메서드 모두에서 처리해야 콜드 스타트(앱 미실행 → 딥링크로 실행)와 핫 스타트(앱 실행 중 딥링크 수신) 양쪽이 모두 지원돼요.- 수신된 Intent 데이터의 직접 파싱 방식은 Android 공식 가이드를 참고하세요.
- StoveDeepLinkManager 클래스 활용
- 샘플 클래스는 SDK 포럼에서 제공되며, CP사(개발사)에서 직접 관리·수정 가능한 영역이에요. URI 패턴이 늘어나면 이 클래스를 확장해 처리 로직을 추가하면 돼요.
- StoveDeepLinkManager.kt · StoveDeepLinkManager.java
- parseStoveDeepLink 호출 및 Stove SDK Method 실행
- SDK 로그인·캐릭터 설정이 완료된 게임 메인 페이지 시점에
StoveDeepLinkManager.parseStoveLink(activity)를 호출해요. SDK가 등록된 URI를 파싱해 대응되는 기능(쿠폰 등록, 팝업 호출 등)을 실행해요.
- SDK 로그인·캐릭터 설정이 완료된 게임 메인 페이지 시점에
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.plist의CFBundleURLTypes > 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 공식 가이드를 참고하세요.
- iOS 시스템이 딥링크 URL을 전달하는
- SGSDeepLinkManager 클래스 활용
- 샘플 클래스는 SDK 포럼에서 제공되며, CP사에서 직접 관리·수정 가능한 영역이에요. URI 패턴 확장 시 이 클래스를 수정해 처리 로직을 추가하면 돼요.
- SGSDeepLinkManager.h · SGSDeepLinkManager.m
- parseStoveLink 호출 및 Stove SDK Method 실행
- SDK 로그인·캐릭터 설정이 완료된 게임 메인 페이지 시점에
[[SGSDeepLinkManager sharedInstance] parseStoveLink]를 호출하면 SDK가 등록된 URI를 파싱해 대응되는 기능을 실행해요.
- SDK 로그인·캐릭터 설정이 완료된 게임 메인 페이지 시점에
#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 공식 가이드는 딥링크 매뉴얼을 참고하세요.
- Unity 내장
- Android 빌드
- 위 Android 구현 섹션의
AndroidManifest.xml Intent Filter를 Unity Plugins/Android 또는 커스텀 manifest 템플릿에 동일하게 적용해요.
- 위 Android 구현 섹션의
- iOS 빌드
- 위 iOS 구현 섹션의
Info.plist URL Types > URL Schemes설정을 Xcode Post-Process(또는 PlayerSettings)에서 동일하게 적용해요.
- 위 iOS 구현 섹션의
- DeepLinkManager 호출 및 SDK Method 실행
Application.deepLinkActivated에서 받은 URL을 게임 측 매니저에서 파싱해 STOVE SDK API(쿠폰 등록·팝업 호출·캐시샵 진입 등)에 매핑해요. URI 형식과 매핑 대상은 딥링크 호출 처리 섹션을 참고하세요.
Unreal 구현
- StoveDeepLink 파일 추가
- StoveDeepLink.zip을 다운로드해 압축 해제 후 Unreal 프로젝트에 아래 파일들을 추가해요.
StoveDeepLink_APL.xmlStoveLinkBridge.h/StoveLinkBridge.cppStoveDeepLinkGameHandler.h/StoveDeepLinkGameHandler.cpp
- StoveDeepLink.zip을 다운로드해 압축 해제 후 Unreal 프로젝트에 아래 파일들을 추가해요.
- Android — Build.cs에 APL.xml 등록
- 프로젝트
Build.cs의 Android 분기에AdditionalPropertiesForReceipt로StoveDeepLink_APL.xml을 추가해요.
csharpif (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를 반드시 추가해야 해요. 자세한 방법은 엔진 코드 추가 가이드를 참고하세요.
- Unreal 엔진은 기본적으로 딥링크 응답을 처리하지 않으므로, 엔진 코드에
엔진 코드 수정이 필수예요
커스텀 엔진 빌드 환경에서만 동작하며, 수정 없이 빌드한 표준 엔진에서는 iOS 딥링크 응답을 수신할 수 없어요.
- iOS — DeepLink 수신 리스너 등록
- 프로젝트에
StoveLinkBridge.h/StoveLinkBridge.cpp를 추가하고,RegisterStoveDeepLinkBridge()를 게임 시작 시점에 한 번만 호출해 iOS 딥링크 응답 리스너를 등록해요. - 권장 호출 시점은
GameInstance::Init()또는StartupModule()이에요. iOS 생명주기 중application:openURL:options:이전에 등록되어야 딥링크 응답이 정상 수신돼요.
- 프로젝트에
리스너는 단 한 번만 등록하세요FIOSCoreDelegates::OnOpenURLwithOptions.AddStatic은 "추가 등록" 방식이라 여러 번 호출하면 그만큼 중복 실행돼요. 게임 부팅 시퀀스에서 1회만 호출되도록 가드해야 해요.
// StoveLinkBridge.h
#pragma once
// iOS 딥링크 수신 등록 (게임 시작 시점에 1회 호출)
void RegisterStoveDeepLinkBridge();
// 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
}
// GameInstance에서 1회 등록
#include "StoveSDKGameInstance.h"
#include "StoveLinkBridge.h"
void UStoveSDKGameInstance::Init()
{
Super::Init();
#if PLATFORM_IOS
RegisterStoveDeepLinkBridge();
#endif
}
- iOS — URL Scheme 등록
Info.plist의CFBundleURLTypes > 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(); - SDK 로그인·캐릭터 설정이 완료된 게임 메인 페이지 시점에 호출하면 캐시된 딥링크가 SDK 기능으로 디스패치돼요.
딥링크 호출 처리
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/coupon에pin없음)이나 알 수 없는 경로가 들어오면 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가 매번 덮어쓰는 구조라 별도 가드가 필요 없어요.
- Unreal iOS는