For AI agents: a documentation index is available at /docs/llms.txt. Append .md to any page URL for markdown, or send Accept: text/markdown.
Flutter SDK 3
이 문서는 Amplitude 애널리틱스 Flutter SDK에 대한 공식 문서입니다.
Flutter SDK 4.0 출시
Amplitude Flutter SDK의 개선된 버전을 이제 사용할 수 있습니다. Amplitude Flutter SDK 4.0은 기본 이벤트 트래킹, 향상된 마케팅 어트리뷰션 추적 및 macOS 지원을 제공합니다. Amplitude는 프로덕트 분석과 마케팅 분석 사용 사례 모두에 Flutter SDK 4.0을 권장합니다. 최신 Flutter SDK 4.0으로 업그레이드하세요. 자세한 내용은 마이그레이션 가이드를 참조하십시오.
호환성
Amplitude Flutter v3.11.0부터 Amplitude는 최신 Gradle을 지원하기 위해 Kotlin 버전을 v1.7.10으로 올렸습니다. Gradle 버전 6.7.1 이전의 경우 Amplitude Flutter v3.10.0을 사용하십시오. 다음 매트릭스는 Amplitude Flutter SDK 버전의 최소 지원을 보여줍니다.
Amplitude Flutter 3.16.5부터는 Flutter 웹용 SDK가 package:js ^v0.6.3에서 dart:js_interop 으로 전환되었으며, 이 경우 Dart 3.1 이상이 필요합니다.
| Amplitude Flutter | 다트 | Gradle | Android Gradle 플러그인 | Kotlin Gradle 플러그인 |
|---|---|---|---|---|
| >= 3.16.5 | >= 3.1 | 6.7.1 | 3.6.4 | 1.7.10 |
| >= 3.11 <= 3.16.4 | >=2.12 | 6.7.1 | 3.6.4 | 1.7.10 |
SDK 설치
pubspec.yaml파일로 이동하여 Amplitude SDK를 종속성으로 추가하세요.ymldependencies: amplitude_flutter: ^3.13.0터미널에서 실행하여 SDK를 설치합니다
flutter pub get.
iOS 설치
Podfile에 platform :ios, '10.0'을 추가합니다.
비트코드를 활성화하려면 Flutter의 문서를 따르세요.
SDK 초기화
계측을 하기 전에 Amplitude 프로젝트의 API 키를 사용하여 SDK를 초기화하십시오.
import 'package:amplitude_flutter/amplitude.dart';
import 'package:amplitude_flutter/identify.dart';
class YourClass {
Future<void> exampleForAmplitude() async {
// Create the instance
final Amplitude analytics = Amplitude.getInstance(instanceName: "project");
// Initialize SDK
analytics.init(widget.apiKey);
// Log an event
analytics.logEvent('MyApp startup', eventProperties: {
'friend_num': 10,
'is_heavy_user': true
});
}
}
SDK 구성
Amplitude Flutter SDK는 Amplitude Android 유지보수 SDK, Amplitude iOS 유지보수 SDK 및 Amplitude JavaScript 유지보수 SDK 위에서 실행됩니다. 다음은 Dart의 설정 가능한 구성 옵션입니다. 기타 기본 구성의 경우:
- Android의 경우 Android 구성을 참조하십시오.
- iOS의 경우 iOS 구성을 참조하십시오.
- 브라우저에서 브라우저 구성을 참조하십시오.
| 이름 | 설명 | 기본값 |
|---|---|---|
enableCoppaControl() | IDFA, IDFV, 도시, IP 주소 및 위치 추적에 대한 COPPA(아동 온라인 개인정보 보호법) 제한 사항을 활성화하십시오. Flutter 웹에서는 지원되지 않습니다. | Coppa 제어는 기본적으로 비활성화되어 있습니다. |
disableCoppaControl() | IDFA, IDFV, 도시, IP 주소 및 위치 추적에 대한 COPPA(아동 온라인 개인정보 보호법) 제한 사항을 비활성화하십시오. Flutter 웹에서는 지원되지 않습니다. | Coppa 제어는 기본적으로 비활성화되어 있습니다. |
setMinTimeBetweenSessionsMillis() | int. 포그라운드 추적이 비활성화된 경우 세션 시간 초과에 걸리는 시간입니다. 예를 들어, Amplitude.getInstance().setMinTimeBetweenSessionsMillis(100000). 입력 매개 변수는 밀리초 단위입니다. | 5 minutes |
setEventUploadThreshold() | int. 업로드를 강제하기 전에 SDK가 로컬에 저장하는 최대 이벤트 수입니다. 예를 들어 Amplitude.getInstance().setEventUploadThreshold(30). | 30 |
setEventUploadPeriodMillis() | int. SDK가 보류 중인 이벤트를 서버에 업로드하기 위해 대기하는 시간(밀리초)입니다. 예를 들어 Amplitude.getInstance().setEventUploadPeriodMillis(30000). | 30000 |
setServerZone() | String. 전송할 서버 영역입니다. 이 설정을 기반으로 서버 URL을 조정합니다. 예를 들어 Amplitude.getInstance().setServerZone(EU). | US |
setServerUrl() | String. SDK가 이벤트를 전송할 API 엔드포인트 URL입니다. ServerZone에서 이 URL을 자동으로 선택합니다. 예를 들어 Amplitude.getInstance().setServerUrl(https://www.your-server-url.com). | https://api2.amplitude.com/ |
setUseDynamicConfig() | bool. 사용자의 지리적 위치를 기반으로 최적의 서버 URL을 자동으로 찾습니다. 예를 들어 setUseDynamicConfig(true). | false |
setOptOut() | bool. 사용자를 추적에서 해제합니다. 예를 들어 Amplitude.getInstance().setOptOut(true). | false |
trackingSessionEvents() | bool. 사용자 세션의 시작 및 종료에 해당하는 "[Amplitude] 세션 시작" 및 "[Amplitude] 세션 종료" 세션 이벤트를 자동으로 기록할지 여부입니다. Flutter 웹에서는 지원되지 않습니다. 자세히 알아보기. | false |
useAppSetIdForDeviceId() | Android에만 해당됩니다. Android에서 앱 세트 ID를 기기 ID로 사용할지 여부입니다. 필요한 모듈과 권한에 대해서는 앱 세트 ID 섹션을 참조하십시오. 예를 들어 Amplitude.getInstance().useAppSetIdForDeviceId(true). | 기본적으로 deviceId는 UUID+"R"입니다. |
일괄 처리 동작 구성
고성능 환경을 지원하기 위해 SDK는 이벤트를 일괄 처리로 전송합니다. SDK는 메소드에 logEvent의해 기록된 모든 이벤트를 메모리 대기열에 저장합니다. SDK는 백그라운드에서 이벤트를 일괄적으로 플러시합니다. setEventUploadThreshold를 사용하여 배치 동작을 사용자 정의할 수 있습니다. 기본적으로 serverUrl은 https://api2.amplitude.com/입니다. 이 SDK는 배치 모드 또는 배치 API 엔드포인트를 지원하지 않습니다.
// Events queued in memory will flush when number of events exceed upload threshold
// Default value is 30
Amplitude.getInstance().setEventUploadThreshold(1);
// Events queue will flush every certain milliseconds based on setting
// Default value is 30,000 milliseconds
Amplitude.getInstance().setEventUploadPeriodMillis(10000);
EU 데이터 상주
버전 3.6.0부터는 클라이언트를 초기화한 후 Amplitude의 EU 서버로 데이터를 전송하도록 서버 영역을 구성할 수 있습니다. SDK는 서버 영역을 설정한 경우 이를 기반으로 데이터를 전송합니다. 서버 영역 구성은 동적 구성도 지원합니다.
이전 버전의 경우 클라이언트를 초기화한 후 serverURL 속성을 구성하십시오.
EU 데이터 상주를 위해서는 Amplitude EU 내에서 프로젝트를 설정하십시오. Amplitude EU의 API 키를 사용하여 SDK를 초기화하십시오.
// For versions starting from 3.6.0
// No need to call setServerUrl for sending data to Amplitude's EU servers
Amplitude.getInstance().setServerZone("EU");
// For earlier versions
Amplitude.getInstance().setServerUrl("https://api.eu.amplitude.com")
이벤트 전송
이벤트는 사용자가 애플리케이션과 상호 작용하는 방식을 나타냅니다. 예를 들어, ‘버튼 클릭’은 추적하려는 동작일 수 있습니다.
Amplitude.getInstance().logEvent('BUTTON_CLICKED');
속성과 함께 이벤트 전송
이벤트에는 속성도 포함될 수 있습니다. 속성은 발생한 이벤트에 대한 컨텍스트를 제공합니다. 예를 들어, "마우스 오버 시간"은 "버튼 클릭"에 대한 관련 이벤트 속성일 수 있습니다.
Amplitude.getInstance().logEvent('BUTTON_CLICKED', {"Hover Time": "100ms"});
이벤트 플러시
SDK는 일반적으로 이벤트를 버퍼에 저장하고 주기적으로 플러시합니다. 이 동작은 구성이 가능합니다. 이벤트를 수동으로 플러시할 수도 있습니다.
Amplitude.getInstance().uploadEvents();
사용자 속성
사용자 속성은 사용자가 앱에서 작업을 수행할 때 사용자의 기기 세부 정보, 기본 설정, 언어 등을 이해하는 데 도움이 됩니다.
Amplitude Flutter identify메서드는 이 기능을 관리합니다. 사용하기 전에 identify을(를) 가져오세요.
import 'package:amplitude_flutter/identify.dart';
귀하의 개인정보 보호정책에 위배될 수 있는 전체 사용자 데이터를 추적하지 마십시오.
세트
set 는 사용자 속성의 값을 설정합니다. 또한 여러 identify 호출을 함께 연결할 수도 있습니다.
final Identify identify = Identify()
..set('gender','female')
..set('age',20);
Amplitude.getInstance().identify(identify);
setOnce
setOnce 는 사용자 속성의 값을 한 번만 설정합니다. setOnce를 사용하는 이후의 호출은 무시됩니다.
final Identify identify1 = Identify();
identify1.setOnce('sign_up_date', '2015-08-24');
Amplitude.getInstance().identify(identify1);
final Identify identify2 = Identify();
identify2.setOnce('sign_up_date', '2015-08-24');
Amplitude.getInstance().identify(identify2);// is ignored
추가
add는 사용자 속성을 일부 숫자 값만큼 증가시킵니다. 사용자 속성에 아직 값이 설정되어 있지 않은 경우 Amplitude는 해당 속성을 0으로 초기화한 후 증분합니다.
final Identify identify = Identify().add('karma', 0.123);
Amplitude.getInstance().identify(identify);
preInsert
사용자 속성에 값이 아직 존재하지 않는 경우 해당 값을 목록 시작 부분에 추가합니다.
사용자 속성에 아직 값이 설정되어 있지 않은 경우, Amplitude는 새 값을 사전 삽입하기 전에 속성을 빈 목록으로 초기화합니다. 사용자 속성에 기존 값이 있으면 아무 일도 일어나지 않습니다.
final Identify identify = Identify()
..preInsert('existing_list', 'some_property')
Amplitude.getInstance().identify(identify);
postInsert
사용자 속성에 값이 아직 존재하지 않는 경우 해당 값을 목록 끝에 추가합니다. 사용자 속성에 아직 값이 설정되어 있지 않은 경우, Amplitude는 새 값을 삽입하기 전에 속성을 빈 목록으로 초기화합니다. 사용자 속성에 기존 값이 있으면 아무 일도 일어나지 않습니다.
final Identify identify = Identify()
..postInsert('existing_list','some_property')
Amplitude.getInstance().identify(identify);
여러 사용자 속성 설정
setUserProperties을 단축어로 사용하여 여러 사용자 속성을 한 번에 설정할 수 있습니다. 이 메서드는 Identify.set 및 identify를 감싸는 래퍼입니다.
Map<String, dynamic> userProps = {
'KEY': 'VALUE',
'OTHER_KEY': 'OTHER_VALUE'
};
Amplitude.getInstance().setUserProperties(userProperties);
사용자 속성의 배열
배열을 사용자 속성으로 사용할 수 있습니다. 배열을 직접 설정하거나 append를 사용하여 배열을 생성할 수 있습니다.
const colors = ["rose", "gold"];
const numbers = [4, 5];
final Identify identify = Identify()
..set("colors", colors)
..append("ab-tests", "campaign_a")
..prepend("existing_list", numbers);
Amplitude.getInstance().identify(identify);
앞에 추가 및 뒤에 추가
prepend사용자 속성 앞에 값 또는 값들을 추가합니다.append사용자 속성 배열에 값을 추가합니다.
사용자 속성에 아직 값이 설정되어 있지 않은 경우, Amplitude는 새 값을 추가하기 전에 속성을 빈 목록으로 초기화합니다. 사용자 속성에 목록이 아닌 기존 값이 있는 경우 Amplitude는 해당 값을 목록으로 변환하고 새 값을 추가합니다.
const array = ["some_string", 56];
final Identify identify = Identify()
..append("ab-tests", "new-user-test")
..prepend("some_list", array)
Amplitude.getInstance().identify(identify);
사용자 속성 제거
clearUserProperties 는 현재 사용자의 모든 사용자 속성을 지웁니다.
그 결과는 되돌릴 수 없습니다. Amplitude는 초기화 이전의 사용자의 사용자 속성 값을 전체 향후 이벤트와 동기화할 수 없습니다.
Amplitude.getInstance().clearUserProperties();
제거
remove 는 사용자 속성에서 하나 이상의 값을 제거합니다. 해당 항목이 사용자 속성에 존재하지 않는 경우 아무 작업도 수행되지 않습니다.
const array = ["some_string", 56];
final Identify identify = Identify()
..remove("ab-tests", "new-user-test")
..remove("some_list",array);
Amplitude.getInstance().identify(identify);
설정 해제
unset 사용자 속성을 설정해제하고 제거합니다.
final Identify identify = Identify()
..unset("ab-tests", "new-user-test")
..unset("some_list",array);
Amplitude.getInstance().identify(identify)
사용자 그룹
Amplitude는 사용자를 그룹에 할당하고 해당 그룹에 대해 고유 사용자별 수행 회수가와 같은 쿼리를 수행하는 것을 지원합니다. 그룹 구성원 중 적어도 한 명이 특정 이벤트를 수행한 경우 해당 그룹도 수행 회수가에 포함됩니다.
예를 들어 'orgId'를 사용하여 사용자가 속한 조직을 기준으로 사용자를 그룹화하려는 경우가 있습니다. Joe는 'orgId' '10'에 있고 Sue는 'orgId' '15'에 있습니다. Sue와 Joe는 둘 다 특정 이벤트를 수행합니다. 이벤트 세분화 차트에서 해당 조직을 쿼리할 수 있습니다.
그룹을 설정할 때 groupType 및 groupName를 정의하십시오. 이전 예시에서 'orgId'는 groupType이고 '10'과 '15'는 groupName에 대한 값입니다. groupType의 또 다른 예로는 'tennis' 및 'baseball'과 같은 groupName 값을 가진 'sport'가 있을 수 있습니다.
그룹을 설정하면 groupType:groupName도 사용자 속성으로 설정되며, 해당 사용자의 groupType에 대해 설정된 모든 기존 groupName 값과 해당 사용자 속성 값이 덮어쓰여집니다. groupType은 문자열이고, groupName는 사용자가 여러 그룹에 속해 있음을 나타내는 문자열 또는 문자열 배열일 수 있습니다.
Joe가 'orgId' '15'에 있으면 '15'groupName가 됩니다.
// set group with a single group name
Amplitude.getInstance().setGroup("orgId", "15");
만약 Joe가 ‘스포츠’, ‘테니스’, ‘축구’에 속해 있다면, ‘[테니스’, ‘축구]’가 groupName될 것입니다.
// set group with multiple group names
Amplitude.getInstance().setGroup("sport", ["tennis", "soccer"]);
이벤트 수준 그룹은 사용할 수 없으며 해당 그룹의 가용성은 아직 확인되지 않았습니다.
매출 추적
Amplitude는 사용자가 창출한 수익을 추적할 수 있습니다. Amplitude는 Amplitude의 이벤트 세분화 및 수익 LTV (Lifetime Value) 차트에서 사용하는 특수 필드를 갖춘 별개의 수익 객체를 통해 수익을 추적합니다. Amplitude는 플랫폼의 매출과 관련된 데이터를 자동으로 표시합니다.
Amplitude는 통화 전환을 지원하지 않습니다. 모든 수익 데이터를 전송하기 전에 원하는 통화로 표준화하십시오.
String productId = "product001";
int quantity = 2;
double price = 20;
double amount = 35;
Amplitude.getInstance().logRevenue(productId, quantity, price);
Amplitude.getInstance().logRevenueAmount(amount);
가격은 음수일 수 있으며, 이는 손실된 수익(예: 환불이나 비용)을 추적하는 데 유용할 수 있습니다.
그룹 사용자 속성
Group Identify API를 사용하여 특정 그룹의 속성을 설정하거나 업데이트하십시오. 다음 사항을 염두에 두십시오.
- 업데이트는 향후 이벤트에만 영향을 미치며 과거 이벤트를 업데이트하지는 않습니다.
- 최대 5개의 고유 그룹 유형과 총 10개의 그룹을 추적할 수 있습니다.
groupIdentify 메서드는 그룹 유형 문자열 매개변수, 그룹 이름 객체 매개변수 및 Amplitude가 그룹에 적용하는 Identify 객체를 허용합니다.
final Identify identify = Identify()
..set("gender", "female")
..set("age", 20);
Amplitude.getInstance().groupIdentify("groupType", "groupValue", identify);
사용자 세션
세션은 사용자가 앱을 포그라운드에 두는 기간입니다. 동일한 세션 내에서 기록된 이벤트는 동일한 session_id를 공유합니다. SDK는 세션을 자동으로 처리하므로 startSession()또는 endSession()과 같은 API를 수동으로 호출할 필요가 없습니다.
Amplitude는 이벤트를 세션별로 그룹화합니다. 세션은 시작 시간과 종료 시간을 가진 단일 사용자 활동을 나타냅니다. SDK마다 플랫폼의 요구 사항에 따라 세션을 다르게 추적합니다.
Android 및 iOS에서는 사용자 세션의 시작 및 종료에 해당하는 세션 시작 및 종료 이벤트를 자동으로 기록하도록 선택할 수 있습니다. Flutter Web은 이것을 지원하지 않습니다.
//Enable automatically log start and end session events
Amplitude.getInstance().trackingSessionEvents(true);
//Disable automatically log start and end session events
Amplitude.getInstance().trackingSessionEvents(false);
Flutter 웹은 trackingSessionEvents()를 지원하지 않습니다.
사용자 지정 사용자 ID 설정
앱에 사용자를 추적하려는 자체 로그인 시스템이 있는 경우 언제든지 setUserId를 호출할 수 있습니다.
Amplitude.getInstance().setUserId("test_user_id");
사용자 지정 장치 ID 설정
기본적으로 Amplitude는 장치 ID를 임의의 UUID로 생성합니다. setDeviceId를 호출하여 사용자 지정 장치 ID를 정의할 수 있습니다.
Amplitude.getInstance().setDeviceId('test_device_id');
Amplitude에서 사용하는 장치 ID를 검색할 수 있습니다. deviceIdAmplitude가 아직 장치 ID를 생성하지 않은 경우 Amplitude.getInstance().getDeviceId().이 메서드는 null을 반환할 수 null있습니다.
Amplitude는 사용자 기기를 추적하기 위한 자체 시스템을 갖추고 있지 않는 한 자체 기기 ID를 정의하지 않는 것을 권장합니다. 설정한 값이 고유한지 확인하여 deviceIdAmplitude 데이터의 다른 장치와의 충돌을 방지하십시오.
고급옵션 항목
COPPA 제어
IDFA, IDFV, 도시, IP 주소 및 위치 추적에 대한 COPPA(아동 온라인 개인 정보 보호법) 제한을 동시에 활성화 또는 비활성화할 수 있습니다.
13세 미만의 어린이로부터 정보를 요청하는 앱은 COPPA를 준수해야 합니다.
// Enable COPPA Control
Amplitude.getInstance().enableCoppaControl();
// Disable COPPA Control
Amplitude.getInstance().disableCoppaControl();
광고 ID
광고주 ID(IDFA라고도 함)는 iOS 및 Google Play 스토어에서 제공하는 고유 식별자입니다. 이는 단지 사용자의 기기뿐만 아니라 모든 사람에게 고유하기 때문에 모바일 어트리뷰션에 유용합니다. 모바일 어트리뷰션은 모바일 앱의 설치가 원래 소스(예: 광고 캠페인 또는 앱 스토어 검색)에 기인하는 것을 말합니다.
모바일 앱은 IDFA를 요청하기 위해 권한이 필요하며, 어린이를 대상으로 한 앱은 전혀 추적할 수 없습니다. IDFA를 사용할 수 없는 경우 대안으로 IDFV, 기기 ID 또는 이메일 로그인 시스템을 고려하십시오.
자세한 내용은 iOS 광고 ID 또는 Android 광고 ID를 참조하십시오.
추적 거부
사용자는 추적을 완전히 거부하기를 원할 수 있습니다. 이는 Amplitude가 어떤 이벤트도 추적하지 않으며 브라우징 기록도 추적하지 않음을 의미합니다. setOptOut은 사용자의 개인 정보 보호 요청을 충족할 수 있는 방법을 제공합니다.
//Disables instrumentation
Amplitude.getInstance().setOptOut(true);
//Enables instrumentation
Amplitude.getInstance().setOptOut(false);
동적 구성
Flutter SDK를 사용하면 사용자가 동적 구성을 사용하도록 앱을 구성할 수 있습니다. 이 기능은 앱 사용자의 위치를 기반으로 최적의 서버 URL을 자동으로 찾습니다.
- 자체 프록시 서버를 보유하고 있고
setServerUrlAPI를 사용하는 경우에는 동적 구성을 사용하지 마십시오. - 중국 본토에 사용자가 있는 경우, Amplitude는 동적 구성을 사용하는 것을 권장합니다.
- 기본적으로 이 기능은 해제되어 있습니다. 이를 사용하려면 명시적으로 활성화해야 합니다.
- 기본적으로 이 기능은 Amplitude의 미국 서버에 대한 서버 URL을 반환합니다. Amplitude의 EU 서버로 데이터를 전송해야 하는 경우,
setServerZone을 사용하여 이를 EU 지역으로 설정하세요.
Amplitude.getInstance().setUseDynamicConfig(true);
Flutter 웹 지원
Flutter 웹 지원은 웹에서도 모바일에서도 동일한 경험을 제공합니다. Amplitude Flutter SDK는 v3.8.0부터 Flutter 웹을 지원합니다.
Flutter 웹은 다음 기능을 지원하지 않습니다:
enableCoppaControl.disableCoppaControl.trackingSessionEvents. Flutter Web은Start Session이벤트 전송을 자동으로 지원하지 않지만End Session, SDK는 자동으로 세션 ID를 추적합니다. 이 도구를 사용자 세션 및 패스파인더 차트와 같은 일반적인 세션 기반 분석에 사용할 수 있습니다. 자세한 내용은 Amplitude의 세션 추적에 대한 도움말 문서를 참조하십시오.useAppSetIdForDeviceId.
사용
다음 Amplitude-JavaScript 스니펫을 Flutter 프로젝트의 web/index.html에 추가하세요. Amplitude-JavaScript 버전은 v8.12.0 이상이어야 합니다.
<script type="text/javascript" defer>
(function (e, t) {
var n = e.amplitude || { _q: [], _iq: {} };
var r = t.createElement("script");
r.type = "text/javascript";
r.integrity =
"sha384-UcvEbHmT0LE2ZB30Y3FmY3Nfw6puAKXz/LpCFuoywywYikMOr/519Uu1yNq2nL9w";
r.crossOrigin = "anonymous";
r.async = true;
r.src = "https://cdn.amplitude.com/libs/amplitude-8.12.0-min.gz.js";
r.onload = function () {
if (!e.amplitude.runQueuedFunctions) {
console.log("[Amplitude] Error: could not load SDK");
}
};
var s = t.getElementsByTagName("script")[0];
s.parentNode.insertBefore(r, s);
function i(e, t) {
e.prototype[t] = function () {
this._q.push([t].concat(Array.prototype.slice.call(arguments, 0)));
return this;
};
}
var o = function () {
this._q = [];
return this;
};
var a = [
"add",
"append",
"clearAll",
"prepend",
"set",
"setOnce",
"unset",
"preInsert",
"postInsert",
"remove",
];
for (var c = 0; c < a.length; c++) {
i(o, a[c]);
}
n.Identify = o;
var u = function () {
this._q = [];
return this;
};
var l = [
"setProductId",
"setQuantity",
"setPrice",
"setRevenueType",
"setEventProperties",
];
for (var p = 0; p < l.length; p++) {
i(u, l[p]);
}
n.Revenue = u;
var d = [
"init",
"logEvent",
"logRevenue",
"setUserId",
"setUserProperties",
"setOptOut",
"setVersionName",
"setDomain",
"setDeviceId",
"enableTracking",
"setGlobalUserProperties",
"identify",
"clearUserProperties",
"setGroup",
"logRevenueV2",
"regenerateDeviceId",
"groupIdentify",
"onInit",
"logEventWithTimestamp",
"logEventWithGroups",
"setSessionId",
"resetSessionId",
"getDeviceId",
"getUserId",
"setMinTimeBetweenSessionsMillis",
"setEventUploadThreshold",
"setUseDynamicConfig",
"setServerZone",
"setServerUrl",
"sendEvents",
"setLibrary",
"setTransport",
];
function v(e) {
function t(t) {
e[t] = function () {
e._q.push([t].concat(Array.prototype.slice.call(arguments, 0)));
};
}
for (var n = 0; n < d.length; n++) {
t(d[n]);
}
}
v(n);
n.getInstance = function (e) {
e = (!e || e.length === 0 ? "$default_instance" : e).toLowerCase();
if (!Object.prototype.hasOwnProperty.call(n._iq, e)) {
n._iq[e] = { _q: [] };
v(n._iq[e]);
}
return n._iq[e];
};
e.amplitude = n;
})(window, document);
</script>
관련 호환성 리소스
Android Gradle 플러그인 호환성, Gradle 호환성 및 Kotlin 호환성에 대해 자세히 알아보세요.
문제 해결
iOS에서 비트코드를 활성화하는 데 문제가 있다면, Flutter의 문서를 따르세요.
이 내용이 도움이 되었나요?