在 NextJS 应用程序中设置 Mixpanel Analytics
分析对于任何盈利应用程序都至关重要,无论是拥有 100 个用户的小型应用程序还是拥有 10,000 个用户的大型应用程序。
了解用户是最重要的事情之一。而 mixpanel 是实现这一目标的最佳工具之一。
今天,我们将学习如何集成并启动 mixpanel 跟踪。
设置项目
我假设您已经设置了 NextJS 项目。此外,请从此处创建一个新的 Mixpanel 帐户(如果您还没有)。
请记住,我展示的是 NextJS,但它也适用于任何 ReactJS 应用程序。
然后安装依赖项
npm install mixpanel-browser
获取令牌
首先,添加以下环境变量
NEXT_PUBLIC_MIXPANEL_TOKEN="YOUR_TOKEN_HERE"
现在,您可以从项目的仪表板获取 mixpanel 令牌。
然后转到**设置** -> **项目设置**

然后获取**项目令牌**并将其添加到环境文件中。
创建配置文件
创建一个名为 mixpanel.ts 的文件并添加以下代码
import mixpanel from 'mixpanel-browser'; // Define event names as constants to prevent typos export const ANALYTICS_EVENTS = { PAGE_VIEW: 'Page View', BUTTON_CLICK: 'Button Click', FORM_SUBMIT: 'Form Submit', USER_SIGNED_IN: 'User Signed In', USER_SIGNED_UP: 'User Signed Up', USER_SIGNED_OUT: 'User Signed Out', // ... other events }; // Initialize mixpanel const MIXPANEL_TOKEN = process.env.NEXT_PUBLIC_MIXPANEL_TOKEN; if (MIXPANEL_TOKEN) { mixpanel.init(MIXPANEL_TOKEN, { debug: process.env.NODE_ENV === 'development', track_pageview: true, persistence: 'localStorage', ignore_dnt: true, }); }
因此,请在组件树中尽可能高的位置初始化混合面板。
添加分析函数
现在,添加配置后,就该添加一些可重复使用的函数来跟踪 mixpanel 事件了。
因此在同一个文件中添加以下代码:
export const MixpanelAnalytics = { track:>( eventName: string, properties?: T & CommonEventProperties ) => { try { if (MIXPANEL_TOKEN) { mixpanel.track(eventName, { ...properties, timestamp: Date.now(), path: typeof window !== 'undefined' ? window.location.pathname : undefined, }); } } catch (error) { console.error('Error tracking event:', error); } }, pageView: (pageName: string, properties?: Record ) => { try { if (MIXPANEL_TOKEN) { MixpanelAnalytics.track(ANALYTICS_EVENTS.PAGE_VIEW, { page: pageName, ...properties, }); } } catch (error) { console.error('Error tracking page view:', error); } } };
如果你分析上面这两个函数
追踪
此功能用于追踪任何类型的事件。
例如,如果你想跟踪用户,点击按钮访问外部网站。也许是为了联盟计算
您可以执行以下操作:
MixpanelAnalytics.track("VISIT_WEBSITE", { website_name: name, website_url: website, visit_count: (mixpanel.get_property('total_website_visits') ?? 0) + 1, });
页面视图
这是跟踪应用程序内每个页面浏览量的非常简单的方法。
现在记住 - 当我们初始化 mixpanel 时,我们已经告诉它跟踪页面浏览量:
mixpanel.init(MIXPANEL_TOKEN, { track_pageview: true, << HERE ...others });
所以这个自定义跟踪只是为了进行更详细的分析。
了解你的用户
现在,跟踪点击很酷,但很多时候,这还不够。
也许你想跟踪特定的用户。也许你想知道谁在做什么。也许你正在创建一个漏斗来分析用户行为。
针对这些场景,mixpanel 提供了 2 个功能。
因此,从高层次上讲,在用户登录后,您可以调用
mixpanel.identify("whatever identified you want (usually email or userid)")
退出后,你可以重置它
mixpanel.reset()
现在,您还可以使用 **people.set()** 方法添加有关用户的其他背景信息或详细信息
例如,
mixpanel.people.set({ plan: 'Enterprise', // Update "plan" from "Premium" to "Enterprise" company: 'mixpanel' // Create new "company" profile prop });
还有一些其他方法,如 append、union、increment 等,用于处理更多场景,但请跳过它们,因为它们不是本文的重点。您可以在此处阅读更多内容
但是匿名用户怎么办?
现在,在许多应用程序中(尤其是公共网站),无需登录即可查看内容。
但是如果他们没有登录,我们如何追踪这些人呢?
为了处理所有这些场景,让我们再创建两个实用函数。
export const MixpanelAnalytics = { // ... other methods ... identifyKnownUsers: (userId: string, userProperties?: Record) => { try { mixpanel.identify(userId); if (userProperties) { mixpanel.people.set(userProperties); } } catch (error) { console.error('Error identifying user:', error); } }, identifyUnknownUsers: () => { try { const anonymousId = mixpanel.get_distinct_id() || `anon-${Date.now()}-${Math.random().toString(36).substr(2, 9)}`; MixpanelAnalytics.identify(anonymousId); MixpanelAnalytics.setPeople({ $first_seen: new Date().toISOString(), user_type: 'anonymous', platform: typeof window !== 'undefined' ? window.navigator.platform : 'unknown', }); } catch (error) { console.error('Error initializing user:', error); } } };
因此您可以使用它来追踪已知和未知的用户。
示例用法如下所示:在其中一个根文件中 — (应用程序路由器中的 layout.tsx 文件,页面路由器中的 _app.tsx)
添加以下内容
useEffect(() => { const getUser = async () => { const user = functionToGetUser(); if (user) { await MixpanelAnalytics.identifyKnownUser(user); } else { await MixpanelAnalytics.initializeUnknownUser(); } }; getUser(); }, []);
因此,当用户访问网站时,这将适当地初始化用户。
您可以收集数据并将其分配给该特定用户。
示例用法
现在到了有趣的部分。请注意以下代码并根据您的需要进行更新。
const handleClick = () => { MixpanelAnalytics.setPeople({ $last_visited: websiteName, last_visit_date: new Date().toISOString(), total_visits: (mixpanel.get_property('total_visits') ?? 0) + 1, }); MixpanelAnalytics.track(ANALYTICS_EVENTS.VISIT_WEBSITE, { website_name: websiteName, website_url: website, visit_count: (mixpanel.get_property('total_visits') ?? 0) + 1, }); };
在上面的函数中,我们使用跟踪数据来跟踪特定用户的个人资料,同时确保我们也计算他们对特定网站的访问次数。
很酷吧?
最佳实践
在进行分析时,保持数据一致性非常重要。
因此,请确保为分析事件添加适当的类型。
例如
为事件定义常量。
切勿使用纯字符串作为事件名称。
export const ANALYTICS_EVENTS = { PAGE_VIEW: 'Page View', BUTTON_CLICK: 'Button Click', // ... other events } as const;
类型安全
对于事件负载,请确保使用类型使用一致的结构
interface CommonEventProperties { timestamp?: number; path?: string; referrer?: string; }
用户属性
始终在会话间保持一致的用户属性。
MixpanelAnalytics.setPeople({ $email: user.email, $name: user.user_metadata?.full_name, $created: user.created_at, last_sign_in: new Date().toISOString(), user_type: 'registered', auth_provider: user.app_metadata?.provider || 'email', });
否则,从长远来看,这些数据将毫无用处。
结论
请记住在客户端组件中正确处理分析初始化。
此外,请确保根据您的隐私政策和数据保护法规适当处理敏感用户数据。
希望你今天学到了新东西。
祝你有美好的一天!