이 동영상을 통해 연동 과정을 자세히 살펴보세요. 동영상과 아래의 서면 가이드를 모두 사용하는 것이 좋습니다.
시작하기 전에 SDK 전제 조건
Singular SDK는 Flutter용 플러그인으로 제공됩니다. 아래 지침은 Singular를 Flutter 앱에 연동하는 방법을 보여줍니다.
- 이 문서에서는 작동하는 Flutter 앱이 있다고 가정합니다.
- SDK를 초기화하려면 Singular SDK 키와 SDK 시크릿이 필요합니다. Singular 플랫폼의"개발자 도구 > SDK 연동 > SDK 키"에서 얻을 수 있습니다.
SDK 연동하기
Flutter 앱에 Singular 플러그인을 추가하려면 pubspec.yaml 파일에 다음 줄을 추가합니다:
dependencies:
singular_flutter_sdk: ^1.6.2
그런 다음 터미널에서 프로젝트로 이동하여 다음을 실행합니다:
flutter packages get
Android용 추가 단계
종속성 추가
Android 앱의 경우 다음과 같이 app/build.gradle의 종속성 목록에 Singular 라이브러리를 추가해야 합니다:
dependencies {
implementation fileTree(dir: 'libs', include: ['*.jar'])
implementation 'com.android.support:appcompat-v7:28.0.0'
//...
}
Singular SDK에는 Google Play 서비스 API 17.0.0+의 일부인 Google 모바일 광고 API가 필요합니다. 이미 Google Play 서비스를 앱에 연동한 경우 요구 사항이 충족됩니다. 아직 연동하지 않은 경우 앱의 build.gradle에 다음 종속성을 포함하여 Google 모바일 광고를 개별적으로 연동할 수 있습니다:
implementation 'com.google.android.gms:play-services-ads-identifier:18.0.1'
Singular SDK에 대한 전이 종속성을 비활성화한 경우 앱의 build.gradle에 다음을 추가합니다.
implementation 'com.android.installreferrer:installreferrer:2.2'
implementation 'com.google.android.gms:play-services-appset:16.0.2'
또한 앱이 삼성 갤럭시 스토어를 통해 배포되는 경우 삼성 갤럭시 스토어의 설치 리퍼러를 지원하기 위해 다음을 추가합니다:
implementation 'store.galaxy.samsung.installreferrer:samsung_galaxystore_install_referrer:4.0.0'
참고: 빌드 시 DuplicateClasses 오류가 표시되는 경우 이미 Google 플레이 서비스가 있을 수 있으며 종속성을 주석 처리할 수 있습니다.
권한 추가하기
AndroidManifest.xml 파일의 <manifest> 태그 아래에 이러한 권한을 추가합니다:
<uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
<uses-permission android:name="BIND_GET_INSTALL_REFERRER_SERVICE" />
<uses-permission android:name="com.android.vending.CHECK_LICENSE" />
또한 앱이 삼성 갤럭시 스토어를 통해 배포되고 안드로이드 11 이상을 대상으로 하는 경우 다음을 추가하여 삼성 갤럭시 스토어의 인스톨 리퍼러를 지원합니다:
<queries>
<package android:name="com.sec.android.app.samsungapps" />
</queries>
앱 빌드가 안드로이드 12/API 레벨 31 이상을 대상으로 하는 경우, 구글 광고 ID에 액세스할 수 있는 권한을 추가합니다:
<uses-permission android:name="com.google.android.gms.permission.AD_ID" />
참고: 키즈 SDK를 연동하는 경우 이 권한을 추가하지 마세요.
iOS용 추가 단계
Singular 플러그인을 사용하려면 애드서비스 프레임워크를 추가해야 합니다.
Singular SDK 초기화하기
앱을 열 때마다 Singular SDK 초기화 코드를 호출해야 합니다. 이는 모든 Singular 어트리뷰션 기능의 전제 조건이며, 새 사용자 세션을 Singular로 전송합니다(세션은 사용자 리텐션을 계산하는 데 사용됩니다).
초기화 코드는 앱이 열릴 때 가장 먼저 로드되는 기본 앱 위젯(예: main.dart)에 들어갑니다. 이 위젯은 상태 저장형이어야 하며 위젯의 initState() 메서드에 코드를 추가해야 합니다.
- 먼저 SingularConfig 객체를 생성해야 합니다. 이 객체에는 Singular SDK 키와 시크릿이 포함됩니다.
- 선택적으로 다양한 SDK 기능을 활성화하는 설정을 추가할 수 있습니다. 전체 옵션 목록을 참조하세요.
- 메타 인스톨 리퍼러 어트리뷰션 지원
"메타 인스톨 리퍼러" 어트리뷰션을 활성화하는 데 필요한 SDK 구성입니다 :
- Singular 구성 개체에서 Facebook 앱 ID를 입력합니다.
// To enable META Install Referrer config.facebookAppId = "INSERT YOUR FACEBOOK APP ID HERE";
- Singular 구성 개체에서 Facebook 앱 ID를 입력합니다.
예시:
import 'package:singular_flutter_sdk/singular.dart';
import 'package:singular_flutter_sdk/singular_config.dart';
//...
class MyHomePage extends StatefulWidget {
//...
}
class _MyHomePageState extends State<MyHomePage> {
//...
@override
void initState() {
super.initState();
//...
SingularConfig config = new SingularConfig('SDK KEY', 'SDK SECRET');
// Set hashed User ID if available
config.customUserId = "b642b4217b34b1e8d3bd915fc65c4452";
// For iOS (Remove this if you are not displaying an ATT prompt)!
config.waitForTrackingAuthorizationWithTimeoutInterval = 300;
// To enable SkAdNetwork Support
config.skAdNetworkEnabled = true;
// To enable META Install Referrer
config.facebookAppId = "INSERT YOUR FACEBOOK APP ID HERE";
// (optional) Using Singular Global Properties feature to capture
// third party identifiers. The respective SDK(s) must be initialized
// before the Singular SDK. Example of passing the CleverTapID.
// var cleverTapId = CleverTapPlugin.getCleverTapID();
// config.withGlobalProperty("CLEVERTAPID", cleverTapId, true);
Singular.start(config);
}
ATT 동의 처리하기(초기화 지연 설정)
ATT(앱 추적 투명성) 프롬프트 표시하기
iOS 14.5부터 앱은 기기의 IDFA를 포함하여 추적 목적에 도움이 되는 일부 사용자 데이터에 액세스하고 공유하기 전에 앱 추적 투명성 프레임워크를 사용하여 사용자 동의를 요청해야 합니다.
Singular는 IDFA를 통해 디바이스를 식별하고 인스톨 어트리뷰션을 수행함으로써 큰 이점을 얻을 수 있습니다( IDFA 없이 어트리뷰션을 수행하는 방법도 있지만). IDFA를 얻기 위해 사용자의 동의를 구할 것을 강력히 권장합니다.
ATT 응답을 기다리기 위해 초기화 지연하기
기본적으로 Singular SDK는 사용자 세션이 초기화될 때 이를 전송합니다. 새 디바이스에서 세션이 전송되면 즉시 Singular의 어트리뷰션 프로세스가 트리거되며, 이 프로세스는 해당 시점에 Singular에서 사용할 수 있는 데이터만을 기반으로 수행됩니다. 따라서 Singular SDK가 첫 번째 세션을 전송하기 전에 동의를 요청하고 IDFA를 검색하는 것이 필수적입니다.
사용자 세션의 실행을 지연시키려면 구성 객체에서 waitForTrackingAuthorizationWithTimeoutInterval 옵션을 사용하여 Singular SDK를 초기화하세요. 이 옵션은 위의 코드 샘플에 이미 포함되어 있습니다.
Flutter를 사용하는 경우 앱 트래킹 투명성을 구현하려면 타사 패키지를 사용해야 합니다. 예: Flutter에 app_tracking_transparency 플러그인을 추가합니다.
팁: 초기화 지연을 설정하면 앱 흐름은 다음과 같습니다:
- 앱이 열리면 Singular SDK가 세션과 사용자 이벤트를 기록하기 시작하지만 아직 Singular 서버로 전송하지는 않습니다.
- 앱 추적 투명성 동의가 승인/거부되거나 설정된 시간이 경과하면, SDK는 세션과 대기열에 있는 모든 이벤트를 (IDFA를 사용하거나 사용하지 않고) Singular 서버로 보냅니다.
- 그러면 Singular는 사용 가능한 경우 IDFA를 활용하여 어트리뷰션 프로세스를 시작합니다.
다음 표에는 이 연동을 사용하여 가능한 시나리오가 요약되어 있습니다:
시나리오 | IDFA 사용 가능 여부 |
사용자가 동의 대화 상자를 보고 설정된 시간이 경과하기 전에 동의를 합니다. | IDFA를 사용할 수 있음 |
사용자가 동의 대화 상자를 보고 설정된 시간이 경과하기 전에 동의를 거부합니다. | IDFA를 사용할 수 없음 |
설정된 시간이 만료된 후 사용자에게 동의 대화 상자가 표시되고 동의를 허용합니다. | 동의를 받은 후에 보고된 사용자 이벤트에 대해서만 IDFA를 사용할 수 있습니다. |
설정된 시간이 만료되면 사용자에게 동의 대화 상자가 표시되고 동의를 거부합니다. | IDFA를 사용할 수 없는 경우 |
사용자에게 동의 대화 상자가 표시되고 아무런 조치 없이 앱을 종료한 다음 설정된 시간이 만료된 후 앱을 열고 동의를 부여합니다. | 대기 중인 모든 이벤트는 앱이 다시 열리면 Singular 서버로 전송됩니다. 이러한 이벤트에는 IDFA를 사용할 수 없습니다. 동의가 부여된 후 추적된 모든 이벤트에는 IDFA가 연결됩니다. |
사용자에게 동의 대화 상자가 표시되고 아무 조치 없이 앱을 종료한 후 나중에 앱을 열고 동의를 거부합니다. | 대기 중인 모든 이벤트는 앱이 다시 열리면 Singular 서버로 전송됩니다. 이러한 이벤트 또는 이후 추적된 이벤트에 대해서는 IDFA를 사용할 수 없습니다. |
SKAdNetwork 지원 추가
앱에 SKAdNetwork 트래킹을 사용하려면 Singular를 초기화하기 전에 skAdNetworkEnabled 구성 옵션을 활성화하세요.
관리 모드(권장)
관리 모드에서는 Singular 플랫폼에서 설정할 수 있는 전환 모델에 따라 Singular가 자동으로 SKAdNetwork 전환 값을 관리합니다.
자세한 내용은 Singular의 전환 가치 관리 이해 및 SKAdNetwork 모델 구성 FAQ를 참조하세요. Singular와 함께 SKAdNetwork를 사용하는 단계별 가이드는 SKAdNetwork 시작하기를 참조하세요.
참고: SKAN 관리 모드는 위의 초기화 코드 스니펫에서 이미 활성화되어 있습니다. 이러한 구성 항목이 설정되어 있는지 확인하세요.
관리형 모드에서 SKAdNetwork를 활성화하려면 다음 코드를 사용합니다:
SingularConfig config = new SingularConfig('<SDK KEY>', '<SDK SECRET>');
config.skAdNetworkEnabled = true;
config.waitForTrackingAuthorizationWithTimeoutInterval = 300;
Singular.init(config);
수동 모드
이미 자체 전략과 도구를 사용하여 SKAdNetwork 전환 값을 관리하고 있는 경우, 수동 모드에서 SKAdNetwork를 활성화할 수 있습니다.
SingularConfig config = new SingularConfig('SDK KEY', 'SDK SECRET');
config.skAdNetworkEnabled = true;
config.manualSkanConversionManagement = true;
config.waitForTrackingAuthorizationWithTimeoutInterval = 300;
Singular.init(config);
그런 다음 전환 값을 업데이트하려면 다음 코드를 사용합니다:
ingular.skanUpdateConversionValue(conversionValue)
전환 값이 변경되는 시점을 추적하려면 다음 콜백 함수를 사용합니다:
config.conversionValueUpdatedCallback = (int conversionValue) {
print('Received conversionValueUpdatedCallback: ' + conversionValue.toString());
};
현재 전환 값을 검색하려면 다음 코드를 사용합니다:
Singular.skanGetConversionValue().then((conversionValue) {
print('conversion value: ' + conversionValue.toString());
});