[回复即答谢] 你怎么看个人浏览器收集用户数据这个问题?如果你可以在自己的 NAS 上搭一套浏览器后台同步服务(免费的),你愿意这样做吗? - V2EX
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
desdouble
V2EX    浏览器

[回复即答谢] 你怎么看个人浏览器收集用户数据这个问题?如果你可以在自己的 NAS 上搭一套浏览器后台同步服务(免费的),你愿意这样做吗?

  •  
  •   desdouble
    PRO
    69 天前 3924 次点击
    这是一个创建于 69 天前的主题,其中的信息可能已经有所发展或是发生改变。
    chromium 内核的浏览器同步了很多数据。一般输入“chrome://sync-internals/”可以查看数据同步情况。
    ![]( )

    源代码的头文件中定义了更多类型,有一些是企业版 chrome 的数据。那么如题,你怎么看?回复即答谢。

    `
    // Copyright 2012 The Chromium Authors
    // Use of this source code is governed by a BSD-style license that can be
    // found in the LICENSE file.

    #ifndef COMPONENTS_SYNC_BASE_MODEL_TYPE_H_
    #define COMPONENTS_SYNC_BASE_MODEL_TYPE_H_

    #include <iosfwd>
    #include <map>
    #include <memory>
    #include <string>

    #include "base/containers/enum_set.h"
    #include "base/values.h"

    namespace sync_pb {
    class EntitySpecifics;
    }

    namespace syncer {

    // Enumerate the various item subtypes that are supported by sync.
    // Each sync object is expected to have an immutable object type.
    // An object's type is inferred from the type of data it holds.
    //
    // A Java counterpart will be generated for this enum.
    // GENERATED_JAVA_ENUM_PACKAGE: org.chromium.components.sync
    //
    // |kModelTypeInfoMap| struct entries are in the same order as their definition
    // in ModelType enum. When you make changes in ModelType enum, don't forget to
    // update the |kModelTypeInfoMap| struct in model_type.cc and also the
    // SyncModelType histogram suffix in histograms.xml
    enum ModelType {
    // Object type unknown. This may be used when:
    // a) The client received *valid* data from a data type which this version
    // is unaware of (only present in versions newer than this one, or present
    // in older versions but removed since).
    // b) The client received invalid data from the server due to some error.
    // c) A data object was just created, in which case this is a temporary state.
    UNSPECIFIED,

    // ------------------------------------ Start of "real" model types.
    // The model types declared before here are somewhat special, as they
    // they do not correspond to any browser data model. The remaining types
    // are bona fide model types; all have a related browser data model and
    // can be represented in the protocol using a specific Message type in the
    // EntitySpecifics protocol buffer.
    //
    // A bookmark folder or a bookmark URL object.
    BOOKMARKS,
    FIRST_USER_MODEL_TYPE = BOOKMARKS, // Declared 2nd, for debugger prettiness.
    FIRST_REAL_MODEL_TYPE = FIRST_USER_MODEL_TYPE,

    // A preference object, a.k.a. "Settings".
    PREFERENCES,
    // A password object.
    PASSWORDS,
    // An autofill_profile object, i.e. an address.
    AUTOFILL_PROFILE,
    // An autofill object, i.e. an autocomplete entry keyed to an HTML form field.
    AUTOFILL,
    // Credentials related to an autofill wallet instrument; aka the CVC/CVV code.
    AUTOFILL_WALLET_CREDENTIAL,
    // Credit cards and customer data from the user's account. These are read-only
    // on the client.
    AUTOFILL_WALLET_DATA,
    // Usage counts and last use dates for Wallet cards. This data is both
    // readable and writable.
    AUTOFILL_WALLET_METADATA,
    // Offers and rewards from the user's account. These are read-only on the
    // client side.
    AUTOFILL_WALLET_OFFER,
    // Autofill usage data of a payment method related to a specific merchant.
    AUTOFILL_WALLET_USAGE,
    // A theme object.
    THEMES,
    // An extension object.
    EXTENSIONS,
    // An object representing a custom search engine.
    SEARCH_ENGINES,
    // An object representing a browser session, e.g. an open tab. This is used
    // for "Open Tabs".
    SESSIONS,
    // An app object.
    APPS,
    // An app setting from the extension settings API.
    APP_SETTINGS,
    // An extension setting from the extension settings API.
    EXTENSION_SETTINGS,
    // History delete directives, used to propagate history deletions (e.g. based
    // on a time range).
    HISTORY_DELETE_DIRECTIVES,
    // Custom spelling dictionary entries.
    DICTIONARY,
    // Client-specific metadata, synced before other user types.
    DEVICE_INFO,
    // These preferences are synced before other user types and are never
    // encrypted.
    PRIORITY_PREFERENCES,
    // Supervised user settings. Cannot be encrypted.
    SUPERVISED_USER_SETTINGS,
    // App List items, used by the ChromeOS app launcher.
    APP_LIST,
    // ARC package items, i.e. Android apps on ChromeOS.
    ARC_PACKAGE,
    // Printer device information. ChromeOS only.
    PRINTERS,
    // Reading list items.
    READING_LIST,
    // Commit only user events.
    USER_EVENTS,
    // Commit only user consents.
    USER_CONSENTS,
    // Tabs sent between devices.
    SEND_TAB_TO_SELF,
    // Commit only security events.
    SECURITY_EVENTS,
    // Wi-Fi network configurations + credentials
    WIFI_CONFIGURATIONS,
    // A web app object.
    WEB_APPS,
    // A WebAPK object.
    WEB_APKS,
    // OS-specific preferences (a.k.a. "OS settings"). ChromeOS only.
    OS_PREFERENCES,
    // Synced before other user types. Never encrypted. ChromeOS only.
    OS_PRIORITY_PREFERENCES,
    // Commit only sharing message object.
    SHARING_MESSAGE,
    // A workspace desk saved by user. ChromeOS only.
    WORKSPACE_DESK,
    // Synced history. An entity roughly corresponds to a navigation.
    HISTORY,
    // Trusted Authorization Servers for printers. ChromeOS only.
    PRINTERS_AUTHORIZATION_SERVERS,
    // Contact information from the Google Address Storage.
    CONTACT_INFO,
    // A tab group saved by a user. Currently only supported on desktop platforms
    // (Linux, Mac, Windows, ChromeOS) and Android.
    SAVED_TAB_GROUP,

    // Power bookmarks are features associated with bookmarks(i.e. notes, price
    // tracking). Their life cycle are synced with bookmarks.
    POWER_BOOKMARK,

    // WebAuthn credentials, more commonly known as passkeys.
    WEBAUTHN_CREDENTIAL,

    // Invitations for sending passwords. Outgoing invitation from one user will
    // become an incoming one for another.
    INCOMING_PASSWORD_SHARING_INVITATION,
    OUTGOING_PASSWORD_SHARING_INVITATION,

    // Data related to tab group sharing.
    SHARED_TAB_GROUP_DATA,

    // Special datatype to notify client about People Group changes. Read-only on
    // the client.
    COLLABORATION_GROUP,

    // Origin-specific email addresses forwarded from the user's account.
    // Read-only on the client.
    PLUS_ADDRESS,

    // Product comparison groups.
    PRODUCT_COMPARISON,

    // Browser cookies, ChromeOS only.
    COOKIES,

    // Settings for PLUS_ADDRESS forwarded from the user's account. Since the
    // settings originate from the user's account, this is not reusing any of the
    // standard syncable prefs.
    PLUS_ADDRESS_SETTING,

    LAST_USER_MODEL_TYPE = PLUS_ADDRESS_SETTING,

    // ---- Control Types ----
    // An object representing a set of Nigori keys.
    NIGORI,
    LAST_REAL_MODEL_TYPE = NIGORI,

    // NEW ENTRIES MUST BE ADDED ABOVE THIS.
    LAST_ENTRY = LAST_REAL_MODEL_TYPE,
    };

    using ModelTypeSet =
    base::EnumSet<ModelType, FIRST_REAL_MODEL_TYPE, LAST_REAL_MODEL_TYPE>;

    constexpr int GetNumModelTypes() {
    return static_cast<int>(ModelType::LAST_ENTRY) + 1;
    }

    // A version of the ModelType enum for use in histograms. ModelType does not
    // have stable values (e.g. new ones may be inserted in the middle), so it can't
    // be recorded directly.
    // Instead of using entries from this enum directly, you'll usually want to get
    // them via ModelTypeHistogramValue(model_type).
    // These values are persisted to logs. Entries should not be renumbered and
    // numeric values should never be reused. When you add a new entry or when you
    // deprecate an existing one, also update SyncModelTypes in enums.xml and
    // SyncModelType suffix in histograms.xml.
    // LINT.IfChange(SyncModelTypes)
    enum class ModelTypeForHistograms {
    kUnspecified = 0,
    // kTopLevelFolder = 1,
    kBookmarks = 2,
    kPreferences = 3,
    kPasswords = 4,
    kAutofillProfile = 5,
    kAutofill = 6,
    kThemes = 7,
    // kDeprecatedTypedUrls = 8,
    kExtensiOns= 9,
    kSearchEngines = 10,
    kSessiOns= 11,
    kApps = 12,
    kAppSettings = 13,
    kExtensiOnSettings= 14,
    // kDeprecatedAppNotificatiOns= 15,
    kHistoryDeleteDirectices = 16,
    kNigori = 17,
    kDeviceInfo = 18,
    // kDeprecatedExperiments = 19,
    // kDeprecatedSyncedNotificatiOns= 20,
    kPriorityPreferences = 21,
    kDictiOnary= 22,
    // kFavicOnImages= 23,
    // kFavicOnTracking= 24,
    kProxyTabs = 25,
    kSupervisedUserSettings = 26,
    // kDeprecatedSupervisedUsers = 27,
    // kDeprecatedArticles = 28,
    kAppList = 29,
    // kDeprecatedSupervisedUserSharedSettings = 30,
    // kDeprecatedSyncedNotificatiOnAppInfo= 31,
    // kDeprecatedWifiCredentials = 32,
    kDeprecatedSupervisedUserAllowlists = 33,
    kAutofillWalletData = 34,
    kAutofillWalletMetadata = 35,
    kArcPackage = 36,
    kPrinters = 37,
    kReadingList = 38,
    kUserEvents = 39,
    // kDeprecatedMountainShares = 40,
    kUserCOnsents= 41,
    kSendTabToSelf = 42,
    kSecurityEvents = 43,
    kWifiCOnfigurations= 44,
    kWebApps = 45,
    kOsPreferences = 46,
    kOsPriorityPreferences = 47,
    kSharingMessage = 48,
    kAutofillWalletOffer = 49,
    kWorkspaceDesk = 50,
    kHistory = 51,
    kPrintersAuthorizatiOnServers= 52,
    kCOntactInfo= 53,
    kAutofillWalletUsage = 54,
    // kDeprecatedSegmentation = 55,
    kSavedTabGroups = 56,
    kPowerBookmark = 57,
    kWebAuthnCredentials = 58,
    kIncomingPasswordSharingInvitatiOns= 59,
    kOutgoingPasswordSharingInvitatiOns= 60,
    kAutofillWalletCredential = 61,
    kWebApks = 62,
    kSharedTabGroupData = 63,
    kCollaboratiOnGroup= 64,
    kPlusAddresses = 65,
    kProductComparison = 66,
    kCookies = 67,
    kPlusAddressSettings = 68,
    kMaxValue = kPlusAddressSettings,
    };
    // LINT.ThenChange(/tools/metrics/histograms/metadata/sync/enums.xml:SyncModelTypes)

    // Used to mark the type of EntitySpecifics that has no actual data.
    void AddDefaultFieldValue(ModelType type, sync_pb::EntitySpecifics* specifics);

    // Extract the model type from an EntitySpecifics field. ModelType is a
    // local concept: the enum is not in the protocol.
    ModelType GetModelTypeFromSpecifics(const sync_pb::EntitySpecifics& specifics);

    // Protocol types are those types that have actual protocol buffer
    // representations. This is the same as the "real" model types, i.e. all types
    // except UNSPECIFIED.
    constexpr ModelTypeSet ProtocolTypes() {
    // Note that ModelTypeSet only covers the real types, not UNSPECIFIED.
    static_assert(!ModelTypeSet::All().Has(ModelType::UNSPECIFIED));
    return ModelTypeSet::All();
    }

    // These are the normal user-controlled types. This is to distinguish from
    // ControlTypes which are always enabled. Note that some of these share a
    // preference flag, so not all of them are individually user-selectable.
    constexpr ModelTypeSet UserTypes() {
    return ModelTypeSet::FromRange(FIRST_USER_MODEL_TYPE, LAST_USER_MODEL_TYPE);
    }

    // User types which are not user-controlled.
    constexpr ModelTypeSet AlwaysPreferredUserTypes() {
    return {DEVICE_INFO,
    USER_CONSENTS,
    PLUS_ADDRESS,
    PLUS_ADDRESS_SETTING,
    SECURITY_EVENTS,
    SEND_TAB_TO_SELF,
    SUPERVISED_USER_SETTINGS,
    SHARING_MESSAGE};
    }

    // User types which are always encrypted.
    constexpr ModelTypeSet AlwaysEncryptedUserTypes() {
    // If you add a new model type here that is conceptually different from a
    // password, make sure you audit UI code that refers to these types as
    // passwords, e.g. consumers of IsEncryptEverythingEnabled().
    return {AUTOFILL_WALLET_CREDENTIAL, PASSWORDS, WIFI_CONFIGURATIONS, COOKIES};
    }

    // This is the subset of UserTypes() that have priority over other types. These
    // types are synced before other user types (both for get_updates and commits).
    // This mostly matters during initial sync, since priority types can become
    // active before all the data for non-prio types has been downloaded (which may
    // be a lot of data).
    constexpr ModelTypeSet HighPriorityUserTypes() {
    return {
    // The "Send to Your Devices" feature needs fast updating of the list of
    // your devices and also fast sending of the actual messages.
    DEVICE_INFO, SHARING_MESSAGE,
    // For supervised users, it is important to quickly deliver changes in
    // settings and in allowed sites to the supervised user.
    SUPERVISED_USER_SETTINGS,
    // These are by definition preferences for which it is important that the
    // client picks them up quickly (also because these can get changed
    // server-side). For example, such a pref could control whether a
    // non-priority type gets enabled (Wallet has such a pref).
    PRIORITY_PREFERENCES, OS_PRIORITY_PREFERENCES,
    // Speed matters for the user experience when sync gets enabled directly
    // in the creation flow for a new profile. If the user has no theme in
    // their sync data, the browser offers a theme customization bubble which
    // should appear soon after opening the browser.
    THEMES};
    }

    // This is the subset of UserTypes() that have a *lower* priority than other
    // types. These types are synced only after all other user types (both for
    // get_updates and commits). This mostly matters during initial sync, since
    // high-priority and regular types can become active before all the data for
    // low-priority types has been downloaded (which may be a lot of data).
    constexpr ModelTypeSet LowPriorityUserTypes() {
    return {
    // Downloading History may take a while, but should not block the download
    // of other data types.
    HISTORY,
    // User Events should not block or delay commits for other data types.
    USER_EVENTS,
    // Incoming password sharing invitations must be processed after
    // Passwords data type to prevent storing incoming passwords locally first
    // and overwriting the remote password during conflict resolution.
    INCOMING_PASSWORD_SHARING_INVITATION};
    }

    // Returns a list of all control types.
    //
    // The control types are intended to contain metadata nodes that are essential
    // for the normal operation of the syncer. As such, they have the following
    // special properties:
    // - They are downloaded early during SyncBackend initialization.
    // - They are always enabled. Users may not disable these types.
    // - Their contents are not encrypted automatically.
    // - They support custom update application and conflict resolution logic.
    // - All change processing occurs on the sync thread.
    constexpr ModelTypeSet ControlTypes() {
    return {NIGORI};
    }

    // Types that may commit data, but should never be included in a GetUpdates.
    // These are never encrypted.
    constexpr ModelTypeSet CommitOnlyTypes() {
    return {USER_EVENTS, USER_CONSENTS, SECURITY_EVENTS, SHARING_MESSAGE,
    OUTGOING_PASSWORD_SHARING_INVITATION};
    }

    // Types for which downloaded updates are applied immediately, before all
    // updates are downloaded and the Sync cycle finishes.
    // For these types, ModelTypeSyncBridge::MergeFullSyncData() will never be
    // called (since without downloading all the data, no initial merge is
    // possible).
    constexpr ModelTypeSet ApplyUpdatesImmediatelyTypes() {
    return {HISTORY};
    }

    // Types for which `collaboration_id` field in SyncEntity should be provided.
    // These types also support `gc_directive` for collaborations to track active
    // collaboratons.
    constexpr ModelTypeSet SharedTypes() {
    return {SHARED_TAB_GROUP_DATA};
    }

    // Types triggering a warning when the user signs out and the types have
    // unsynced data. The warning offers the user to either save the data locally or
    // abort sign-out, depending on the platform.
    constexpr ModelTypeSet TypesRequiringUnsyncedDataCheckOnSignout() {
    return {syncer::BOOKMARKS, syncer::CONTACT_INFO, syncer::PASSWORDS,
    syncer::READING_LIST, syncer::SAVED_TAB_GROUP};
    }

    // User types that can be encrypted, which is a subset of UserTypes() and a
    // superset of AlwaysEncryptedUserTypes();
    ModelTypeSet EncryptableUserTypes();

    // Determine a model type from the field number of its associated
    // EntitySpecifics field. Returns UNSPECIFIED if the field number is
    // not recognized.
    ModelType GetModelTypeFromSpecificsFieldNumber(int field_number);

    namespace internal {
    // Obtain model type from field_number and add to model_types if valid.
    void GetModelTypeSetFromSpecificsFieldNumberListHelper(
    ModelTypeSet& model_types,
    int field_number);
    } // namespace internal

    // Build a ModelTypeSet from a list of field numbers. Any unknown field numbers
    // are ignored.
    template <typename ContainerT>
    ModelTypeSet GetModelTypeSetFromSpecificsFieldNumberList(
    const ContainerT& field_numbers) {
    ModelTypeSet model_types;
    for (int field_number : field_numbers) {
    internal::GetModelTypeSetFromSpecificsFieldNumberListHelper(model_types,
    field_number);
    }
    return model_types;
    }

    // Return the field number of the EntitySpecifics field associated with
    // a model type.
    int GetSpecificsFieldNumberFromModelType(ModelType model_type);

    // Returns a string with application lifetime that represents the name of
    // |model_type|.
    const char* ModelTypeToDebugString(ModelType model_type);

    // Returns a string with application lifetime that is used as the histogram
    // suffix for |model_type|.
    const char* ModelTypeToHistogramSuffix(ModelType model_type);

    // Some histograms take an integer parameter that represents a model type.
    // The mapping from ModelType to integer is defined here. It defines a
    // completely different order than the ModelType enum itself. The mapping should
    // match the SyncModelTypes mapping from integer to labels defined in enums.xml.
    ModelTypeForHistograms ModelTypeHistogramValue(ModelType model_type);

    // Returns for every model_type a positive unique integer that is stable over
    // time and thus can be used when persisting data.
    int ModelTypeToStableIdentifier(ModelType model_type);

    // Returns the comma-separated string representation of |model_types|.
    std::string ModelTypeSetToDebugString(ModelTypeSet model_types);

    // Necessary for compatibility with EXPECT_EQ and the like.
    std::ostream& operator<<(std::ostream& out, ModelTypeSet model_type_set);

    // Returns a string corresponding to the root tag as exposed in the sync
    // protocol as the root entity's ID, which makes the root entity trivially
    // distinguishable from regular entities. Note that the existence of a root
    // entity in the sync protocol is a legacy artifact, and modern clients ignore
    // it except for bookmarks and Nigori. For this reason, the server may or may
    // not return the root entity.
    std::string ModelTypeToProtocolRootTag(ModelType model_type);

    // As opposed to ModelTypeToProtocolRootTag(), this returns a string that isn't
    // exposed in the sync protocol, but that is still stable and thus can be used
    // for local persistence. It is guaranteed to be lowercase.
    const char* GetModelTypeLowerCaseRootTag(ModelType model_type);

    // Returns true if |model_type| is a real datatype
    bool IsRealDataType(ModelType model_type);

    // Returns true if |model_type| is an act-once type. Act once types drop
    // entities after applying them. Drops are deletes that are not synced to other
    // clients.
    bool IsActOnceDataType(ModelType model_type);

    } // namespace syncer

    #endif // COMPONENTS_SYNC_BASE_MODEL_TYPE_H_

    `
    23 条回复    2025-09-19 08:53:27 +08:00
    xjzshttps
        1
    xjzshttps  
       69 天前   1
    是希望有自己的同步功能,最好能够实现自动穿透内网。


    但是我更希望有能够同步 或 备份 android 手机的应用。联系人、短信之类的倒是好弄。但是 app 数据就很麻烦,不 root 下,好像只有 adb 有权限获取部分未拒绝备份功能的 app 。
    moefishtang
        2
    moefishtang  
       69 天前   1
    希望有,而且希望能同步不同浏览器之间的数据,Chrome 手机端确实不如 PC 和 pad 端好用
    Himmel
        3
    Himmel  
       69 天前   1
    搭了浏览器后台同步服务以后,浏览器收集用户数据这个问题就能解决了吗?
    yb2313
        4
    yb2313  
       69 天前   1
    nas 并不是免费, 只是长久来看比买服务器便宜
    desdouble
        5
    desdouble  
    OP
    PRO
       69 天前
    @Himmel 是的。数据同步到自己的存储空间上了。
    Ealrang
        6
    Ealrang  
       69 天前   1
    那感情好啊,一直在找同步书签的还好看的浏览器,目前欧朋还凑合用
    Ziuc
        7
    Ziuc  
       69 天前   1
    浏览器同步确实方便,但把这么多个人数据交给第三方,确实有隐私风险。
    如果能在自己的 NAS 上搭建同步服务,我肯定愿意用,至少数据在自己手里更安心
    clarkethan
        8
    clarkethan  
       69 天前   1
    不太愿意,稳定性欠佳,必要性也不大,我个人并不是极端隐私主义者,更愿意只在一些关键数据上采取更严格的保护
    Himmel
        9
    Himmel  
       69 天前   1
    @desdouble 就我个人作为 NAS 用户来说密码和书签会用别的服务来保证跨浏览器之间的同步,所以这个浏览器的同步对于我来说最大的用途是同步扩展和 session 的信息,可以这么理解吗?
    callyourbluff
        10
    callyourbluff  
       69 天前   1
    desdouble
        11
    desdouble  
    OP
    PRO
       69 天前
    @Himmel 同步服务是 docker ,运行在自己家里的 NAS 上。结合 @xjzshttps 提到的内网穿透,可以形成一个闭环。
    desdouble
        12
    desdouble  
    OP
    PRO
       69 天前
    @Himmel 同步 session 是指同步 cookie/localstorage?
    Himmel
        13
    Himmel  
       69 天前   1
    @desdouble #12 应该是吧,看你发的图里面有值的除了书签扩展,再就是这个字段了。
    liyafe1997
        14
    liyafe1997  
       69 天前   1
    @xjzshttps 这个接口似乎已经弃用了,现在能通过 adb 提取数据的 App 少之又少。不过倒是有个思路,可以通过各品牌的“一键换机”接口来提取 App 数据
    hhxsky
        15
    hhxsky  
       69 天前 via Android   1
    什么 session ,cookie ,你这些都只能在 v2 讨论,真正的小白用户,根本不管这些,能同步书签就行,登录填充账号密码这些能填充就是加分了,其他根本不需要,一个 webdav 就行了,还要什么 nas ,真是万物皆 nas 吗
    Ketteiron
        16
    Ketteiron  
       69 天前   1
    不太愿意,收集用户数据不关心。
    真的要用,同步服务必须是开源的,必须足够安全与可靠。
    smlcgx
        17
    smlcgx  
       69 天前 via iPhone   1
    没办法,趋势如此,每个人的数据都被交易,就看是否脱敏了
    ihwbunny
        18
    ihwbunny  
       68 天前   1
    还是比较有用的。
    1. 可以自定义服务地址(详细的搭建步骤)
    2. 把现有的 Chrome 上的私人数据导出到
    3. 多设备同步,或者根据设备可选的同步。比如手机端使用自己的一套; Windows 有自己的; Mac 又有自己的;
    4. 可选的端到端的加密通道
    5. 支持服务端的迁移和升级(或者是详细文档)
    6. 客户端和服务端内置的内网穿透
    7. 支持多账户
    8. 支持多 sessions ,也就是同一个设备,多个 Chrome 窗口被认为不同的 sessions ,可以分别设置备份/同步
    9. 支持家庭中的年龄限制/儿童管理等
    先想到这些
    HalloCQ
        19
    HalloCQ  
       68 天前   1
    哪里有这样的同步服务,我早就想替换 brave 的同步了
    desdouble
        20
    desdouble  
    OP
    PRO
       68 天前
    @HalloCQ 你现在用的 brave 的后台同步服务,也是自己搭建的吗?
    iamwin
        21
    iamwin  
       68 天前   1
    所以我使用 ungoogled-chromium ,并且关闭所有同步
    tennc
        22
    tennc  
       68 天前   1
    暂时没有这个需求,还是 chrome 自带的同步
    HalloCQ
        23
    HalloCQ  
       67 天前   1
    @desdouble #20 不是啊,brave 是通过同步链同步的,也就是你至少得保证两个设备同时在线,才可能同步
    关于     帮助文档     自助推广系统     博客     API     FAQ     Solana     895 人在线   最高记录 6679       Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 31ms UTC 20:53 PVG 04:53 LAX 12:53 JFK 15:53
    Do have faith in what you're doing.
    ubao msn snddm index pchome yahoo rakuten mypaper meadowduck bidyahoo youbao zxmzxm asda bnvcg cvbfg dfscv mmhjk xxddc yybgb zznbn ccubao uaitu acv GXCV ET GDG YH FG BCVB FJFH CBRE CBC GDG ET54 WRWR RWER WREW WRWER RWER SDG EW SF DSFSF fbbs ubao fhd dfg ewr dg df ewwr ewwr et ruyut utut dfg fgd gdfgt etg dfgt dfgd ert4 gd fgg wr 235 wer3 we vsdf sdf gdf ert xcv sdf rwer hfd dfg cvb rwf afb dfh jgh bmn lgh rty gfds cxv xcv xcs vdas fdf fgd cv sdf tert sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf shasha9178 shasha9178 shasha9178 shasha9178 shasha9178 liflif2 liflif2 liflif2 liflif2 liflif2 liblib3 liblib3 liblib3 liblib3 liblib3 zhazha444 zhazha444 zhazha444 zhazha444 zhazha444 dende5 dende denden denden2 denden21 fenfen9 fenf619 fen619 fenfe9 fe619 sdf sdf sdf sdf sdf zhazh90 zhazh0 zhaa50 zha90 zh590 zho zhoz zhozh zhozho zhozho2 lislis lls95 lili95 lils5 liss9 sdf0ty987 sdft876 sdft9876 sdf09876 sd0t9876 sdf0ty98 sdf0976 sdf0ty986 sdf0ty96 sdf0t76 sdf0876 df0ty98 sf0t876 sd0ty76 sdy76 sdf76 sdf0t76 sdf0ty9 sdf0ty98 sdf0ty987 sdf0ty98 sdf6676 sdf876 sd876 sd876 sdf6 sdf6 sdf9876 sdf0t sdf06 sdf0ty9776 sdf0ty9776 sdf0ty76 sdf8876 sdf0t sd6 sdf06 s688876 sd688 sdf86