# Unif Umeng
> Unif Umeng 文档索引。每个链接是该页的纯 Markdown 版(供 LLM 抓取);需要完整全文一次性喂入时用 /llms-full.txt。
## 概览
- [介绍](/md/intro.md) — @unif/react-native-umeng 是友盟 RN 新架构桥,做两件事:U-Share(首版仅微信会话 + 钉钉分享)与 U-App 移动统计;命令式 Share.openSheet() 拉起分享面板,PIPL 两段式 preInit→init 合规初始化。
- [AI Skill](/md/skills.md) — unif-umeng 是一个 Agent Skill,教 AI 编码助手正确调用 @unif/react-native-umeng 的 API、避免常见幻觉。
- [测试(Mock)](/md/testing.md) — 在 Jest 中用官方 mock 替换 @unif/react-native-umeng:require('@unif/react-native-umeng/mock'),share* 默认 resolve success,Analytics.* 是同步 jest.fn,ShareSheetHost 渲染 null,类型 / 常量 / UmengError 保留真实实现;用 shareCancel / shareFailed + mockResolvedValueOnce 覆盖单次。
- [常见问题](/md/troubleshooting.md) — @unif/react-native-umeng 排障决策树:分享无回调(取消/失败是 reject 非 resolve)、未挂 ShareSheetHost、init 顺序与无参、模拟器不能真分享需真机,以及 iOS / Android 原生回调注册与完整错误码表。
## api
- [Analytics](/md/api/analytics.md) — Analytics API 全量参考:onEvent(eventId, params?) / signIn(userId, provider?) / signOut() —— U-App 移动统计。三个方法都是同步 void、不返回 Promise、不要 await;onEvent 的 number 值会自动 stringify(友盟 iOS attributes 强制 NSString)。
- [Common](/md/api/common.md) — Common API 全量参考:preInit(config) / init() / isInited() — 友盟 SDK 两段式初始化(PIPL 合规)。preInit 接收全部 config(appkey 必填、channel / wechatAppId / wechatAppSecret / wechatUniversalLink / dingtalkAppId 可选),init() 无参,未先 preInit 直接 init 会 reject E_INVALID_OPTIONS。
- [Platform & ShareSheetHost](/md/api/platform-sharesheethost.md) — Platform & ShareSheetHost 参考:Platform 是分享目标枚举(wechat_session / dingtalk),不是 react-native 的 Platform、没有 .OS;附 PLATFORM_DISPLAY_NAMES / PLATFORM_DEFAULT_SUBTITLES / PLATFORM_BRAND_COLORS / SUPPORTED_PLATFORMS 常量。 是分享面板宿主组件、无 props、须挂在 App 根(GestureHandlerRootView + ThemeProvider 内),openSheet 依赖它。
- [Share](/md/api/share.md) — Share API 全量参考:openSheet(payload, options?) 命令式面板(推荐,需挂 ShareSheetHost)+ 直拉 shareText/shareImage/shareLink(options) + isInstalled / listPlatforms。payload type 为 'text'|'image'|'link';取消与失败一律 reject(E_USER_CANCEL / E_SHARE_FAILED / E_PLATFORM_NOT_INSTALLED),resolve 到手的 ShareResult.code 恒为 'success'。
## getting-started
- [安装](/md/getting-started/installation.md) — 安装 @unif/react-native-umeng 及全部 peerDependencies(@unif/react-native-design、react-native-gesture-handler、react-native-svg),运行 pod install,并指向 iOS / Android 原生回调配置。
- [快速上手](/md/getting-started/quick-start.md) — 5 分钟跑通 @unif/react-native-umeng:App 根挂 ,启动时 Common.preInit(config),用户同意后 Common.init()(无参),再 await Share.openSheet(payload) 拉起分享面板。
## guides
- [统计埋点](/md/guides/analytics.md) — 用 @unif/react-native-umeng 的 U-App 统计:Analytics.onEvent / signIn / signOut 都是同步 void(不要 await),onEvent 的 number 参数自动字符串化,数据上报需先 Common.init()。
- [隐私合规(PIPL)](/md/guides/privacy-pipl.md) — @unif/react-native-umeng 的 PIPL 两段式初始化:Common.preInit(config) 启动时调、只存配置注册平台不上报;用户同意《隐私协议》后再调无参 Common.init() 开始采集。含 init 带参 / init 早于同意两个易错点。
- [分享](/md/guides/sharing.md) — 用 @unif/react-native-umeng 分享到微信会话 / 钉钉:命令式 Share.openSheet(payload) 拉面板或直拉 shareText/shareImage/shareLink,payload type 为 'text'|'image'|'link';取消与失败 reject(E_USER_CANCEL / E_SHARE_FAILED),resolve 的 r.code 恒为 success。
## native-setup
- [Android 原生配置](/md/native-setup/android.md) — Android 原生接入:AndroidManifest 注册两个回调 Activity —— WXEntryActivity(超类 com.umeng.socialize.weixin.view.WXCallbackActivity)与 DDShareActivity(继承 Activity + IDDAPIEventHandler),必须放在宿主包名下(SDK 反射查 getPackageName() + .wxapi.WXEntryActivity / .ddshare.DDShareActivity)。钉钉 appId 在 onCreate 写死、要与 preInit({ dingtalkAppId }) 一致(推荐 BuildConfig.DINGTALK_APPID 单一数据源)。权限 / queries / consumer proguard 由 library Manifest + consumer-rules.pro 自动合并,宿主不用写。钉钉 / 微信 SDK 是 library 的 implementation 依赖(不传递编译期),宿主 build.gradle 需显式声明。
- [iOS 原生配置](/md/native-setup/ios.md) — iOS 原生接入:Info.plist 配 LSApplicationQueriesSchemes(weixin / dingtalk 等 scheme 白名单)+ CFBundleURLTypes 回调 scheme(微信 wx+appid、钉钉 dingoa+appid);AppDelegate 把 open url / continue userActivity 转发给桥导出的 UmengBootstrap,方法名是 handleOpen(_:options:)(Swift omit-needless-words)不是 handleOpenURL;微信 1.8.6+ 强制 Universal Link。appkey 等配置走 JS preInit,不写 plist。