using System.Collections.Generic; namespace TapTap.TapDB.Standalone.Internal { public class User { internal static readonly string USER_ID_KEY = "tapdb_played_duration_user_id"; internal string Id { get => id; set { id = value; TapDBStandalone.Prefs.Set(USER_ID_KEY, id); } } private string id; private readonly PlayRecorder playRecorder; public User() { playRecorder = new PlayRecorder(); } public void Login(string userId, string loginType = null, Dictionary props = null) { // 先执行旧用户登出逻辑 Id = TapDBStandalone.Prefs.Get(USER_ID_KEY); if (!string.IsNullOrWhiteSpace(Id)) { Logout(); } // 再执行新用户登录逻辑 Id = userId; TapDBStandalone.Tracker.TrackEvent(Constants.EVENT, "user_login", props); Dictionary initProps = new Dictionary(); if (!string.IsNullOrWhiteSpace(loginType)) { initProps["first_login_type"] = loginType; } TapDBStandalone.Tracker.TrackDeviceProperties(Constants.PROPERTY_INITIALIZE_TYPE, initProps); Dictionary updateProps = new Dictionary { { "has_user", true }, }; if (!string.IsNullOrWhiteSpace(loginType)) { updateProps["current_login_type"] = loginType; } TapDBStandalone.Tracker.TrackDeviceProperties(Constants.PROPERTY_UPDATE_TYPE, updateProps); playRecorder.Start(); } public void Logout() { playRecorder.Stop(); Id = null; } public void SetName(string name) { Dictionary props = new Dictionary { { "user_name", name } }; TapDBStandalone.Tracker.TrackUserProperties(Constants.PROPERTY_UPDATE_TYPE, props); } public void SetLevel(int level) { Dictionary props = new Dictionary { { "level", level } }; TapDBStandalone.Tracker.TrackUserProperties(Constants.PROPERTY_UPDATE_TYPE, props); } public void SetServer(string server) { Dictionary props = new Dictionary { { "first_server", server } }; TapDBStandalone.Tracker.TrackUserProperties(Constants.PROPERTY_INITIALIZE_TYPE, props); props = new Dictionary { { "current_server", server } }; TapDBStandalone.Tracker.TrackUserProperties(Constants.PROPERTY_UPDATE_TYPE, props); } public void InitProps(Dictionary properties) { TapDBStandalone.Tracker.TrackUserProperties(Constants.PROPERTY_INITIALIZE_TYPE, properties); } public void UpdateProps(Dictionary properties) { TapDBStandalone.Tracker.TrackUserProperties(Constants.PROPERTY_UPDATE_TYPE, properties); } public void AddProps(Dictionary properties) { TapDBStandalone.Tracker.TrackUserProperties(Constants.PROPERTY_ADD_TYPE, properties); } } }