Add managed content and keyboard usage insights
Introduce versioned official content workflows and privacy-safe keyboard analytics, while preventing repeat DeviceCheck sign-ins from incorrectly restricting eligible accounts.
This commit is contained in:
@@ -4,6 +4,7 @@ import {
|
||||
BrainCircuit,
|
||||
ChartNoAxesCombined,
|
||||
Gauge,
|
||||
Keyboard,
|
||||
Repeat2,
|
||||
Sparkles,
|
||||
Target,
|
||||
@@ -264,6 +265,74 @@ export function AnalyticsPage() {
|
||||
</Card>
|
||||
</section>
|
||||
|
||||
<section className="grid gap-6 xl:grid-cols-2" aria-label="键盘输入统计">
|
||||
<Card className="overflow-hidden">
|
||||
<SectionHeader
|
||||
title="键盘中英文输入"
|
||||
description="仅统计 OSGKeyboard 本地聚合后的手动提交字符,不包含输入内容"
|
||||
icon={Keyboard}
|
||||
/>
|
||||
<ComparisonBarChart
|
||||
items={[
|
||||
{
|
||||
label: "中文",
|
||||
value: data.keyboardUsage.chineseCharacters,
|
||||
hint: `占中英文 ${optionalPercent(data.keyboardUsage.chineseSharePercent)}`,
|
||||
},
|
||||
{
|
||||
label: "英文",
|
||||
value: data.keyboardUsage.englishCharacters,
|
||||
hint: `占中英文 ${optionalPercent(data.keyboardUsage.englishSharePercent)}`,
|
||||
},
|
||||
{
|
||||
label: "其他",
|
||||
value: data.keyboardUsage.otherCharacters,
|
||||
hint: "数字、标点与 Emoji",
|
||||
},
|
||||
]}
|
||||
primaryLabel="提交字符数"
|
||||
primaryTone="primary"
|
||||
/>
|
||||
<MetricRows
|
||||
rows={[
|
||||
["输入活跃用户", formatNumber(data.keyboardUsage.activeUsers)],
|
||||
["激活到输入转化", rateLabel(data.keyboardUsage.activationToInput)],
|
||||
["中文活跃用户", formatNumber(data.keyboardUsage.chineseActiveUsers)],
|
||||
["英文活跃用户", formatNumber(data.keyboardUsage.englishActiveUsers)],
|
||||
["中英双语用户", formatNumber(data.keyboardUsage.bilingualActiveUsers)],
|
||||
["总提交字符", formatNumber(data.keyboardUsage.totalCharacters)],
|
||||
]}
|
||||
/>
|
||||
</Card>
|
||||
|
||||
<Card className="overflow-hidden">
|
||||
<SectionHeader
|
||||
title="输入会话结构"
|
||||
description="一次键盘激活期间至少提交一个字符才计为输入会话"
|
||||
icon={Activity}
|
||||
/>
|
||||
<ComparisonBarChart
|
||||
items={[
|
||||
{ label: "仅中文", value: data.keyboardUsage.chineseOnlySessions },
|
||||
{ label: "仅英文", value: data.keyboardUsage.englishOnlySessions },
|
||||
{ label: "中英混合", value: data.keyboardUsage.mixedLanguageSessions },
|
||||
{ label: "仅其他", value: data.keyboardUsage.otherOnlySessions },
|
||||
]}
|
||||
primaryLabel="输入会话"
|
||||
primaryTone="success"
|
||||
/>
|
||||
<MetricRows
|
||||
rows={[
|
||||
["输入会话总数", formatNumber(data.keyboardUsage.inputSessions)],
|
||||
[
|
||||
"平均每会话字符",
|
||||
optionalDecimal(data.keyboardUsage.averageCharactersPerInputSession),
|
||||
],
|
||||
]}
|
||||
/>
|
||||
</Card>
|
||||
</section>
|
||||
|
||||
<section className="grid gap-6 xl:grid-cols-3">
|
||||
<Card className="overflow-hidden">
|
||||
<SectionHeader title="付费转化" description="StoreKit 已验证交易" icon={BadgeDollarSign} />
|
||||
|
||||
Reference in New Issue
Block a user