이 페이지에서

Flutter SDK 4

이 문서는 Amplitude 애널리틱스 Flutter SDK에 대한 공식 문서입니다. Flutter SDK를 사용하면 Flutter 애플리케이션에서 Amplitude로 이벤트를 전송할 수 있습니다.

호환성

Amplitude Flutter v4는 최신 Gradle을 지원하기 위해 Kotlin 버전을 v1.9.22로 변경합니다.

다음 매트릭스는 Amplitude Flutter SDK 버전의 최소 지원을 보여줍니다.

SDK 설치

다음 명령을 실행하여 amplitude_flutter의 최신 버전을 가져온 후, 이를 pubspec.yaml에 추가하고, 종속성을 검색하십시오.

bash
flutter pub add amplitude_flutter

iOS 설치

Podfile에 platform :ios, '13.0'을 추가합니다. Flutter 프로젝트의 ios 디렉토리에서 pod install를 실행하여 CocoaPods 종속성을 업데이트합니다.

비트코드를 활성화하려면 Flutter의 문서를 따르세요.

macOS 설치

Podfile에 platform :osx, '10.15'을 추가합니다. Flutter 프로젝트의 macos 디렉토리에서 pod install를 실행하여 CocoaPods 종속성을 업데이트합니다. 앱에 요청을 전송할 수 있는 com.apple.security.network.client 권한이 있는지 확인합니다. 다음을 포함하도록 macos/Runner/Release.entitlementsmacos/Runner/DebugProfile.entitlements 파일을 수동으로 편집합니다.

xml
	<key>com.apple.security.network.client</key>
	<true/>
자세한 내용은 Flutter의 문서를 참조하십시오.

웹 설치(선택 사항)

Flutter SDK는 Dart의 JavaScript 상호 운용성을 사용하여 Flutter 웹용 Browser SDK 2를 활성화합니다. 이를 위해서는 SDK를 글로벌 JavaScript 범위 첫 사용 후 사용할 수 있도록 해야 합니다. Flutter 프로젝트의 web/index.html에 다음 Browser SDK 2 스니펫을 추가하십시오.
html
<script type="text/javascript">
  !(function () {
    "use strict";
    !(function (e, t) {
      var r = e.amplitude || { _q: [], _iq: {} };
      if (r.invoked)
        e.console &&
          console.error &&
          console.error("Amplitude snippet has been loaded.");
      else {
        var n = function (e, t) {
            e.prototype[t] = function () {
              return (
                this._q.push({
                  name: t,
                  args: Array.prototype.slice.call(arguments, 0),
                }),
                this
              );
            };
          },
          s = function (e, t, r) {
            return function (n) {
              e._q.push({
                name: t,
                args: Array.prototype.slice.call(r, 0),
                resolve: n,
              });
            };
          },
          o = function (e, t, r) {
            e._q.push({ name: t, args: Array.prototype.slice.call(r, 0) });
          },
          i = function (e, t, r) {
            e[t] = function () {
              if (r)
                return {
                  promise: new Promise(
                    s(e, t, Array.prototype.slice.call(arguments)),
                  ),
                };
              o(e, t, Array.prototype.slice.call(arguments));
            };
          },
          a = function (e) {
            for (var t = 0; t < g.length; t++) i(e, g[t], !1);
            for (var r = 0; r < m.length; r++) i(e, m[r], !0);
          };
        r.invoked = !0;
        var c = t.createElement("script");
        ((c.type = "text/javascript"),
          (c.integrity =
            "sha384-R0H1kXlk6r2aEQMtwVcPolpk0NAuIqM/8NlxAv24Gr3/PBJPl+9elu0bc3o/FDjR"),
          (c.crossOrigin = "anonymous"),
          (c.async = !0),
          (c.src =
            "https://cdn.amplitude.com/libs/analytics-browser-2.11.10-min.js.gz"),
          (c.onload = function () {
            e.amplitude.runQueuedFunctions ||
              console.log("[Amplitude] Error: could not load SDK");
          }));
        var l = t.getElementsByTagName("script")[0];
        l.parentNode.insertBefore(c, l);
        for (
          var u = function () {
              return ((this._q = []), this);
            },
            p = [
              "add",
              "append",
              "clearAll",
              "prepend",
              "set",
              "setOnce",
              "unset",
              "preInsert",
              "postInsert",
              "remove",
              "getUserProperties",
            ],
            d = 0;
          d < p.length;
          d++
        )
          n(u, p[d]);
        r.Identify = u;
        for (
          var f = function () {
              return ((this._q = []), this);
            },
            v = [
              "getEventProperties",
              "setProductId",
              "setQuantity",
              "setPrice",
              "setRevenue",
              "setRevenueType",
              "setEventProperties",
            ],
            y = 0;
          y < v.length;
          y++
        )
          n(f, v[y]);
        r.Revenue = f;
        var g = [
            "getDeviceId",
            "setDeviceId",
            "getSessionId",
            "setSessionId",
            "getUserId",
            "setUserId",
            "setOptOut",
            "setTransport",
            "reset",
            "extendSession",
          ],
          m = [
            "init",
            "add",
            "remove",
            "track",
            "logEvent",
            "identify",
            "groupIdentify",
            "setGroup",
            "revenue",
            "flush",
          ];
        (a(r),
          (r.createInstance = function (e) {
            return ((r._iq[e] = { _q: [] }), a(r._iq[e]), r._iq[e]);
          }),
          (e.amplitude = r));
      }
    })(window, document);
  })();
</script>

SDK 초기화

이벤트 전송

이 SDK는 HTTP V2 API를 사용하며 이벤트에 대해 동일한 제약 조건을 따릅니다. SDK에 기록되는 모든 이벤트에 deviceId(기본적으로 포함됨) 또는 userId 중 적어도 하나가 포함되어 있는지 확인하고, 각 필드에 대한 HTTP API의 제약 조건을 준수하십시오.

계측 문제를 방지하려면 장치 ID 및 사용자 ID는 5자 이상 길이의 문자열이어야 합니다. 이벤트에 포함된 장치 ID 또는 사용자 ID가 너무 짧은 경우, Amplitude는 이벤트에서 해당 ID 값을 제거합니다. 이벤트에 userId 또는 deviceId 값이 없는 경우, Amplitude는 400 상태 코드로 업로드를 거부할 수 있습니다. minIdLength 구성 옵션을 설정하여 기본 최소 길이인 5자를 재정의합니다.

애플리케이션을 계측하기 전에 Amplitude 프로젝트의 API 키를 사용하여 SDK를 초기화하십시오.

dart
import 'package:amplitude_flutter/amplitude.dart';
import 'package:amplitude_flutter/configuration.dart';
import 'package:amplitude_flutter/events/base_event.dart';
class YourClass {
  Future<void> exampleForAmplitude() async {
    // Create and initialize the instance
    final Amplitude amplitude = Amplitude(Configuration(
        apiKey: 'YOUR-API-KEY',
    ));
    // Wait until the SDK is initialized
    await amplitude.isBuilt;
    // Track an event
    amplitude.track(BaseEvent(
        eventType: 'BUTTON_CLICKED',
        eventProperties: {'Hover Time': '100ms'},
    ));
    // Send events to the server
    amplitude.flush()
  }
}

SDK 구성

Android 및 iOS용 구성

웹 및 Android용 구성

Android용 구성

웹용 구성

  • appVersion
    • 설명: String. 추적되는 이벤트에 대한 앱 버전을 설정합니다. 이 버전은 사용자의 애플리케이션 버전일 수 있습니다. 예를 들어 "1.0.0".
    • 기본값: null
  • cookieOptions.domain
    • 설명: String. 생성된 쿠키의 도메인 속성을 설정합니다.
    • 기본값: null
  • cookieOptions.expiration
    • 설명: int. 생성된 쿠키의 만료 기간을 일수로 설정합니다.
    • 기본값: 365일
  • cookieOptions.sameSite
    • 설명: String. 생성된 쿠키의 SameSite속성을 설정합니다.
    • 기본값: null
  • cookieOptions.secure
    • 설명: bool. 생성된 쿠키의 Secure속성을 설정합니다.
    • 기본값: null
  • cookieOptions.upgrade
    • 설명: bool. 유지 관리 Browser SDK에서 생성된 쿠키로부터의 업그레이드를 설정합니다. true인 경우 새 브라우저 SDK는 유지 관리 브라우저 SDK에서 생성한 쿠키를 삭제합니다. false인 경우 브라우저 SDK는 maintenance 브라우저 SDK에 의해 생성된 쿠키를 보관합니다.
    • 기본값: null
  • identityStorage
    • 설명: String. 사용자 ID를 위한 스토리지 API를 설정합니다. 옵션에는 document.cookie에 대한 쿠키, localStorage에 대한 localStorage, 또는 사용자 ID 저장를 거부하기 위한 '없음'이 포함됩니다.
    • 기본값: cookie
  • userId
    • 설명: String. 추적되는 사용자의 식별자를 설정합니다. minIdLength 옵션으로 재정의되지 않는 한 최소 길이는 5자여야 합니다.
    • 기본값: null
  • transport
    • 설명: String. 이름별로 사용할 요청 API를 설정합니다. 옵션에는 fetch에 대한 fetch, XMLHTTPRequest에 대한 xhr, 또는 navigator.sendBeacon에 대한 beacon가 포함됩니다.
    • 기본값: fetch
  • fetchRemoteConfig
    • 설명: bool. SDK가 원격 구성을 가져오는지 여부입니다. 자세한 내용은 브라우저 SDK 2를 참조하십시오. 기본값은 사용된 브라우저 SDK 버전에 따라 다릅니다. 브라우저 SDK 2.16.1 이상에서는 기본값이 true입니다.
    • 기본값: false (브라우저의 경우) SDK = 2.16.1)

일괄 처리 동작 구성

고성능 환경을 지원하기 위해 SDK는 이벤트를 일괄 처리로 전송합니다. track 메서드는 메모리에 모든 이벤트를 대기열에 넣고, SDK는 백그라운드에서 이벤트를 일괄적으로 플러시합니다.flushQueueSizeflushIntervalMillis을 사용하여 일괄 처리 동작을 사용자 지정할 수 있습니다. 기본적으로 serverUrlhttps://api2.amplitude.com/2/httpapi입니다.

한 번에 대량의 데이터를 일괄 전송해야 하는 경우 useBatchtrue로 설정하십시오. 이렇게 하면 setServerUrl이 일괄 이벤트 업로드 API https://api2.amplitude.com/batch로 설정됩니다. 일반 모드와 배치 모드 모두 동일한 이벤트 업로드 임계값과 플러시 시간 간격을 사용합니다.

dart
final Amplitude analytics = Amplitude(Configuration(
    apiKey: 'YOUR-API-KEY',
    flushIntervalMillis: 50000,
    flushQueueSize: 20,
));

EU 데이터 상주

Amplitude의 EU 서버로 데이터를 전송하기 위해 클라이언트를 초기화할 때 서버 영역을 구성하십시오. SDK는 사용자가 서버 영역을 설정한 경우 이를 기반으로 데이터를 전송합니다.

EU 데이터 상주를 위해서는 프로젝트를 Amplitude EU 내에 설정해야 합니다. Amplitude EU의 API 키를 사용하여 SDK를 초기화해야 합니다.

dart
final Amplitude analytics = Amplitude(Configuration(
    apiKey: 'YOUR-API-KEY',
    serverZone: ServerZone.eu,
));

추적

이벤트는 사용자가 애플리케이션과 상호 작용하는 방식을 나타냅니다. 예를 들어, "재생된 노래"는 추적하고자 하는 작업이 될 수 있습니다.

dart
amplitude.track(BaseEvent('Song Played'));

또한 이벤트 속성을 선택적으로 포함할 수도 있습니다.

dart
amplitude.track(BaseEvent('Song Played', eventProperties: {'title': 'Happy Birthday'}));
사용 가능한 모든 필드에 대해서는 BaseEvent 인터페이스를 참조하십시오.

Identify

Identify를 사용하면 이벤트를 전송하지 않고도 특정 사용자의 사용자 속성을 설정할 수 있습니다. SDK는 개별 사용자 속성에 대한 set, setOnce, unset, add, append, prepend, preInsert, postInsert, removeclearAll 작업을 지원합니다. 제공된 Identify 인터페이스를 사용하여 작업을 선언합니다. 하나의 Identify 객체에 여러 작업을 연결한 다음 Identify 객체를 Amplitude 클라이언트에 전달하여 서버로 전송할 수 있습니다.

이벤트 후에 Identify 호출을 전송하면 작업 결과가 대시보드 사용자의 프로필 영역에 즉시 나타나지만 SDK가 Identify 호출 후에 다른 이벤트를 전송할 때까지 차트 결과에 나타나지 않습니다. 결과적으로 Identify 호출은 향후 이벤트에만 영향을 줍니다. 자세한 내용은 사용자 속성 및 이벤트를 참조하십시오.

identify 메소드를 사용하여 사용자의 ID를 처리할 수 있습니다. 이러한 방법을 올바르게 사용하면 사용자가 장치, 브라우저 및 기타 플랫폼을 이동할 때 이벤트를 올바른 사용자에게 연결할 수 있습니다. 이러한 사용자 속성 작업이 포함된 identify 호출을 Amplitude 서버로 전송하여 사용자의 이벤트를 특정 사용자 속성과 연결합니다.

dart
final Identify identify = Identify()
    ..set('color', 'green')
amplitude.identify(identify)

모든 사용자 속성 지우기

사용자의 모든 사용자 속성을 제거하려면 clearAll을 사용하십시오. clearAll는 되돌릴 수 없는 작업이므로 주의해서 사용하십시오.

dart
final Identify identify = Identify()
    ..clearAll();
amplitude.identify(identify);

자동 캡처

SDK는 수동 계측 없이 세션, 앱 생애주기 분석 이벤트, 딥링크, 페이지 뷰 및 마케팅 어트리뷰션을 자동으로 추적합니다. AutocaptureDisabled(), AutocaptureEnabled() 또는 AutocaptureOptions()을 사용하여 autocapture 매개변수로 이 동작을 구성하십시오.

defaultTrackingDefaultTrackingOptions은(는) 더 이상 사용되지 않습니다. 대신 autocapture을 사용하십시오. defaultTracking를 전달하는 기존 코드는 계속 작동합니다. autocapture를 명시적으로 설정하지 않으면 SDK는 defaultTracking에서 이를 파생합니다. 둘 다 전달하면, autocapture이(가) 우선합니다.

autocapturedefaultTracking를 모두 생략하면 SDK에서 기본적으로 세션 추적을 활성화합니다. 웹에서도 이 기능을 통해 페이지 조회와 속성 추적도 가능해집니다.

SDK는 다음과 같은 자동 캡처 옵션을 지원합니다.

자동 캡처 활성화

모든 플랫폼에서 모든 자동 캡처 기능을 활성화하려면 AutocaptureEnabled()을 사용하십시오.

dart
Amplitude(
  Configuration(
    apiKey: 'YOUR-API-KEY',
    autocapture: AutocaptureEnabled(),
  )
);

iOS 및 Android에서 AutocaptureEnabled()은 세션, 앱 수명주기 및 딥 링크를 활성화합니다. 또한 웹에서는 페이지 뷰와 어트리뷰션도 활성화합니다.

자동 캡처 비활성화

모든 자동 캡처 기능을 비활성화하려면 AutocaptureDisabled()을 사용하십시오.

dart
Amplitude(
  Configuration(
    apiKey: 'YOUR-API-KEY',
    autocapture: AutocaptureDisabled(),
  )
);

자동 캡처 구성

세부적인 제어를 위해서는 AutocaptureOptions을 사용하십시오.

dart
Amplitude(
  Configuration(
    apiKey: 'YOUR-API-KEY',
    autocapture: AutocaptureOptions(
      sessions: true,
      appLifecycles: true,
      deepLinks: true,
      pageViews: PageViewsOptions(
        trackHistoryChanges: 'pathOnly',
        eventType: '[Amplitude] Page Viewed',
      ),
      attribution: AttributionOptions(
        excludeReferrers: ['example.com'],
        initialEmptyValue: 'NONE',
        resetSessionOnNewCampaign: true,
      ),
    ),
  )
);

Amplitude는 향후 버전에서 더 많은 자동 캡처 이벤트를 추가할 수 있으며 AutocaptureEnabled()이러한 이벤트에 대한 추적을 가능하게 할 수 있습니다.

세션 추적

sessionstrue로 설정하면 Amplitude는 세션 시작 및 세션 종료 이벤트를 추적합니다. sessionsfalse로 설정하면 Amplitude는 sessionId만 추적합니다.

dart
Amplitude(
  Configuration(
    apiKey: 'YOUR-API-KEY',
    autocapture: AutocaptureOptions(
      sessions: true,
    )
  )
);

애플리케이션 수명주기 추적

appLifecyclestrue로 설정하면 Amplitude는 iOS 및 Android에서 애플리케이션 생애주기 분석 이벤트를 추적합니다.

dart
Amplitude(
  Configuration(
    apiKey: 'YOUR-API-KEY',
    autocapture: AutocaptureOptions(
      appLifecycles: true,
    )
  )
);

이 설정을 활성화하면 Amplitude는 다음 이벤트를 추적합니다.

  • [Amplitude] Application Installed: 설치 직후 사용자가 애플리케이션을 처음 열 때 발생합니다.
  • [Amplitude] Application Updated: 사용자가 애플리케이션을 업데이트한 후 애플리케이션을 열 때 발생합니다.
  • [Amplitude] Application Opened: 사용자가 처음 연 후 애플리케이션을 실행하거나 포그라운드로 전환할 때 발생합니다.
  • [Amplitude] Application Backgrounded: 사용자가 애플리케이션을 백그라운드로 전환할 때 발생합니다.

추적되는 이벤트 속성에는 [Amplitude] Version, [Amplitude] Build, [Amplitude] Previous Version, [Amplitude] Previous Build, [Amplitude] From Background이 포함됩니다.

딥 링크 추적

딥 링크 추적은 Android에서만 사용할 수 있습니다. iOS 네이티브 SDK는 딥링크를 자동 캡처 옵션으로 노출하지 않으므로 Flutter SDK는 iOS에서 이 deepLinks 플래그를 무시합니다.

deepLinkstrue로 설정하면 Amplitude는 Android 애플리케이션에서 딥 링크와 관련된 이벤트를 추적합니다.

dart
Amplitude(
  Configuration(
    apiKey: 'YOUR-API-KEY',
    autocapture: AutocaptureOptions(
      deepLinks: true,
    )
  )
);

이 설정을 활성화하면 Amplitude는 URL 및 리퍼러 정보를 사용하여 [Amplitude] Deep Link Opened 이벤트를 추적합니다. 추적되는 이벤트 속성에는 [Amplitude] Link URL, [Amplitude] Link Referrer이 포함됩니다.

페이지 뷰 수

PageViewsOptions을 사용하여 웹에서 페이지 뷰 추적을 구성하십시오.

dart
autocapture: AutocaptureOptions(
  pageViews: PageViewsOptions(
    trackHistoryChanges: 'pathOnly',
    eventType: 'Page View',
  ),
)

페이지 뷰 추적을 비활성화하려면 PageViewsDisabled()을 사용하십시오.

dart
autocapture: AutocaptureOptions(
  pageViews: PageViewsDisabled(),
)

어트리뷰션

웹에서 마케팅 어트리뷰션 추적을 구성하려면 AttributionOptions을 사용하십시오.

dart
autocapture: AutocaptureOptions(
  attribution: AttributionOptions(
    excludeReferrers: ['example.com', 'internal.com'],
    initialEmptyValue: 'NONE',
    resetSessionOnNewCampaign: true,
  ),
)

어트리뷰션 추적을 비활성화하려면 AttributionDisabled()을 사용하십시오.

dart
autocapture: AutocaptureOptions(
  attribution: AttributionDisabled(),
)

사용자 그룹

Amplitude는 사용자를 그룹에 할당하고 해당 그룹에 대해 고유 사용자별 수행 회수가와 같은 쿼리를 실행할 수 있도록 지원합니다. 그룹 구성원 중 적어도 한 명이 특정 이벤트를 수행한 경우, 수행 회수가에 해당 그룹이 포함됩니다.

예를 들어 'orgId'를 사용하여 사용자를 사용자가 속한 조직별로 그룹화할 수 있습니다. Joe는 'orgId' '10'에 있고 Sue는 'orgId' '15'에 있습니다. Sue와 Joe는 둘 다 특정 이벤트를 수행합니다. 이벤트 세분화 차트에서 해당 조직을 쿼리할 수 있습니다.

그룹을 설정할 때 groupTypegroupName를 정의하십시오. 이전 예시에서 'orgId'는 groupType이고 '10'과 '15'는 groupName에 대한 값입니다. groupType의 또 다른 예로는 'tennis' 및 'baseball'과 같은 groupName 값을 가진 'sport'가 있을 수 있습니다.

그룹을 설정하면 groupType:groupName도 사용자 속성으로 설정되며, 해당 사용자의 groupType에 대해 설정된 모든 기존 groupName 값과 해당 사용자 속성 값이 덮어쓰여집니다. groupType은 문자열이고, groupName는 사용자가 여러 그룹에 속해 있음을 나타내는 문자열 또는 문자열 배열일 수 있습니다.

Joe가 'orgId' '15'에 속해 있으면, groupName은(는) '15'입니다.

dart
// set group with a single group name
amplitude.setGroup('orgId', '15');

Joe가 'sport' 'tennis' 및 'soccer'에 속해 있으면, groupName은 '["tennis", "soccer"]'입니다.

dart
// set group with multiple group names
amplitude.setGroup('sport', ['tennis', 'soccer']);

groups을 포함한 Event 객체를 track에 전달하여 이벤트 수준 그룹을 설정할 수도 있습니다. 이벤트 수준 그룹의 경우, 그룹 지정은 기록된 특정 이벤트에만 적용되며 setGroup를 사용하여 그룹을 명시적으로 설정하지 않는 한 사용자에게 지속되지 않습니다.

dart
amplitude.track(BaseEvent('event type',
    eventProperties: {'event property': 'event property value'},
    groups: {'ordId': '15'}));

그룹 식별

Group Identify API를 사용하여 특정 그룹의 속성을 설정하거나 업데이트하십시오. 다음 사항을 염두에 두십시오.

  • 업데이트는 향후 이벤트에만 영향을 미치며 과거 이벤트를 업데이트하지는 않습니다.
  • 최대 5개의 고유 그룹 유형과 총 10개의 그룹을 추적할 수 있습니다.

groupIdentify 메서드는 그룹 유형 문자열 매개변수, 그룹 이름 객체 매개변수 및 Amplitude가 그룹에 적용하는 Identify 객체를 허용합니다.

dart
final groupType = 'plan';
final groupName = 'enterprise';
final identify = Identify().set('key', 'value');
amplitude.groupIdentify(groupType, groupName, identify);

매출 추적

Amplitude는 사용자가 창출한 수익을 추적할 수 있습니다. Amplitude는 Amplitude의 이벤트 세분화 및 수익 LTV (Lifetime Value) 차트에서 사용하는 특수 필드를 갖춘 별개의 수익 객체를 통해 수익을 추적합니다. 그런 다음 Amplitude는 플랫폼에 자동으로 수익 데이터를 표시합니다. 수익 객체는 다음과 같은 특수 속성을 지원하며, eventProperties 필드를 통해 사용자 정의 속성도 지원합니다.

dart
final revenue = Revenue()
  ..productId = 'com.company.productId'
  ..price = 3.99
  ..quantity = 3;
amplitude.revenue(revenue);

사용자 지정 사용자 ID

앱에 사용자 추적을 위한 로그인 시스템이 있는 경우, 언제든지 setUserId을 호출하십시오.

이벤트 전송

이 SDK는 HTTP V2 API를 사용하며 이벤트에 대해 동일한 제약 조건을 따릅니다. SDK에 기록되는 모든 이벤트에 deviceId(기본적으로 포함됨) 또는 userId 중 적어도 하나가 포함되어 있는지 확인하고, 각 필드에 대한 HTTP API의 제약 조건을 준수하십시오.

계측 문제를 방지하려면 장치 ID 및 사용자 ID는 5자 이상 길이의 문자열이어야 합니다. 이벤트에 포함된 장치 ID 또는 사용자 ID가 너무 짧은 경우, Amplitude는 이벤트에서 해당 ID 값을 제거합니다. 이벤트에 userId 또는 deviceId 값이 없는 경우, Amplitude는 400 상태 코드로 업로드를 거부할 수 있습니다. minIdLength 구성 옵션을 설정하여 기본 최소 길이인 5자를 재정의합니다.

dart
amplitude.setUserId('user@amplitude.com');

사용자 지정 장치 ID

deviceId를 사용하여 새 장치 ID를 할당하십시오. 사용자 지정 장치 ID를 설정할 때는 값이 충분히 고유한지 확인하십시오. Amplitude는 UUID 사용을 권장합니다.

이벤트 전송

이 SDK는 HTTP V2 API를 사용하며 이벤트에 대해 동일한 제약 조건을 따릅니다. SDK에 기록되는 모든 이벤트에 deviceId(기본적으로 포함됨) 또는 userId 중 적어도 하나가 포함되어 있는지 확인하고, 각 필드에 대한 HTTP API의 제약 조건을 준수하십시오.

계측 문제를 방지하려면 장치 ID 및 사용자 ID는 5자 이상 길이의 문자열이어야 합니다. 이벤트에 포함된 장치 ID 또는 사용자 ID가 너무 짧은 경우, Amplitude는 이벤트에서 해당 ID 값을 제거합니다. 이벤트에 userId 또는 deviceId 값이 없는 경우, Amplitude는 400 상태 코드로 업로드를 거부할 수 있습니다. minIdLength 구성 옵션을 설정하여 기본 최소 길이인 5자를 재정의합니다.

dart
amplitude.setDeviceId('your-unique-device-id');

사용자가 로그아웃할 때 재설정

reset은 사용자가 로그아웃한 후 익명화하는 바로 가기입니다. 다음과 같은 작업을 수행합니다.

  • userIdnull로 설정합니다.
  • deviceId을 현재 구성에 따라 새 값으로 설정합니다.

userId이 비어 있고 deviceId가 완전히 새로운 값인 경우, 현재 사용자는 대시보드에 완전히 새로운 사용자로 표시됩니다.

dart
amplitude.reset();

Was this helpful?