729 lines
54 KiB
HTML
729 lines
54 KiB
HTML
<!doctype html>
|
||
<html lang="zh-CN">
|
||
<head>
|
||
<meta charset="utf-8">
|
||
<meta name="viewport" content="width=device-width, initial-scale=1">
|
||
<meta name="robots" content="noindex, nofollow">
|
||
<title>Manta 人群包操作手册</title>
|
||
<link rel="preconnect" href="https://fonts.googleapis.com">
|
||
<link rel="preconnect" href="https://fonts.gstatic.com" crossorigin>
|
||
<link rel="stylesheet" href="https://fonts.googleapis.com/css2?family=IBM+Plex+Mono:wght@400;500;600&family=IBM+Plex+Sans:wght@400;450;500;600;700&display=swap">
|
||
<style>html{color-scheme:light dark}body{margin:0}img{max-width:100%}[hidden]{display:none!important}</style>
|
||
</head>
|
||
<body>
|
||
<style>
|
||
:root{
|
||
--ground:#F4F6F9;
|
||
--surface:#FFFFFF;
|
||
--surface-2:#EDF0F5;
|
||
--ink:#141A22;
|
||
--ink-2:#3D4855;
|
||
--muted:#697687;
|
||
--line:#DBE1EA;
|
||
--line-strong:#C3CCD9;
|
||
--accent:#1B5FD9;
|
||
--accent-soft:#E4EDFD;
|
||
--op-and:#2F6FE4;
|
||
--op-or:#238A57;
|
||
--op-not:#CE4034;
|
||
--op-xor:#C98A08;
|
||
--warn:#9A5B00;
|
||
--warn-bg:#FDF3E3;
|
||
--warn-line:#E8C48A;
|
||
--danger:#B3302A;
|
||
--danger-bg:#FCEDEC;
|
||
--danger-line:#E9B4B0;
|
||
--ok:#1E7A4F;
|
||
--ok-bg:#E7F4EE;
|
||
--shadow:0 1px 2px rgba(20,26,34,.06),0 8px 24px rgba(20,26,34,.06);
|
||
--radius:10px;
|
||
--sans:"IBM Plex Sans","PingFang SC","Hiragino Sans GB","Microsoft YaHei",system-ui,sans-serif;
|
||
--mono:"IBM Plex Mono","SF Mono",ui-monospace,"PingFang SC",monospace;
|
||
}
|
||
@media (prefers-color-scheme:dark){
|
||
:root:not([data-theme="light"]){
|
||
--ground:#0D1117;
|
||
--surface:#151C25;
|
||
--surface-2:#1D2632;
|
||
--ink:#E7ECF3;
|
||
--ink-2:#BCC6D3;
|
||
--muted:#8A97A8;
|
||
--line:#27313E;
|
||
--line-strong:#384555;
|
||
--accent:#77A6FF;
|
||
--accent-soft:#1A2740;
|
||
--op-and:#77A6FF;
|
||
--op-or:#5CC08C;
|
||
--op-not:#F0796C;
|
||
--op-xor:#E8B94A;
|
||
--warn:#E8B76B;
|
||
--warn-bg:#2A2113;
|
||
--warn-line:#5A4520;
|
||
--danger:#F58C84;
|
||
--danger-bg:#2C1817;
|
||
--danger-line:#5C2E2A;
|
||
--ok:#65C795;
|
||
--ok-bg:#14261D;
|
||
--shadow:0 1px 2px rgba(0,0,0,.4),0 8px 24px rgba(0,0,0,.35);
|
||
}
|
||
}
|
||
:root[data-theme="dark"]{
|
||
--ground:#0D1117;
|
||
--surface:#151C25;
|
||
--surface-2:#1D2632;
|
||
--ink:#E7ECF3;
|
||
--ink-2:#BCC6D3;
|
||
--muted:#8A97A8;
|
||
--line:#27313E;
|
||
--line-strong:#384555;
|
||
--accent:#77A6FF;
|
||
--accent-soft:#1A2740;
|
||
--op-and:#77A6FF;
|
||
--op-or:#5CC08C;
|
||
--op-not:#F0796C;
|
||
--op-xor:#E8B94A;
|
||
--warn:#E8B76B;
|
||
--warn-bg:#2A2113;
|
||
--warn-line:#5A4520;
|
||
--danger:#F58C84;
|
||
--danger-bg:#2C1817;
|
||
--danger-line:#5C2E2A;
|
||
--ok:#65C795;
|
||
--ok-bg:#14261D;
|
||
--shadow:0 1px 2px rgba(0,0,0,.4),0 8px 24px rgba(0,0,0,.35);
|
||
}
|
||
|
||
*{box-sizing:border-box}
|
||
body{
|
||
margin:0;
|
||
background:var(--ground);
|
||
color:var(--ink);
|
||
font-family:var(--sans);
|
||
font-size:15px;
|
||
line-height:1.72;
|
||
-webkit-font-smoothing:antialiased;
|
||
}
|
||
a{color:var(--accent)}
|
||
:focus-visible{outline:2px solid var(--accent);outline-offset:2px;border-radius:3px}
|
||
|
||
/* ---------- shell ---------- */
|
||
.shell{max-width:1240px;margin:0 auto;padding:0 28px 96px;display:grid;grid-template-columns:236px minmax(0,1fr);gap:52px;align-items:start}
|
||
@media (max-width:960px){.shell{grid-template-columns:minmax(0,1fr);gap:0;padding:0 20px 72px}}
|
||
|
||
/* ---------- masthead ---------- */
|
||
.masthead{grid-column:1/-1;padding:56px 0 34px;border-bottom:1px solid var(--line)}
|
||
.eyebrow{font-family:var(--mono);font-size:11px;letter-spacing:.16em;text-transform:uppercase;color:var(--muted);margin:0 0 14px}
|
||
.masthead h1{font-size:clamp(30px,4.4vw,44px);line-height:1.12;margin:0 0 12px;font-weight:600;letter-spacing:-.02em;text-wrap:balance}
|
||
.masthead .lede{margin:0;max-width:60ch;color:var(--ink-2);font-size:16px}
|
||
.meta{display:flex;flex-wrap:wrap;gap:8px;margin-top:24px}
|
||
.chip{display:inline-flex;align-items:center;gap:7px;background:var(--surface);border:1px solid var(--line);border-radius:999px;padding:5px 13px;font-size:12.5px;color:var(--ink-2)}
|
||
.chip b{font-weight:550;color:var(--ink)}
|
||
|
||
/* ---------- toc ---------- */
|
||
.toc{position:sticky;top:22px;padding-top:34px}
|
||
@media (max-width:960px){.toc{position:static;padding:26px 0 8px;border-bottom:1px solid var(--line);margin-bottom:8px}}
|
||
.toc-h{font-family:var(--mono);font-size:11px;letter-spacing:.14em;text-transform:uppercase;color:var(--muted);margin:0 0 12px}
|
||
.toc ol{list-style:none;margin:0;padding:0;display:flex;flex-direction:column;gap:1px}
|
||
@media (max-width:960px){.toc ol{flex-direction:row;flex-wrap:wrap;gap:6px}}
|
||
.toc a{display:flex;gap:10px;padding:6px 10px;border-radius:7px;text-decoration:none;color:var(--ink-2);font-size:13.5px;border:1px solid transparent}
|
||
@media (max-width:960px){.toc a{border-color:var(--line);background:var(--surface)}}
|
||
.toc a:hover{background:var(--surface);color:var(--ink)}
|
||
.toc a.on{background:var(--accent-soft);color:var(--accent);font-weight:550}
|
||
.toc .n{font-family:var(--mono);font-size:12px;opacity:.72;min-width:14px}
|
||
|
||
/* ---------- sections ---------- */
|
||
main{padding-top:34px;min-width:0}
|
||
section{scroll-margin-top:20px;margin-bottom:62px}
|
||
.sec-head{display:flex;align-items:baseline;gap:14px;margin:0 0 6px}
|
||
.sec-num{font-family:var(--mono);font-size:13px;color:var(--accent);font-weight:600;letter-spacing:.04em}
|
||
h2{font-size:25px;line-height:1.25;margin:0;font-weight:600;letter-spacing:-.015em;text-wrap:balance}
|
||
.sec-sub{color:var(--muted);margin:0 0 26px;font-size:14.5px;max-width:62ch}
|
||
h3{font-size:16.5px;margin:34px 0 10px;font-weight:600;letter-spacing:-.005em}
|
||
p{margin:0 0 14px;max-width:66ch}
|
||
ul,ol.list{margin:0 0 16px;padding-left:22px;max-width:66ch}
|
||
li{margin-bottom:7px}
|
||
strong{font-weight:600}
|
||
code{font-family:var(--mono);font-size:.885em;background:var(--surface-2);border:1px solid var(--line);border-radius:5px;padding:1.5px 5px}
|
||
kbd{font-family:var(--mono);font-size:.82em;background:var(--surface);border:1px solid var(--line-strong);border-bottom-width:2px;border-radius:5px;padding:1px 6px}
|
||
|
||
/* ---------- steps ---------- */
|
||
.steps{display:flex;flex-direction:column;gap:0;counter-reset:step;margin:0;padding:0;list-style:none}
|
||
.step{display:grid;grid-template-columns:34px minmax(0,1fr);gap:16px;padding:0 0 26px;position:relative}
|
||
.step::before{content:"";position:absolute;left:16.5px;top:32px;bottom:0;width:1px;background:var(--line)}
|
||
.step:last-child::before{display:none}
|
||
.step-n{grid-column:1;width:34px;height:34px;border-radius:50%;background:var(--surface);border:1px solid var(--line-strong);display:grid;place-items:center;font-family:var(--mono);font-size:13px;font-weight:600;color:var(--ink-2);position:relative;z-index:1}
|
||
.step-b{grid-column:2;min-width:0;padding-top:3px}
|
||
.step-b h4{margin:0 0 7px;font-size:15.5px;font-weight:600;line-height:1.5}
|
||
.step-b p{margin:0 0 11px}
|
||
.step-b :last-child{margin-bottom:0}
|
||
|
||
/* ---------- figure ---------- */
|
||
figure{margin:18px 0 4px}
|
||
.shot{display:block;width:100%;border:1px solid var(--line-strong);border-radius:var(--radius);box-shadow:var(--shadow);background:var(--surface);cursor:zoom-in}
|
||
figcaption{margin-top:9px;font-size:12.5px;color:var(--muted);display:flex;gap:9px;align-items:baseline}
|
||
figcaption .fignum{font-family:var(--mono);font-size:11.5px;color:var(--accent);font-weight:600;white-space:nowrap}
|
||
|
||
/* ---------- callouts ---------- */
|
||
.note{border:1px solid var(--line);border-left:3px solid var(--line-strong);background:var(--surface);border-radius:0 var(--radius) var(--radius) 0;padding:14px 18px;margin:18px 0;font-size:14.5px}
|
||
.note p{margin:0 0 9px;max-width:none}
|
||
.note :last-child{margin-bottom:0}
|
||
.note .lbl{font-family:var(--mono);font-size:11px;letter-spacing:.13em;text-transform:uppercase;font-weight:600;display:block;margin-bottom:6px}
|
||
.note.warn{border-left-color:var(--warn-line);background:var(--warn-bg)}
|
||
.note.warn .lbl{color:var(--warn)}
|
||
.note.danger{border-left-color:var(--danger-line);background:var(--danger-bg)}
|
||
.note.danger .lbl{color:var(--danger)}
|
||
.note.tip{border-left-color:var(--accent);background:var(--accent-soft)}
|
||
.note.tip .lbl{color:var(--accent)}
|
||
|
||
/* ---------- expression syntax ---------- */
|
||
.expr{font-family:var(--mono);background:var(--surface);border:1px solid var(--line);border-radius:var(--radius);padding:16px 18px;font-size:14.5px;overflow-x:auto;margin:16px 0;white-space:nowrap}
|
||
.expr .op{color:var(--op-and);font-weight:600}
|
||
.expr .tag{color:var(--ink)}
|
||
.expr .fresh{color:var(--op-xor);font-weight:600}
|
||
.expr .dim{color:var(--muted)}
|
||
|
||
.anno{display:grid;gap:9px;margin:14px 0 22px;padding:0;list-style:none;max-width:66ch}
|
||
.anno li{display:grid;grid-template-columns:auto minmax(0,1fr);gap:12px;align-items:start;margin:0;font-size:14px}
|
||
.anno code{white-space:nowrap}
|
||
|
||
/* ---------- operator grid ---------- */
|
||
.ops{display:grid;grid-template-columns:repeat(auto-fit,minmax(168px,1fr));gap:12px;margin:18px 0 22px}
|
||
.op-card{background:var(--surface);border:1px solid var(--line);border-left:3px solid var(--c);border-radius:0 var(--radius) var(--radius) 0;padding:13px 15px}
|
||
.op-card .sym{font-family:var(--mono);font-weight:600;font-size:13px;color:var(--c);letter-spacing:.05em}
|
||
.op-card .zh{font-weight:600;font-size:15px;margin:2px 0 5px}
|
||
.op-card .d{font-size:13px;color:var(--muted);line-height:1.6}
|
||
|
||
/* ---------- tables ---------- */
|
||
.tw{overflow-x:auto;border:1px solid var(--line);border-radius:var(--radius);margin:18px 0;background:var(--surface)}
|
||
table{border-collapse:collapse;width:100%;font-size:13.5px;min-width:520px}
|
||
th,td{text-align:left;padding:10px 15px;border-bottom:1px solid var(--line);vertical-align:top}
|
||
thead th{background:var(--surface-2);font-weight:600;font-size:12px;letter-spacing:.05em;text-transform:uppercase;color:var(--muted);white-space:nowrap;position:sticky;top:0}
|
||
tbody tr:last-child td{border-bottom:none}
|
||
td.num,th.num{font-family:var(--mono);font-variant-numeric:tabular-nums;white-space:nowrap}
|
||
.tid{font-family:var(--mono);color:var(--accent);font-weight:600;font-variant-numeric:tabular-nums}
|
||
|
||
/* ---------- appendix search ---------- */
|
||
.finder{display:flex;flex-wrap:wrap;gap:10px;align-items:center;margin:16px 0 4px}
|
||
.finder input{flex:1 1 240px;min-width:0;font-family:var(--sans);font-size:14px;padding:9px 13px;border:1px solid var(--line-strong);border-radius:8px;background:var(--surface);color:var(--ink)}
|
||
.finder input::placeholder{color:var(--muted)}
|
||
.segs{display:flex;gap:2px;background:var(--surface-2);border:1px solid var(--line);border-radius:9px;padding:3px}
|
||
.segs button{font-family:var(--sans);font-size:13px;padding:5px 13px;border:0;border-radius:6px;background:transparent;color:var(--ink-2);cursor:pointer;font-weight:500}
|
||
.segs button[aria-pressed="true"]{background:var(--surface);color:var(--ink);box-shadow:0 1px 2px rgba(0,0,0,.1)}
|
||
.count{font-size:12.5px;color:var(--muted);font-family:var(--mono);margin:10px 0 0}
|
||
.empty{padding:26px 15px;text-align:center;color:var(--muted);font-size:14px}
|
||
|
||
/* ---------- quickflow ---------- */
|
||
.flow{display:grid;grid-template-columns:repeat(auto-fit,minmax(148px,1fr));gap:10px;margin:6px 0 8px}
|
||
.flow div{background:var(--surface);border:1px solid var(--line);border-radius:var(--radius);padding:13px 15px}
|
||
.flow .k{font-family:var(--mono);font-size:11px;color:var(--accent);font-weight:600;letter-spacing:.08em}
|
||
.flow .v{font-weight:600;font-size:14.5px;margin-top:3px;line-height:1.45}
|
||
.flow .s{font-size:12.5px;color:var(--muted);margin-top:3px;line-height:1.55}
|
||
|
||
/* ---------- lightbox ---------- */
|
||
#lb{position:fixed;inset:0;background:rgba(8,11,15,.9);display:none;place-items:center;z-index:99;padding:28px;cursor:zoom-out}
|
||
#lb.on{display:grid}
|
||
#lb img{max-width:100%;max-height:100%;border-radius:8px;box-shadow:0 24px 70px rgba(0,0,0,.6)}
|
||
#lb .hint{position:absolute;bottom:16px;left:0;right:0;text-align:center;color:#9AA6B6;font-size:12px;font-family:var(--mono)}
|
||
|
||
footer{grid-column:1/-1;border-top:1px solid var(--line);padding-top:22px;color:var(--muted);font-size:13px;display:flex;flex-wrap:wrap;gap:8px 22px;justify-content:space-between}
|
||
@media (prefers-reduced-motion:reduce){*{animation:none!important;transition:none!important}}
|
||
</style>
|
||
|
||
<div class="shell">
|
||
|
||
<header class="masthead">
|
||
<p class="eyebrow">内部操作手册 · AM / 运营</p>
|
||
<h1>Manta 人群包平台操作手册</h1>
|
||
<p class="lede">从登录到导出的完整流程:怎么圈一个人群包、覆盖人数怎么读、导出给 Midas / SAN 要走哪一步,以及六个容易踩的坑。</p>
|
||
<div class="meta">
|
||
<span class="chip">环境 <b>manta-test.hellay.net</b></span>
|
||
<span class="chip">账号体系 <b>SHAREid</b></span>
|
||
<span class="chip">平台版本 <b>MANTA 1.0</b></span>
|
||
<span class="chip">整理日期 <b>2026-09-01</b></span>
|
||
</div>
|
||
</header>
|
||
|
||
<nav class="toc" aria-label="目录">
|
||
<p class="toc-h">目录</p>
|
||
<ol>
|
||
<li><a href="#s0"><span class="n">—</span>五步速览</a></li>
|
||
<li><a href="#s1"><span class="n">1</span>登录</a></li>
|
||
<li><a href="#s2"><span class="n">2</span>进入人群包管理</a></li>
|
||
<li><a href="#s3"><span class="n">3</span>新建人群包</a></li>
|
||
<li><a href="#s4"><span class="n">4</span>读懂覆盖人数</a></li>
|
||
<li><a href="#s5"><span class="n">5</span>导出</a></li>
|
||
<li><a href="#s6"><span class="n">6</span>编辑与删除</a></li>
|
||
<li><a href="#s7"><span class="n">7</span>六个坑</a></li>
|
||
<li><a href="#s8"><span class="n">A</span>标签速查</a></li>
|
||
</ol>
|
||
</nav>
|
||
|
||
<main>
|
||
|
||
<!-- ============ 0 ============ -->
|
||
<section id="s0">
|
||
<div class="sec-head"><span class="sec-num">速览</span><h2>五步走完一个人群包</h2></div>
|
||
<p class="sec-sub">整个平台对 AM / 运营 来说只有一条主线,其余菜单都不用碰。</p>
|
||
<div class="flow">
|
||
<div><div class="k">01</div><div class="v">登录</div><div class="s">SHAREid 账号</div></div>
|
||
<div><div class="k">02</div><div class="v">新增人群包</div><div class="s">起名 + 选运算符</div></div>
|
||
<div><div class="k">03</div><div class="v">加标签</div><div class="s">分类 → 值 → 新鲜度</div></div>
|
||
<div><div class="k">04</div><div class="v">提交</div><div class="s">无需审核,立即生效</div></div>
|
||
<div><div class="k">05</div><div class="v">导出</div><div class="s">CSV 文件 或 接口</div></div>
|
||
</div>
|
||
<div class="note tip">
|
||
<span class="lbl">一句话</span>
|
||
<p>人群包 = 一条<strong>集合运算表达式</strong>。你在页面上点的每一步,最后都落成 <code>AND(〔36:RU•6〕,〔54•6〕)</code> 这样一行式子;看懂这行式子,整个平台就通了。</p>
|
||
</div>
|
||
</section>
|
||
|
||
<!-- ============ 1 ============ -->
|
||
<section id="s1">
|
||
<div class="sec-head"><span class="sec-num">01</span><h2>登录</h2></div>
|
||
<p class="sec-sub">先确认网络环境,再用 SHAREid 账号登录。平台没有注册入口,账号由研发侧开通。</p>
|
||
|
||
<div class="note tip">
|
||
<span class="lbl">前置 · 网络环境</span>
|
||
<p><strong>公司内网</strong>下直接访问,无需任何配置。</p>
|
||
<p><strong>在公司外</strong>(家里、出差、用手机热点)必须先连上<strong>飞连</strong>,否则页面打不开。打不开时先检查飞连是不是断了,再去找研发。</p>
|
||
</div>
|
||
|
||
<ol class="steps">
|
||
<li class="step">
|
||
<div class="step-n">1</div>
|
||
<div class="step-b">
|
||
<h4>打开 <code>manta-test.hellay.net/admin/login</code></h4>
|
||
<p>输入<strong>内部 SHAREid 账号</strong>和密码,点「登录」。页面上没有「注册」和「忘记密码」,这是正常的。</p>
|
||
<figure><img class="shot" loading="lazy" decoding="async" alt="登录页。只有用户名、密码、登录按钮三个元素。" src="img/01-01.jpg"><figcaption><span class="fignum">图 1-1</span><span>登录页。只有用户名、密码、登录按钮三个元素。</span></figcaption></figure>
|
||
</div>
|
||
</li>
|
||
<li class="step">
|
||
<div class="step-n">2</div>
|
||
<div class="step-b">
|
||
<h4>打不开或登录失败</h4>
|
||
<p>找<strong>研发 - 杨继广</strong>配置权限。平台<strong>不区分角色</strong>,开通后所有人看到的内容和可执行的操作都一样。</p>
|
||
</div>
|
||
</li>
|
||
</ol>
|
||
|
||
<div class="note">
|
||
<span class="lbl">关于环境</span>
|
||
<p>本手册基于<strong>测试环境</strong> <code>manta-test.hellay.net</code> 编写。生产环境的页面布局与操作步骤一致,只有域名不同。</p>
|
||
</div>
|
||
</section>
|
||
|
||
<!-- ============ 2 ============ -->
|
||
<section id="s2">
|
||
<div class="sec-head"><span class="sec-num">02</span><h2>进入人群包管理</h2></div>
|
||
<p class="sec-sub">左侧六个菜单,日常只用一个。</p>
|
||
|
||
<p>登录后进入工作台。在左侧导航点 <strong>人群包管理 → 人群包管理</strong>,进入人群包列表 —— 这是你 90% 时间待的页面。</p>
|
||
|
||
<figure><img class="shot" loading="lazy" decoding="async" alt="人群包列表。左侧导航、列表字段、右上角「新增人群包」按钮。" src="img/02-01.jpg"><figcaption><span class="fignum">图 2-1</span><span>人群包列表。左侧导航、列表字段、右上角「新增人群包」按钮。</span></figcaption></figure>
|
||
|
||
<h3>其余菜单要不要管</h3>
|
||
<div class="tw">
|
||
<table>
|
||
<thead><tr><th>菜单</th><th>用途</th><th>AM / 运营</th></tr></thead>
|
||
<tbody>
|
||
<tr><td><strong>工作台</strong></td><td>登录日志与系统提示</td><td>不用看</td></tr>
|
||
<tr><td><strong>标签管理</strong></td><td>标签的创建与审核,由数据侧维护</td><td>不用碰</td></tr>
|
||
<tr><td><strong>人群包管理</strong></td><td>创建、查看、导出、编辑、删除人群包</td><td><strong>主战场</strong></td></tr>
|
||
<tr><td><strong>IP 黑名单管理</strong></td><td>IP 拦截配置</td><td>不用碰</td></tr>
|
||
<tr><td><strong>管理权限</strong></td><td>后台账号权限</td><td>不用碰</td></tr>
|
||
<tr><td><strong>我的帐号</strong></td><td>改自己的密码等</td><td>按需</td></tr>
|
||
</tbody>
|
||
</table>
|
||
</div>
|
||
|
||
<h3>列表字段怎么读</h3>
|
||
<div class="tw">
|
||
<table>
|
||
<thead><tr><th>字段</th><th>含义</th></tr></thead>
|
||
<tbody>
|
||
<tr><td><strong>ID</strong></td><td>人群包编号,导出文件名和接口都会带上它</td></tr>
|
||
<tr><td><strong>名称</strong></td><td>创建时自己起的名字</td></tr>
|
||
<tr><td><strong>圈选策略</strong></td><td>这个包的集合运算表达式,见 <a href="#s3">第 3 节</a></td></tr>
|
||
<tr><td><strong>覆盖人数</strong></td><td><strong>创建时的快照</strong>,不会自动刷新,见 <a href="#s4">第 4 节</a></td></tr>
|
||
<tr><td><strong>添加时间</strong></td><td><strong>UTC 时间</strong>,比北京时间晚 8 小时</td></tr>
|
||
<tr><td><strong>操作</strong></td><td>导出 ▾ / 编辑 / 删除</td></tr>
|
||
</tbody>
|
||
</table>
|
||
</div>
|
||
|
||
<p>列表按 <strong>ID 倒序</strong>排列,最新创建的排在最上面。</p>
|
||
|
||
<div class="note tip">
|
||
<span class="lbl">两个创建入口</span>
|
||
<p>左侧「<strong>新增人群包</strong>」和列表右上角的「<strong>新增人群包</strong>」按钮是同一个页面。右上角蓝色的「<strong>+ 创建</strong>」是通用入口,展开后可以选创建<strong>人群包</strong>或创建<strong>标签</strong> —— 运营选人群包即可。</p>
|
||
</div>
|
||
</section>
|
||
|
||
<!-- ============ 3 ============ -->
|
||
<section id="s3">
|
||
<div class="sec-head"><span class="sec-num">03</span><h2>新建人群包</h2></div>
|
||
<p class="sec-sub">起名 → 选运算符 → 逐个加标签 → 提交。全程无审核。</p>
|
||
|
||
<figure><img class="shot" loading="lazy" decoding="async" alt="新增人群包表单上半部分:名称、操作类型、预估受众人数、选择标签。" src="img/03-01.jpg"><figcaption><span class="fignum">图 3-1</span><span>新增人群包表单上半部分:名称、操作类型、预估受众人数、选择标签。</span></figcaption></figure>
|
||
<figure><img class="shot" loading="lazy" decoding="async" alt="表单下半部分:构建表达式区与「提交 / 返回列表」按钮。" src="img/03-02.jpg"><figcaption><span class="fignum">图 3-2</span><span>表单下半部分:构建表达式区与「提交 / 返回列表」按钮。</span></figcaption></figure>
|
||
|
||
<ol class="steps">
|
||
|
||
<li class="step">
|
||
<div class="step-n">1</div>
|
||
<div class="step-b">
|
||
<h4>填写人群包名称</h4>
|
||
<p>建议用<strong>「产品_国家_人群特征_日期」</strong>的格式,例如 <code>Edadeal_RU_Ecom_0901</code>、<code>Amazon_SA_Travel&local_0831</code>。名称是后面找包和对接渠道时唯一的抓手,别用「测试1」这类。</p>
|
||
</div>
|
||
</li>
|
||
|
||
<li class="step">
|
||
<div class="step-n">2</div>
|
||
<div class="step-b">
|
||
<h4>选择操作类型(集合运算符)</h4>
|
||
<p>决定多个标签之间怎么组合。四选一:</p>
|
||
<div class="ops">
|
||
<div class="op-card" style="--c:var(--op-and)"><div class="sym">AND</div><div class="zh">交集</div><div class="d">同时满足所有标签。最常用 —— 「俄罗斯 <em>且</em> 逛过电商」。</div></div>
|
||
<div class="op-card" style="--c:var(--op-or)"><div class="sym">OR</div><div class="zh">并集</div><div class="d">满足任一标签即可。用来放大量级。</div></div>
|
||
<div class="op-card" style="--c:var(--op-not)"><div class="sym">NOT</div><div class="zh">差集</div><div class="d">排除某部分人。用来剔除已转化或已安装用户。</div></div>
|
||
<div class="op-card" style="--c:var(--op-xor)"><div class="sym">XOR</div><div class="zh">对称差</div><div class="d">只保留「二选一」的人,两者都满足的反而排除。用得少。</div></div>
|
||
</div>
|
||
<div class="note warn">
|
||
<span class="lbl">注意</span>
|
||
<p>点中运算符后,<strong>卡片本身没有任何选中高亮</strong>,界面上看不出你选没选。判断依据是往下滚看「构建表达式」区 —— 出现 <code>AND(</code> 就说明选中了。</p>
|
||
</div>
|
||
</div>
|
||
</li>
|
||
|
||
<li class="step">
|
||
<div class="step-n">3</div>
|
||
<div class="step-b">
|
||
<h4>挑一个标签分类</h4>
|
||
<p>「选择标签」区有四个页签,括号里是该类下的标签数量。选中的页签会变成深色底:</p>
|
||
<ul>
|
||
<li><strong>基础资料 (5)</strong> —— 语言、国家、城市、手机品牌、app_id</li>
|
||
<li><strong>用户行为 (112)</strong> —— 购买、付费、安装过某类产品……</li>
|
||
<li><strong>用户分类 (28)</strong> —— 游戏、金融、购物、旅游与本地生活……</li>
|
||
<li><strong>设备属性 (1)</strong> —— android 系统版本</li>
|
||
</ul>
|
||
<p>完整清单见文末<a href="#s8">标签速查</a>。</p>
|
||
</div>
|
||
</li>
|
||
|
||
<li class="step">
|
||
<div class="step-n">4</div>
|
||
<div class="step-b">
|
||
<h4>选具体标签与新鲜度</h4>
|
||
<p>下拉框里每一项都是 <code>[标签ID] 标签名</code> 的格式。下拉打开后<strong>顶部有搜索框</strong>,用户行为有 112 个标签,直接搜关键词比往下翻快得多。</p>
|
||
<figure><img class="shot" loading="lazy" decoding="async" alt="标签下拉。顶部搜索框,选项格式为 [标签ID] 标签名。" src="img/03-06.jpg"><figcaption><span class="fignum">图 3-3</span><span>标签下拉。顶部搜索框,选项格式为 [标签ID] 标签名。</span></figcaption></figure>
|
||
|
||
<div class="note warn">
|
||
<span class="lbl">注意 · 下拉框数量会变</span>
|
||
<p>不同分类的标签,需要填的下拉框数量<strong>不一样</strong>,这是最容易卡住新手的地方:</p>
|
||
<ul>
|
||
<li><strong>3 个下拉</strong> —— 标签本身还要选值。如 <code>[36] 国家</code> 必须再选 <code>RU</code>;<code>[44] 手机品牌</code> 必须再选具体品牌。</li>
|
||
<li><strong>2 个下拉</strong> —— 标签就是条件本身,没有值可选。如 <code>[54] 旅游与本地生活</code>、<code>[38] 购买</code>。</li>
|
||
</ul>
|
||
<p>看不到第三个框不是页面坏了,是这个标签不需要值。</p>
|
||
</div>
|
||
|
||
<p>最后一个下拉是<strong>新鲜度</strong>,指圈的是最近多长时间的数据,四选一:</p>
|
||
<div class="tw">
|
||
<table>
|
||
<thead><tr><th>新鲜度</th><th class="num">表达式里的写法</th><th>适用</th></tr></thead>
|
||
<tbody>
|
||
<tr><td>一个月</td><td class="num">·1</td><td>行为新鲜、意图强,量级最小</td></tr>
|
||
<tr><td>三个月</td><td class="num">·3</td><td>兼顾新鲜度与量级</td></tr>
|
||
<tr><td>半年</td><td class="num">·6</td><td>最常用的默认档</td></tr>
|
||
<tr><td>一年</td><td class="num">·12</td><td>要量级时用</td></tr>
|
||
</tbody>
|
||
</table>
|
||
</div>
|
||
<figure><img class="shot" loading="lazy" decoding="async" alt="基础资料 → [36] 国家,需要三个下拉:标签、值 RU、新鲜度 半年。" src="img/03-03.jpg"><figcaption><span class="fignum">图 3-4</span><span>基础资料 → [36] 国家,需要三个下拉:标签、值 RU、新鲜度 半年。</span></figcaption></figure>
|
||
</div>
|
||
</li>
|
||
|
||
<li class="step">
|
||
<div class="step-n">5</div>
|
||
<div class="step-b">
|
||
<h4>点「添加标签」,把标签放进表达式</h4>
|
||
<p>每点一次「添加标签」,就往表达式里填一个操作数。加完第一个时是这样:</p>
|
||
<div class="expr"><span class="op">AND(</span> <span class="tag">〔国家:RU<span class="fresh">·6</span>〕</span><span class="dim">✕</span> , <span class="dim">[参数]</span> <span class="op">)</span></div>
|
||
<p><code>参数</code> 是还没填的占位。把第二个标签也加进去,表达式就完整了:</p>
|
||
<figure><img class="shot" loading="lazy" decoding="async" alt="加入第一个标签后,第二个操作数显示为蓝色「参数」占位。" src="img/03-04.jpg"><figcaption><span class="fignum">图 3-5</span><span>加入第一个标签后,第二个操作数显示为蓝色「参数」占位。</span></figcaption></figure>
|
||
<figure><img class="shot" loading="lazy" decoding="async" alt="表达式填满,预估受众人数立即算出 16,049,379。" src="img/03-05.jpg"><figcaption><span class="fignum">图 3-6</span><span>表达式填满,预估受众人数立即算出 16,049,379。</span></figcaption></figure>
|
||
|
||
<h3 style="margin-top:26px">怎么读这行表达式</h3>
|
||
<div class="expr"><span class="op">AND(</span> <span class="tag">〔国家:RU<span class="fresh">·6</span>〕</span> , <span class="tag">〔旅游与本地生活<span class="fresh">·6</span>〕</span> <span class="op">)</span></div>
|
||
<ul class="anno">
|
||
<li><code>AND</code><span>运算符 —— 两个条件同时满足</span></li>
|
||
<li><code>国家:RU</code><span>标签名 : 标签值 —— 国家等于俄罗斯</span></li>
|
||
<li><code>·6</code><span>新鲜度 —— 最近 <strong>6 个月</strong>的数据</span></li>
|
||
<li><code>旅游与本地生活</code><span>该标签不需要值,所以没有冒号部分</span></li>
|
||
</ul>
|
||
<p>表达式下方还有一个文本框,显示同一条式子的 ID 形式:<code>AND(〔36:RU•6〕,〔54•6〕)</code> —— 这里的 <code>36</code> 和 <code>54</code> 是标签 ID。</p>
|
||
|
||
<div class="note warn">
|
||
<span class="lbl">注意 · 列表表头写错了</span>
|
||
<p>列表页「圈选策略」的表头括号里写着「数字为标签ID」,但列表里显示的 <code>〔国家:RU·6〕</code> 中的 <strong>6 是新鲜度,不是标签 ID</strong>。以本节的读法为准。</p>
|
||
</div>
|
||
|
||
<div class="note tip">
|
||
<span class="lbl">进阶 · 嵌套表达式</span>
|
||
<p>蓝色的「<strong>参数</strong>」占位是<strong>可以点的</strong> —— 点开可以在里面再嵌一层运算,构造 <code>AND(A, OR(B,C))</code> 这类复合条件。需要「俄罗斯 且(逛过电商 或 用过钱包)」时就靠它。</p>
|
||
</div>
|
||
</div>
|
||
</li>
|
||
|
||
<li class="step">
|
||
<div class="step-n">6</div>
|
||
<div class="step-b">
|
||
<h4>确认预估受众人数,提交</h4>
|
||
<p>表达式一填满,<strong>预估受众人数会自动算出来</strong>,不用手动点计算。这个数就是这个包能圈到的实际量级 —— 如果数字明显不对(太小或为 0),先回头检查标签和新鲜度,别急着提交。</p>
|
||
<p>确认无误后点 <strong>提交</strong>。<strong>平台没有审核环节</strong>,提交即生效。</p>
|
||
<figure><img class="shot" loading="lazy" decoding="async" alt="提交成功页。页面会自动跳回列表,不跳就点「这里」。" src="img/03-07.jpg"><figcaption><span class="fignum">图 3-7</span><span>提交成功页。页面会自动跳回列表,不跳就点「这里」。</span></figcaption></figure>
|
||
</div>
|
||
</li>
|
||
</ol>
|
||
</section>
|
||
|
||
<!-- ============ 4 ============ -->
|
||
<section id="s4">
|
||
<div class="sec-head"><span class="sec-num">04</span><h2>读懂覆盖人数</h2></div>
|
||
<p class="sec-sub">列表上的数和编辑页里的数不是一回事,对数之前先搞清楚这点。</p>
|
||
|
||
<p>新建的包会出现在列表第一行,覆盖人数与创建时的预估完全一致:</p>
|
||
<figure><img class="shot" loading="lazy" decoding="async" alt="ID 5 为刚创建的包,覆盖人数 16,049,379,与创建时的预估一致。" src="img/04-01.jpg"><figcaption><span class="fignum">图 4-1</span><span>ID 5 为刚创建的包,覆盖人数 16,049,379,与创建时的预估一致。</span></figcaption></figure>
|
||
|
||
<div class="tw">
|
||
<table>
|
||
<thead><tr><th>在哪看</th><th>叫什么</th><th>是什么</th></tr></thead>
|
||
<tbody>
|
||
<tr><td>人群包列表</td><td><strong>覆盖人数</strong></td><td><strong>创建时的快照</strong>,之后不再变化</td></tr>
|
||
<tr><td>编辑页</td><td><strong>预估受众人数</strong></td><td><strong>每次打开实时重算</strong>,随底层数据变动</td></tr>
|
||
</tbody>
|
||
</table>
|
||
</div>
|
||
|
||
<div class="note warn">
|
||
<span class="lbl">注意 · 两个数会对不上</span>
|
||
<p>同一个包、同一条表达式,列表显示 <strong>16,049,379</strong>,几分钟后打开编辑页显示 <strong>16,225,897</strong>。这不是 bug —— 底层数据在持续更新,实时值自然会漂。</p>
|
||
<p><strong>要报当前量级,进编辑页看实时值;列表里的数只代表建包那一刻。</strong></p>
|
||
</div>
|
||
|
||
<div class="note warn">
|
||
<span class="lbl">注意 · 时间是 UTC</span>
|
||
<p>列表「添加时间」是 <strong>UTC 时间</strong>,比北京时间<strong>晚 8 小时</strong>。页面显示 <code>2026-09-01 06:15:36</code>,实际是北京时间当天下午 <code>14:15</code>。导出文件名里的时间戳同理。</p>
|
||
</div>
|
||
</section>
|
||
|
||
<!-- ============ 5 ============ -->
|
||
<section id="s5">
|
||
<div class="sec-head"><span class="sec-num">05</span><h2>导出</h2></div>
|
||
<p class="sec-sub">两种方式:下载 CSV 文件,或生成接口地址给下游系统。</p>
|
||
|
||
<p>在目标人群包这一行,点「<strong>导出</strong>」右侧的 <strong>▾</strong>,展开两个选项:</p>
|
||
<figure><img class="shot" loading="lazy" decoding="async" alt="导出菜单:接口 / 文件。" src="img/05-00.jpg"><figcaption><span class="fignum">图 5-1</span><span>导出菜单:接口 / 文件。</span></figcaption></figure>
|
||
|
||
<h3>方式一 · 文件(下载 CSV)</h3>
|
||
<p>点「文件」后<strong>没有任何弹窗、没有二次确认,页面也不会有任何变化</strong> —— 浏览器直接开始下载,唯一的反馈是右上角下载图标在转。</p>
|
||
|
||
<div class="note warn">
|
||
<span class="lbl">注意 · 别以为没反应就狂点</span>
|
||
<p>人群包越大文件越大,下载要等。实测 64.7 万人的包约 <strong>24 MB</strong>,1,604 万人的包超过 <strong>500 MB</strong>,且中途可能因网络中断。点一次就耐心等浏览器下载完。</p>
|
||
</div>
|
||
|
||
<p>导出文件的结构:</p>
|
||
<div class="tw">
|
||
<table>
|
||
<thead><tr><th>项目</th><th>说明</th></tr></thead>
|
||
<tbody>
|
||
<tr><td>文件名</td><td><code>{包名片段}_audience_{人群包ID}_{时间戳}.csv</code>,时间戳为 UTC</td></tr>
|
||
<tr><td>格式</td><td><strong>单列 CSV</strong>,第 1 行是表头 <code>gaid</code></td></tr>
|
||
<tr><td>内容</td><td>第 2 行起每行一个 GAID,标准 UUID 格式</td></tr>
|
||
<tr><td>行数</td><td>覆盖人数 + 1 行表头,可用来校验完整性</td></tr>
|
||
<tr><td>ID 类型</td><td><strong>只有 GAID(Android 广告 ID),不含 IDFA</strong></td></tr>
|
||
</tbody>
|
||
</table>
|
||
</div>
|
||
<p>示例:<code>SA_Travel&Local_audience_4_2026_08_31_08_08_13.csv</code>,646,957 行 = 覆盖人数 646,956 + 表头。</p>
|
||
|
||
<h3>方式二 · 接口(给 Midas / SAN 调用)</h3>
|
||
<p>点「接口」弹出对话框,只有一个字段「<strong>选择接入方</strong>」,三个选项:<code>测试</code>、<code>midas</code>、<code>san</code>。</p>
|
||
<figure><img class="shot" loading="lazy" decoding="async" alt="「导出接口」弹窗,选择接入方下拉。" src="img/05-02.jpg"><figcaption><span class="fignum">图 5-2</span><span>「导出接口」弹窗,选择接入方下拉。</span></figcaption></figure>
|
||
|
||
<p>选定接入方后,<strong>接口地址立即生成</strong>,没有确认按钮。点「复制」把地址交给下游系统即可:</p>
|
||
<div class="expr"><span class="dim">http://manta-test.hellay.net/api/v1/audience/export/</span><span class="op">{token}</span></div>
|
||
<figure><img class="shot" loading="lazy" decoding="async" alt="选定 midas 后生成的接口地址(token 段已打码)与「复制」按钮。" src="img/05-03.jpg"><figcaption><span class="fignum">图 5-3</span><span>选定 midas 后生成的接口地址(token 段已打码)与「复制」按钮。</span></figcaption></figure>
|
||
|
||
<div class="note danger">
|
||
<span class="lbl">安全</span>
|
||
<p>接口地址里的 <strong>token 就是凭证</strong>,拿到地址的人即可取走整个人群包。只发给对应的接入方,<strong>不要贴进公开文档、群聊或工单</strong>。不同接入方生成的地址不同,不要互相复用。</p>
|
||
</div>
|
||
</section>
|
||
|
||
<!-- ============ 6 ============ -->
|
||
<section id="s6">
|
||
<div class="sec-head"><span class="sec-num">06</span><h2>编辑与删除</h2></div>
|
||
<p class="sec-sub">改策略要整体重建;删除不可恢复。</p>
|
||
|
||
<h3>编辑</h3>
|
||
<p>点操作列的「编辑」,进入的页面和新增页布局完全一样,只是标题变成「编辑人群包」,名称和预估受众人数已经填好。</p>
|
||
<figure><img class="shot" loading="lazy" decoding="async" alt="编辑页。布局与新增页一致,名称已回填。" src="img/06-01.jpg"><figcaption><span class="fignum">图 6-1</span><span>编辑页。布局与新增页一致,名称已回填。</span></figcaption></figure>
|
||
<p>原有的圈选策略<strong>会完整回显</strong>在构建表达式区:</p>
|
||
<figure><img class="shot" loading="lazy" decoding="async" alt="编辑页回显原表达式,预估受众人数为实时重算值。" src="img/06-02.jpg"><figcaption><span class="fignum">图 6-2</span><span>编辑页回显原表达式,预估受众人数为实时重算值。</span></figcaption></figure>
|
||
|
||
<div class="note warn">
|
||
<span class="lbl">注意 · 改策略必须整体重建</span>
|
||
<p>虽然表达式回显了,但<strong>不能在原表达式上局部增删</strong>。要改圈选策略,得先点红色的「<strong>清空</strong>」,再从选操作类型开始重新搭一遍。</p>
|
||
<p>只改名字则不受影响,直接改完提交即可。</p>
|
||
</div>
|
||
|
||
<h3>删除</h3>
|
||
<p>点操作列的「删除」,弹出<strong>浏览器原生确认框</strong>:</p>
|
||
<figure><img class="shot" loading="lazy" decoding="async" alt="删除确认框。只有一句「您确认删除吗?」,不显示包名。" src="img/06-03.jpg"><figcaption><span class="fignum">图 6-3</span><span>删除确认框。只有一句「您确认删除吗?」,不显示包名。</span></figcaption></figure>
|
||
|
||
<div class="note danger">
|
||
<span class="lbl">高危 · 删错了救不回来</span>
|
||
<p>确认框<strong>只说「您确认删除吗?」,不显示被删的是哪个包、哪个 ID</strong>。平台没有回收站,点了「确定」就没了。</p>
|
||
<p><strong>核对办法</strong>:把鼠标停在「删除」上先别点,浏览器<strong>左下角状态栏</strong>会显示 <code>/admin/audience/delete?audience_id=3</code> —— 确认这个 ID 和你要删的那一行一致,再点。</p>
|
||
</div>
|
||
</section>
|
||
|
||
<!-- ============ 7 ============ -->
|
||
<section id="s7">
|
||
<div class="sec-head"><span class="sec-num">07</span><h2>六个坑</h2></div>
|
||
<p class="sec-sub">都是实际操作中撞到的,按撞到的概率排序。</p>
|
||
|
||
<div class="tw">
|
||
<table>
|
||
<thead><tr><th style="width:30%">现象</th><th>真相与应对</th></tr></thead>
|
||
<tbody>
|
||
<tr>
|
||
<td><strong>点了运算符,看不出选中没有</strong></td>
|
||
<td>操作类型卡片<strong>没有选中高亮</strong>。往下滚看「构建表达式」区,出现 <code>AND(</code> 之类的运算符才算选上。</td>
|
||
</tr>
|
||
<tr>
|
||
<td><strong>标签选完只有两个下拉框</strong></td>
|
||
<td>正常。<code>国家</code>、<code>手机品牌</code> 这类标签需要选值(3 个框),<code>旅游与本地生活</code>、<code>购买</code> 这类标签本身就是条件(2 个框)。</td>
|
||
</tr>
|
||
<tr>
|
||
<td><strong>列表时间和实际操作时间对不上</strong></td>
|
||
<td>列表「添加时间」和导出文件名里的时间戳都是 <strong>UTC</strong>,<strong>+8 小时</strong>才是北京时间。</td>
|
||
</tr>
|
||
<tr>
|
||
<td><strong>列表覆盖人数和编辑页数字不一样</strong></td>
|
||
<td>列表是<strong>建包时的快照</strong>,编辑页是<strong>实时重算</strong>。报当前量级用编辑页的数。</td>
|
||
</tr>
|
||
<tr>
|
||
<td><strong>点了导出没反应</strong></td>
|
||
<td>「文件」导出<strong>无弹窗无提示</strong>,已经在下载了。看浏览器右上角下载图标,大包要等很久,别重复点。</td>
|
||
</tr>
|
||
<tr>
|
||
<td><strong>「数字为标签ID」看不懂</strong></td>
|
||
<td>列表表头的这句提示<strong>写错了</strong>。<code>〔国家:RU·6〕</code> 里的 <code>6</code> 是新鲜度(半年)。标签 ID 出现在下拉框的 <code>[36]</code> 和表达式文本框里。</td>
|
||
</tr>
|
||
</tbody>
|
||
</table>
|
||
</div>
|
||
</section>
|
||
|
||
<!-- ============ 8 ============ -->
|
||
<section id="s8">
|
||
<div class="sec-head"><span class="sec-num">附录</span><h2>标签速查</h2></div>
|
||
<p class="sec-sub">共 146 个标签。下拉框里搜关键词最快,这张表用来提前想好圈哪些。</p>
|
||
|
||
<div class="finder">
|
||
<input id="q" type="search" placeholder="搜标签名或 ID,例如:电商、加密、38" aria-label="搜索标签">
|
||
<div class="segs" role="group" aria-label="按分类筛选">
|
||
<button data-cat="all" aria-pressed="true">全部</button>
|
||
<button data-cat="category" aria-pressed="false">用户分类 28</button>
|
||
<button data-cat="behavior" aria-pressed="false">用户行为 112</button>
|
||
<button data-cat="other" aria-pressed="false">基础 · 设备 6</button>
|
||
</div>
|
||
</div>
|
||
<p class="count" id="cnt"></p>
|
||
|
||
<div class="tw">
|
||
<table>
|
||
<thead><tr><th class="num" style="width:80px">标签ID</th><th>标签名</th><th style="width:130px">分类</th><th style="width:110px">需选值</th></tr></thead>
|
||
<tbody id="tb"></tbody>
|
||
</table>
|
||
<div class="empty" id="none" hidden>没有匹配的标签</div>
|
||
</div>
|
||
|
||
<div class="note">
|
||
<span class="lbl">说明</span>
|
||
<p>「需选值」为<strong>是</strong>的标签,在表单里会多出一个下拉框让你选具体的值(如国家选 <code>RU</code>);为<strong>否</strong>的标签本身就是条件,只需再选新鲜度。</p>
|
||
</div>
|
||
</section>
|
||
|
||
</main>
|
||
|
||
<footer>
|
||
<span>Manta 人群包平台操作手册 · 基于测试环境 manta-test.hellay.net 整理</span>
|
||
<span>如平台改版与本文不符,以页面实际为准</span>
|
||
</footer>
|
||
</div>
|
||
|
||
<div id="lb" role="dialog" aria-label="放大查看截图" aria-modal="true">
|
||
<img alt="">
|
||
<div class="hint">点击任意处或按 Esc 关闭</div>
|
||
</div>
|
||
|
||
<script>
|
||
(function(){
|
||
/* ---- lightbox ---- */
|
||
var lb=document.getElementById('lb'), lbi=lb.querySelector('img');
|
||
document.querySelectorAll('.shot').forEach(function(im){
|
||
im.addEventListener('click',function(){ lbi.src=im.src; lbi.alt=im.alt; lb.classList.add('on'); });
|
||
});
|
||
lb.addEventListener('click',function(){ lb.classList.remove('on'); lbi.src=''; });
|
||
document.addEventListener('keydown',function(e){ if(e.key==='Escape'&&lb.classList.contains('on')){ lb.classList.remove('on'); lbi.src=''; } });
|
||
|
||
/* ---- toc active state ---- */
|
||
var links=[].slice.call(document.querySelectorAll('.toc a'));
|
||
var map={}; links.forEach(function(a){ var el=document.querySelector(a.getAttribute('href')); if(el) map[el.id]=a; });
|
||
if('IntersectionObserver' in window){
|
||
var io=new IntersectionObserver(function(es){
|
||
es.forEach(function(en){
|
||
if(en.isIntersecting){ links.forEach(function(a){a.classList.remove('on')}); if(map[en.target.id]) map[en.target.id].classList.add('on'); }
|
||
});
|
||
},{rootMargin:'-10% 0px -70% 0px'});
|
||
document.querySelectorAll('section').forEach(function(s){io.observe(s)});
|
||
}
|
||
|
||
/* ---- tag appendix ---- */
|
||
var TAGS = [{"id":35,"n":"语言","c":"profile","v":true},{"id":36,"n":"国家","c":"profile","v":true},{"id":37,"n":"城市","c":"profile","v":true},{"id":44,"n":"手机品牌","c":"profile","v":true},{"id":82,"n":"app_id","c":"profile","v":true},{"id":43,"n":"android系统版本","c":"device","v":true},{"id":45,"n":"游戏","c":"category","v":false},{"id":46,"n":"金融","c":"category","v":false},{"id":47,"n":"购物","c":"category","v":false},{"id":48,"n":"社交与约会","c":"category","v":false},{"id":49,"n":"娱乐","c":"category","v":false},{"id":50,"n":"博彩","c":"category","v":false},{"id":51,"n":"工具","c":"category","v":false},{"id":52,"n":"商务","c":"category","v":false},{"id":53,"n":"美食与饮品","c":"category","v":false},{"id":54,"n":"旅游与本地生活","c":"category","v":false},{"id":55,"n":"赚钱与返利","c":"category","v":false},{"id":56,"n":"教育","c":"category","v":false},{"id":57,"n":"健康与健身","c":"category","v":false},{"id":58,"n":"汽车与交通工具","c":"category","v":false},{"id":59,"n":"生活方式","c":"category","v":false},{"id":60,"n":"新闻与杂志","c":"category","v":false},{"id":61,"n":"医疗","c":"category","v":false},{"id":62,"n":"图书与参考","c":"category","v":false},{"id":63,"n":"电信","c":"category","v":false},{"id":64,"n":"通讯","c":"category","v":false},{"id":65,"n":"家居","c":"category","v":false},{"id":66,"n":"体育","c":"category","v":false},{"id":67,"n":"地图与导航","c":"category","v":false},{"id":68,"n":"音乐与音频","c":"category","v":false},{"id":69,"n":"效率办公","c":"category","v":false},{"id":70,"n":"摄影","c":"category","v":false},{"id":71,"n":"虚拟","c":"category","v":false},{"id":72,"n":"视频播放与编辑","c":"category","v":false},{"id":38,"n":"购买","c":"behavior","v":false},{"id":39,"n":"付费","c":"behavior","v":false},{"id":40,"n":"入金","c":"behavior","v":false},{"id":41,"n":"投资","c":"behavior","v":false},{"id":42,"n":"贷款","c":"behavior","v":false},{"id":73,"n":"新手引导","c":"behavior","v":false},{"id":74,"n":"看广告","c":"behavior","v":false},{"id":75,"n":"等级达成","c":"behavior","v":false},{"id":76,"n":"加购","c":"behavior","v":false},{"id":77,"n":"商品浏览","c":"behavior","v":false},{"id":78,"n":"订阅","c":"behavior","v":false},{"id":79,"n":"申贷","c":"behavior","v":false},{"id":80,"n":"kyc开始","c":"behavior","v":false},{"id":81,"n":"kyc成功","c":"behavior","v":false},{"id":83,"n":"安装过数字银行产品","c":"behavior","v":false},{"id":84,"n":"安装过消费贷产品","c":"behavior","v":false},{"id":85,"n":"安装过小额贷款产品","c":"behavior","v":false},{"id":86,"n":"安装过数字钱包产品","c":"behavior","v":false},{"id":87,"n":"安装过音乐订阅产品","c":"behavior","v":false},{"id":88,"n":"安装过视频订阅产品","c":"behavior","v":false},{"id":89,"n":"安装过国家医疗服务产品","c":"behavior","v":false},{"id":90,"n":"安装过政府公共服务产品","c":"behavior","v":false},{"id":91,"n":"安装过电商卖家端产品","c":"behavior","v":false},{"id":92,"n":"安装过外卖骑手端产品","c":"behavior","v":false},{"id":93,"n":"安装过快递配送端产品","c":"behavior","v":false},{"id":94,"n":"安装过网约车司机端产品","c":"behavior","v":false},{"id":95,"n":"安装过线下门店经营产品","c":"behavior","v":false},{"id":96,"n":"安装过母婴育儿产品","c":"behavior","v":false},{"id":97,"n":"安装过女性时尚电商产品","c":"behavior","v":false},{"id":98,"n":"安装过美妆电商产品","c":"behavior","v":false},{"id":99,"n":"安装过经期管理产品","c":"behavior","v":false},{"id":100,"n":"安装过办公软件产品","c":"behavior","v":false},{"id":101,"n":"安装过外卖餐饮产品","c":"behavior","v":false},{"id":102,"n":"安装过即时配送产品","c":"behavior","v":false},{"id":103,"n":"安装过航空酒旅产品","c":"behavior","v":false},{"id":104,"n":"安装过星座塔罗占卜产品","c":"behavior","v":false},{"id":105,"n":"安装过办公IM产品","c":"behavior","v":false},{"id":106,"n":"安装过招聘求职产品","c":"behavior","v":false},{"id":107,"n":"安装过足球兴趣产品","c":"behavior","v":false},{"id":108,"n":"安装过足球游戏产品","c":"behavior","v":false},{"id":109,"n":"安装过驾考学习产品","c":"behavior","v":false},{"id":110,"n":"安装过汽车服务工具产品","c":"behavior","v":false},{"id":111,"n":"安装过摩托车品牌官方产品","c":"behavior","v":false},{"id":112,"n":"安装过汽车品牌官方产品","c":"behavior","v":false},{"id":113,"n":"安装过汽车交易平台产品","c":"behavior","v":false},{"id":114,"n":"安装过健身训练产品","c":"behavior","v":false},{"id":115,"n":"安装过运动健康追踪应用","c":"behavior","v":false},{"id":116,"n":"安装过投资交易产品","c":"behavior","v":false},{"id":117,"n":"安装过加密货币产品","c":"behavior","v":false},{"id":118,"n":"安装过智能家居产品","c":"behavior","v":false},{"id":119,"n":"安装过硬件检测及性能测试产品","c":"behavior","v":false},{"id":120,"n":"安装过体育博彩产品","c":"behavior","v":false},{"id":121,"n":"安装过伊斯兰教产品","c":"behavior","v":false},{"id":122,"n":"安装过基督教产品","c":"behavior","v":false},{"id":123,"n":"安装过视频剪辑与短视频制作产品","c":"behavior","v":false},{"id":124,"n":"安装过照片编辑与美化产品","c":"behavior","v":false},{"id":125,"n":"安装过平面设计产品","c":"behavior","v":false},{"id":126,"n":"安装过音频编辑与音乐创作产品","c":"behavior","v":false},{"id":127,"n":"安装过 AI 视觉创作应用","c":"behavior","v":false},{"id":128,"n":"安装过第三方拍摄增强产品","c":"behavior","v":false},{"id":129,"n":"安装过培训课程产品","c":"behavior","v":false},{"id":130,"n":"安装过少儿教育产品","c":"behavior","v":false},{"id":131,"n":"安装过语言学习产品","c":"behavior","v":false},{"id":132,"n":"安装过AI聊天机器人产品","c":"behavior","v":false},{"id":133,"n":"安装过AI音乐生成产品","c":"behavior","v":false},{"id":134,"n":"安装过AI艺术生成产品","c":"behavior","v":false},{"id":135,"n":"安装过交友约会产品","c":"behavior","v":false},{"id":136,"n":"安装过陌生人随机聊天产品","c":"behavior","v":false},{"id":137,"n":"安装过语音房社交应用","c":"behavior","v":false},{"id":138,"n":"安装过平台创作者后台产品","c":"behavior","v":false},{"id":139,"n":"安装过大学考试学习产品","c":"behavior","v":false},{"id":140,"n":"安装过短视频平台产品","c":"behavior","v":false},{"id":141,"n":"安装过漫画阅读产品","c":"behavior","v":false},{"id":142,"n":"安装过网文小说产品","c":"behavior","v":false},{"id":143,"n":"安装过时尚潮流购物产品","c":"behavior","v":false},{"id":144,"n":"安装过K歌社交产品","c":"behavior","v":false},{"id":145,"n":"安装过地图导航产品","c":"behavior","v":false},{"id":146,"n":"安装过网约车乘客端产品","c":"behavior","v":false},{"id":147,"n":"安装过公共交通出行产品","c":"behavior","v":false},{"id":148,"n":"安装过卫星地图与街景产品","c":"behavior","v":false},{"id":149,"n":"安装过家庭位置共享产品","c":"behavior","v":false},{"id":150,"n":"安装过GPS定位工具产品","c":"behavior","v":false},{"id":151,"n":"安装过地理标记拍照产品","c":"behavior","v":false},{"id":152,"n":"安装过房产买卖租赁产品","c":"behavior","v":false},{"id":153,"n":"安装过新闻资讯产品","c":"behavior","v":false},{"id":154,"n":"安装过播客产品","c":"behavior","v":false},{"id":155,"n":"安装过网络电台产品","c":"behavior","v":false},{"id":156,"n":"安装过电子书阅读产品","c":"behavior","v":false},{"id":157,"n":"安装过综合电商购物产品","c":"behavior","v":false},{"id":158,"n":"安装过二手交易产品","c":"behavior","v":false},{"id":159,"n":"安装过传统银行移动端产品","c":"behavior","v":false},{"id":160,"n":"安装过证券投资产品","c":"behavior","v":false},{"id":161,"n":"安装过外汇差价合约交易产品","c":"behavior","v":false},{"id":162,"n":"安装过二元期权交易产品","c":"behavior","v":false},{"id":163,"n":"安装过加密货币交易所产品","c":"behavior","v":false},{"id":164,"n":"安装过加密钱包产品","c":"behavior","v":false},{"id":165,"n":"安装过保险类产品","c":"behavior","v":false},{"id":166,"n":"安装过商家收款产品","c":"behavior","v":false},{"id":167,"n":"安装过餐饮商家经营产品","c":"behavior","v":false},{"id":168,"n":"安装过进销存管理产品","c":"behavior","v":false},{"id":169,"n":"安装过商家记账产品","c":"behavior","v":false},{"id":170,"n":"安装过企业财务会计产品","c":"behavior","v":false},{"id":171,"n":"安装过影视流媒体产品","c":"behavior","v":false},{"id":172,"n":"安装过音乐流媒体产品","c":"behavior","v":false},{"id":173,"n":"安装过微短剧产品","c":"behavior","v":false},{"id":174,"n":"安装过社交直播产品","c":"behavior","v":false},{"id":175,"n":"安装过游戏直播产品","c":"behavior","v":false},{"id":176,"n":"安装过直播电视产品","c":"behavior","v":false},{"id":177,"n":"安装过体育流媒体产品","c":"behavior","v":false},{"id":178,"n":"安装过动漫流媒体产品","c":"behavior","v":false},{"id":179,"n":"安装过UGC视频产品","c":"behavior","v":false},{"id":180,"n":"安装过有声书产品","c":"behavior","v":false}];
|
||
var CATNAME={category:'用户分类',behavior:'用户行为',profile:'基础资料',device:'设备属性'};
|
||
var tb=document.getElementById('tb'), cnt=document.getElementById('cnt'), none=document.getElementById('none'), q=document.getElementById('q');
|
||
var cat='all';
|
||
|
||
function render(){
|
||
var kw=q.value.trim().toLowerCase();
|
||
var rows=TAGS.filter(function(t){
|
||
var okCat = cat==='all' || (cat==='other' ? (t.c==='profile'||t.c==='device') : t.c===cat);
|
||
if(!okCat) return false;
|
||
if(!kw) return true;
|
||
return t.n.toLowerCase().indexOf(kw)>-1 || String(t.id).indexOf(kw)>-1;
|
||
});
|
||
tb.innerHTML = rows.map(function(t){
|
||
return '<tr><td class="num"><span class="tid">'+t.id+'</span></td><td>'+t.n+'</td><td>'+CATNAME[t.c]+'</td><td>'+(t.v?'是':'否')+'</td></tr>';
|
||
}).join('');
|
||
none.hidden = rows.length>0;
|
||
cnt.textContent = '显示 '+rows.length+' / '+TAGS.length+' 个标签';
|
||
}
|
||
q.addEventListener('input',render);
|
||
document.querySelectorAll('.segs button').forEach(function(b){
|
||
b.addEventListener('click',function(){
|
||
cat=b.dataset.cat;
|
||
document.querySelectorAll('.segs button').forEach(function(x){x.setAttribute('aria-pressed', x===b?'true':'false')});
|
||
render();
|
||
});
|
||
});
|
||
render();
|
||
})();
|
||
</script>
|
||
</body>
|
||
</html>
|