Flutter SDK - 设置用户 ID

文档

设置用户 ID

向 Singular 发送内部用户 ID,以实现跨设备跟踪和用户级数据报告。

注:如果使用Singular 的跨设备解决方案,则必须在所有平台上收集用户 ID。

用户ID要求

隐私和最佳实践

在实施用户 ID 跟踪时,请遵循以下准则,以确保隐私合规和正确的跨设备测量。

  • 无 PII:用户 ID 不应暴露个人身份信息 (PII),如电子邮件地址、用户名或电话号码。使用与第一方数据独一无二的哈希值。
  • 跨平台一致性:用户 ID 值必须是您在所有平台(网络/移动/PC/控制台/离线)上获取的相同内部标识符,以便进行准确的跨设备测量。
  • 第一方数据:Singular会在用户级导出、ETL和内部商业智能回传(如有配置)中包含用户ID。用户 ID 是第一方数据,不会与第三方共享。
  • 持久性:用户 ID 会一直存在,直到使用unsetCustomUserId() 明确取消设置或卸载应用程序为止。关闭或重启应用程序不会清除用户 ID。

实施概述

何时设置用户 ID

使用Singular.setCustomUserId() 设置用户标识符,使用Singular.unsetCustomUserId() 注销时清除用户标识符。

最佳实践:如果多个用户共用一台设备,请执行注销流程,登录时调用setCustomUserId() ,注销时调用unsetCustomUserId()

如果已经知道应用程序打开时的用户 ID,请在初始化 Singular SDK 之前使用customUserId 属性进行配置。这将确保 Singular 从第一次会话中接收到用户 ID。不过,在用户注册或登录之前,用户 ID 通常是不可用的,在这种情况下,请在注册或身份验证流程完成后调用setCustomUserId()


SDK 方法

设置自定义用户 ID

向 Singular 发送内部用户 ID,用于跨设备跟踪和用户级报告。

Dart
import 'package:singular_flutter_sdk/singular.dart';

// Set the user ID after login or registration
Singular.setCustomUserId('user_123456');

方法签名

static void setCustomUserId(String customUserId)

示例:登录后设置用户 ID

在用户成功完成身份验证后立即调用setCustomUserId() ,以确保所有后续事件都与用户 ID 相关联。

Dart
import 'package:singular_flutter_sdk/singular.dart';

Future<void> handleUserLogin(String email, String password) async {
  try {
    // Your authentication logic
    final response = await authenticateUser(email, password);

    if (response.success) {
      // Set the user ID in Singular after successful login
      Singular.setCustomUserId(response.userId);

      print('User ID set: ${response.userId}');

      // Navigate to home screen
      navigateToHome();
    }
  } catch (error) {
    print('Login failed: $error');
  }
}

取消设置自定义用户 ID

在用户注销时清除用户 ID,以确保多用户设备的准确会话跟踪。

Dart
import 'package:singular_flutter_sdk/singular.dart';

// Unset the user ID on logout
Singular.unsetCustomUserId();

方法签名

static void unsetCustomUserId()

示例:注销时取消设置用户 ID

在注销流程中调用unsetCustomUserId() ,清除用户 ID,防止后续事件的错误归属。

Dart
import 'package:singular_flutter_sdk/singular.dart';

Future<void> handleUserLogout() async {
  try {
    // Clear app data and user session
    await clearUserSession();

    // Unset the user ID in Singular
    Singular.unsetCustomUserId();

    print('User ID cleared');

    // Navigate to login screen
    navigateToLogin();
  } catch (error) {
    print('Logout failed: $error');
  }
}

在初始化过程中设置用户 ID

如果用户 ID 在应用程序启动时可用(例如,用户已登录),可在 SDK 初始化期间使用customUserId 属性进行配置。这样可确保首次会话包含用户 ID。

Dart
import 'package:flutter/material.dart';
import 'package:singular_flutter_sdk/singular.dart';
import 'package:singular_flutter_sdk/singular_config.dart';
import 'package:shared_preferences/shared_preferences.dart';

void main() {
  runApp(MyApp());
}

class MyApp extends StatefulWidget {
  @override
  _MyAppState createState() => _MyAppState();
}

class _MyAppState extends State<MyApp> {
  @override
  void initState() {
    super.initState();
    initializeSingular();
  }

  Future<void> initializeSingular() async {
    // Check if user is already logged in
    final prefs = await SharedPreferences.getInstance();
    final userId = prefs.getString('user_id');

    // Create configuration
    SingularConfig config = SingularConfig(
      'YOUR_SDK_KEY',
      'YOUR_SDK_SECRET'
    );

    // If user ID exists, set it during initialization
    if (userId != null) {
      config.customUserId = userId;
    }

    // Initialize SDK
    Singular.start(config);
  }

  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      title: 'Flutter Demo',
      home: MyHomePage(),
    );
  }
}

配置属性

String? customUserId

建议:对于具有持续登录会话的应用程序,请在初始化过程中使用customUserId配置属性。对于用户必须每次登录的应用程序,请在验证后调用setCustomUserId()