@leonxin/meetgames 0.1.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +120 -0
- package/bundled/android/sample.txt +1 -0
- package/dist/android/adapter.d.ts +3 -0
- package/dist/android/adapter.d.ts.map +1 -0
- package/dist/android/adapter.js +8 -0
- package/dist/android/adapter.js.map +1 -0
- package/dist/android/assembleIntegrationJson.d.ts +8 -0
- package/dist/android/assembleIntegrationJson.d.ts.map +1 -0
- package/dist/android/assembleIntegrationJson.js +31 -0
- package/dist/android/assembleIntegrationJson.js.map +1 -0
- package/dist/android/detect.d.ts +11 -0
- package/dist/android/detect.d.ts.map +1 -0
- package/dist/android/detect.js +87 -0
- package/dist/android/detect.js.map +1 -0
- package/dist/android/downloadGoogleServicesJson.d.ts +20 -0
- package/dist/android/downloadGoogleServicesJson.d.ts.map +1 -0
- package/dist/android/downloadGoogleServicesJson.js +43 -0
- package/dist/android/downloadGoogleServicesJson.js.map +1 -0
- package/dist/android/fetchRemoteConfig.d.ts +5 -0
- package/dist/android/fetchRemoteConfig.d.ts.map +1 -0
- package/dist/android/fetchRemoteConfig.js +24 -0
- package/dist/android/fetchRemoteConfig.js.map +1 -0
- package/dist/android/gradle.d.ts +30 -0
- package/dist/android/gradle.d.ts.map +1 -0
- package/dist/android/gradle.js +87 -0
- package/dist/android/gradle.js.map +1 -0
- package/dist/android/manifest.d.ts +10 -0
- package/dist/android/manifest.d.ts.map +1 -0
- package/dist/android/manifest.js +45 -0
- package/dist/android/manifest.js.map +1 -0
- package/dist/android/meetSdkRemoteGradle.d.ts +86 -0
- package/dist/android/meetSdkRemoteGradle.d.ts.map +1 -0
- package/dist/android/meetSdkRemoteGradle.js +479 -0
- package/dist/android/meetSdkRemoteGradle.js.map +1 -0
- package/dist/android/snapchatManifestPlaceholders.d.ts +15 -0
- package/dist/android/snapchatManifestPlaceholders.d.ts.map +1 -0
- package/dist/android/snapchatManifestPlaceholders.js +53 -0
- package/dist/android/snapchatManifestPlaceholders.js.map +1 -0
- package/dist/cli.d.ts +2 -0
- package/dist/cli.d.ts.map +1 -0
- package/dist/cli.js +291 -0
- package/dist/cli.js.map +1 -0
- package/dist/config/fetchConfigWrite.d.ts +10 -0
- package/dist/config/fetchConfigWrite.d.ts.map +1 -0
- package/dist/config/fetchConfigWrite.js +21 -0
- package/dist/config/fetchConfigWrite.js.map +1 -0
- package/dist/config/loadAndroidIntegration.d.ts +4 -0
- package/dist/config/loadAndroidIntegration.d.ts.map +1 -0
- package/dist/config/loadAndroidIntegration.js +34 -0
- package/dist/config/loadAndroidIntegration.js.map +1 -0
- package/dist/config/loadManifest.d.ts +3 -0
- package/dist/config/loadManifest.d.ts.map +1 -0
- package/dist/config/loadManifest.js +33 -0
- package/dist/config/loadManifest.js.map +1 -0
- package/dist/config/meetSdkDefaultConfig.d.ts +5 -0
- package/dist/config/meetSdkDefaultConfig.d.ts.map +1 -0
- package/dist/config/meetSdkDefaultConfig.js +15 -0
- package/dist/config/meetSdkDefaultConfig.js.map +1 -0
- package/dist/config/meetSdkRemoteConfig.d.ts +240 -0
- package/dist/config/meetSdkRemoteConfig.d.ts.map +1 -0
- package/dist/config/meetSdkRemoteConfig.js +892 -0
- package/dist/config/meetSdkRemoteConfig.js.map +1 -0
- package/dist/config/topsdkFeatureModules.d.ts +19 -0
- package/dist/config/topsdkFeatureModules.d.ts.map +1 -0
- package/dist/config/topsdkFeatureModules.js +47 -0
- package/dist/config/topsdkFeatureModules.js.map +1 -0
- package/dist/contracts/types.d.ts +95 -0
- package/dist/contracts/types.d.ts.map +1 -0
- package/dist/contracts/types.js +2 -0
- package/dist/contracts/types.js.map +1 -0
- package/dist/core/engine.d.ts +3 -0
- package/dist/core/engine.d.ts.map +1 -0
- package/dist/core/engine.js +18 -0
- package/dist/core/engine.js.map +1 -0
- package/dist/core/patch.d.ts +2 -0
- package/dist/core/patch.d.ts.map +1 -0
- package/dist/core/patch.js +61 -0
- package/dist/core/patch.js.map +1 -0
- package/dist/core/pipeline.d.ts +12 -0
- package/dist/core/pipeline.d.ts.map +1 -0
- package/dist/core/pipeline.js +102 -0
- package/dist/core/pipeline.js.map +1 -0
- package/dist/core/previewPatches.d.ts +8 -0
- package/dist/core/previewPatches.d.ts.map +1 -0
- package/dist/core/previewPatches.js +25 -0
- package/dist/core/previewPatches.js.map +1 -0
- package/dist/core/reporter.d.ts +3 -0
- package/dist/core/reporter.d.ts.map +1 -0
- package/dist/core/reporter.js +24 -0
- package/dist/core/reporter.js.map +1 -0
- package/dist/core/resolveFetchChannelType.d.ts +27 -0
- package/dist/core/resolveFetchChannelType.d.ts.map +1 -0
- package/dist/core/resolveFetchChannelType.js +54 -0
- package/dist/core/resolveFetchChannelType.js.map +1 -0
- package/dist/core/workspace.d.ts +5 -0
- package/dist/core/workspace.d.ts.map +1 -0
- package/dist/core/workspace.js +24 -0
- package/dist/core/workspace.js.map +1 -0
- package/dist/entry.d.ts +3 -0
- package/dist/entry.d.ts.map +1 -0
- package/dist/entry.js +7 -0
- package/dist/entry.js.map +1 -0
- package/dist/index.d.ts +23 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +22 -0
- package/dist/index.js.map +1 -0
- package/dist/ios/channelConfig.d.ts +7 -0
- package/dist/ios/channelConfig.d.ts.map +1 -0
- package/dist/ios/channelConfig.js +51 -0
- package/dist/ios/channelConfig.js.map +1 -0
- package/dist/ios/codeUtils.d.ts +15 -0
- package/dist/ios/codeUtils.d.ts.map +1 -0
- package/dist/ios/codeUtils.js +166 -0
- package/dist/ios/codeUtils.js.map +1 -0
- package/dist/ios/detect.d.ts +3 -0
- package/dist/ios/detect.d.ts.map +1 -0
- package/dist/ios/detect.js +65 -0
- package/dist/ios/detect.js.map +1 -0
- package/dist/ios/fileManager.d.ts +12 -0
- package/dist/ios/fileManager.d.ts.map +1 -0
- package/dist/ios/fileManager.js +46 -0
- package/dist/ios/fileManager.js.map +1 -0
- package/dist/ios/infoPlist.d.ts +11 -0
- package/dist/ios/infoPlist.d.ts.map +1 -0
- package/dist/ios/infoPlist.js +48 -0
- package/dist/ios/infoPlist.js.map +1 -0
- package/dist/ios/integrate.d.ts +12 -0
- package/dist/ios/integrate.d.ts.map +1 -0
- package/dist/ios/integrate.js +263 -0
- package/dist/ios/integrate.js.map +1 -0
- package/dist/ios/pbxprojEditor.d.ts +20 -0
- package/dist/ios/pbxprojEditor.d.ts.map +1 -0
- package/dist/ios/pbxprojEditor.js +198 -0
- package/dist/ios/pbxprojEditor.js.map +1 -0
- package/dist/ios/pluginConfig.d.ts +6 -0
- package/dist/ios/pluginConfig.d.ts.map +1 -0
- package/dist/ios/pluginConfig.js +64 -0
- package/dist/ios/pluginConfig.js.map +1 -0
- package/dist/ios/reserved.d.ts +4 -0
- package/dist/ios/reserved.d.ts.map +1 -0
- package/dist/ios/reserved.js +6 -0
- package/dist/ios/reserved.js.map +1 -0
- package/dist/ios/sdkBundle.d.ts +7 -0
- package/dist/ios/sdkBundle.d.ts.map +1 -0
- package/dist/ios/sdkBundle.js +30 -0
- package/dist/ios/sdkBundle.js.map +1 -0
- package/dist/ios/template.d.ts +3 -0
- package/dist/ios/template.d.ts.map +1 -0
- package/dist/ios/template.js +24 -0
- package/dist/ios/template.js.map +1 -0
- package/dist/ios/types.d.ts +43 -0
- package/dist/ios/types.d.ts.map +1 -0
- package/dist/ios/types.js +11 -0
- package/dist/ios/types.js.map +1 -0
- package/dist/mcp/server.d.ts +4 -0
- package/dist/mcp/server.d.ts.map +1 -0
- package/dist/mcp/server.js +139 -0
- package/dist/mcp/server.js.map +1 -0
- package/dist/mcp/service.d.ts +49 -0
- package/dist/mcp/service.d.ts.map +1 -0
- package/dist/mcp/service.js +113 -0
- package/dist/mcp/service.js.map +1 -0
- package/dist/mcp-entry.d.ts +3 -0
- package/dist/mcp-entry.d.ts.map +1 -0
- package/dist/mcp-entry.js +7 -0
- package/dist/mcp-entry.js.map +1 -0
- package/dist/ops/fileStore.d.ts +17 -0
- package/dist/ops/fileStore.d.ts.map +1 -0
- package/dist/ops/fileStore.js +55 -0
- package/dist/ops/fileStore.js.map +1 -0
- package/dist/ops/handlers.d.ts +10 -0
- package/dist/ops/handlers.d.ts.map +1 -0
- package/dist/ops/handlers.js +268 -0
- package/dist/ops/handlers.js.map +1 -0
- package/dist/platforms/android/adapter.d.ts +3 -0
- package/dist/platforms/android/adapter.d.ts.map +1 -0
- package/dist/platforms/android/adapter.js +8 -0
- package/dist/platforms/android/adapter.js.map +1 -0
- package/dist/platforms/android/detect.d.ts +3 -0
- package/dist/platforms/android/detect.d.ts.map +1 -0
- package/dist/platforms/android/detect.js +79 -0
- package/dist/platforms/android/detect.js.map +1 -0
- package/dist/platforms/android/gradle.d.ts +30 -0
- package/dist/platforms/android/gradle.d.ts.map +1 -0
- package/dist/platforms/android/gradle.js +83 -0
- package/dist/platforms/android/gradle.js.map +1 -0
- package/dist/platforms/android/manifest.d.ts +7 -0
- package/dist/platforms/android/manifest.d.ts.map +1 -0
- package/dist/platforms/android/manifest.js +24 -0
- package/dist/platforms/android/manifest.js.map +1 -0
- package/dist/platforms/ios/adapter.d.ts +3 -0
- package/dist/platforms/ios/adapter.d.ts.map +1 -0
- package/dist/platforms/ios/adapter.js +8 -0
- package/dist/platforms/ios/adapter.js.map +1 -0
- package/dist/platforms/ios/detect.d.ts +8 -0
- package/dist/platforms/ios/detect.d.ts.map +1 -0
- package/dist/platforms/ios/detect.js +67 -0
- package/dist/platforms/ios/detect.js.map +1 -0
- package/dist/platforms/ios/plist.d.ts +11 -0
- package/dist/platforms/ios/plist.d.ts.map +1 -0
- package/dist/platforms/ios/plist.js +24 -0
- package/dist/platforms/ios/plist.js.map +1 -0
- package/dist/platforms/ios/podfile.d.ts +7 -0
- package/dist/platforms/ios/podfile.d.ts.map +1 -0
- package/dist/platforms/ios/podfile.js +15 -0
- package/dist/platforms/ios/podfile.js.map +1 -0
- package/dist/remote/fetchJson.d.ts +5 -0
- package/dist/remote/fetchJson.d.ts.map +1 -0
- package/dist/remote/fetchJson.js +24 -0
- package/dist/remote/fetchJson.js.map +1 -0
- package/dist/remote/topsdkDownloadSdkConfig.d.ts +23 -0
- package/dist/remote/topsdkDownloadSdkConfig.d.ts.map +1 -0
- package/dist/remote/topsdkDownloadSdkConfig.js +56 -0
- package/dist/remote/topsdkDownloadSdkConfig.js.map +1 -0
- package/dist/remote/topsdkGetSdkConfig.d.ts +46 -0
- package/dist/remote/topsdkGetSdkConfig.d.ts.map +1 -0
- package/dist/remote/topsdkGetSdkConfig.js +95 -0
- package/dist/remote/topsdkGetSdkConfig.js.map +1 -0
- package/dist/remote/topsdkSign.d.ts +6 -0
- package/dist/remote/topsdkSign.d.ts.map +1 -0
- package/dist/remote/topsdkSign.js +10 -0
- package/dist/remote/topsdkSign.js.map +1 -0
- package/docs/ANDROID.md +133 -0
- package/docs/API.md +47 -0
- package/docs/CURSOR-MCP-SETUP.md +72 -0
- package/docs/MCP-SKILL.md +63 -0
- package/docs/README.md +12 -0
- package/docs/api/downloadSDKConfig.md +96 -0
- package/docs/api/getChannelConfig-meetgames.md +106 -0
- package/docs/api/getSDKConfig.md +38 -0
- package/docs//346/212/200/346/234/257/346/226/271/346/241/210/350/260/203/347/240/224.md +329 -0
- package/docs//351/234/200/346/261/202/346/226/207/346/241/243.md +320 -0
- package/fixtures/api-samples/getChannelConfig-meetgames.sample.json +123 -0
- package/fixtures/meetsdk-remote-config.download-shape.json +20 -0
- package/fixtures/meetsdk-remote-config.mock.json +69 -0
- package/fixtures/recipes/android-default.fixture.yaml +15 -0
- package/fixtures/recipes/android-integration.fixture.json +29 -0
- package/fixtures/topsdk-config-reference.json +39 -0
- package/meetsdk-android.json +151 -0
- package/package.json +61 -0
- package/recipes/android-default.yaml +15 -0
- package/recipes/integrate-default.yaml +16 -0
- package/recipes/ios-default.yaml +5 -0
- package/schema/android-integration.schema.json +65 -0
- package/schema/manifest.schema.json +45 -0
- package/schema/meetsdk-remote-config.schema.json +45 -0
package/docs/ANDROID.md
ADDED
|
@@ -0,0 +1,133 @@
|
|
|
1
|
+
# Android 集成工具说明
|
|
2
|
+
|
|
3
|
+
本仓库(`meet-sdk-tool`)内的 CLI 与库代码**全部为 TypeScript**;发布时由 `tsc` 编译到 `dist/*.js`,npm `bin` 指向编译产物。
|
|
4
|
+
|
|
5
|
+
## 范围
|
|
6
|
+
|
|
7
|
+
- **Android**:远程拉取配置、组装 JSON、按步骤修改 Gradle / `AndroidManifest.xml` / 拷贝 `bundled/` 资源等(步骤可扩展)。
|
|
8
|
+
- **iOS**:暂不实现;`src/ios/reserved.ts` 中保留占位类型与说明,便于后续接入。
|
|
9
|
+
|
|
10
|
+
## 远程接口文档
|
|
11
|
+
|
|
12
|
+
meet-sdk-tool 用到的及对照用的 HTTP 接口(含 `downloadSDKConfig`、`getSDKConfig`、`getChannelConfig` 样例)见 **[`docs/API.md`](./API.md)**。
|
|
13
|
+
|
|
14
|
+
## 远程配置(TOPSDK,与平台无关)
|
|
15
|
+
|
|
16
|
+
与 **Android / iOS 共用同一套 HTTP 接口**,实现对齐 `topsdk-tool-ios`:
|
|
17
|
+
|
|
18
|
+
- 路径:`GET {baseUrl}console/openSDK/getSDKConfig`
|
|
19
|
+
- 查询参数:`appId`、`authType`(可重复多次)、`channelType`、`sign`、`timestamp`(毫秒)
|
|
20
|
+
- 签名:`sign = base64( md5_binary( appId + appSecret + timestamp ) )`,与 `topsdk-tool-ios` 仓库中 `TOPSDKUtils/ChannelConfigManager.py` 的 `md5_base64_byte` 一致。
|
|
21
|
+
- 默认 `baseUrl` 由 **`--env`** 决定(**不传则 `prod` 正式服**):`prod` → `https://api-sdk-gameplus.meetsocial.com/`;`pre` → `https://pre-api-sdk-gameplus.meetsocial.com/`;`test` → `https://test-api-sdk-gameplus.meetsocial.com:1157/`(开发调试请显式 `--env test`)。**不再提供 `--base-url`**。
|
|
22
|
+
- 请求前会从 `authType` 列表中移除 `GUEST`、`UI`、`IAPPAY`(与 `ChannelConfigManager.getSdkConfig` 行为一致)。Android 侧若使用 `google` 等渠道,通过 `--channel-type` 传入即可(与 iOS 传 `apple` 一样走同一 URL)。
|
|
23
|
+
- **服务端与字段**:`gp-sdk` 的 `openSDK/getSDKConfig`(`SDKDownloadController`)返回体通常 **只有** `data.channelAuthConfig`(`VOSDKConfig`),与 `topsdk-tool` / `topsdk-tool-ios` 解析的 `channelAuthConfig` 一致。`sdk-home` 提供的是 **SDK 包下载**(`/home/sdk-download/...`),不负责该配置接口。控制台 VO 里 Facebook 的 **client token 多在 `secret`**;AppsFlyer 的 **devKey 在 `secret`**(`clientId` 可能为其它业务字段)。SDK 版本、仓库、构件依赖、Firebase Gradle plugin 等固定集成配置由工具内置的 `meetsdk-android.json` 提供。
|
|
24
|
+
|
|
25
|
+
对应 TypeScript 实现:`[src/remote/topsdkGetSdkConfig.ts](../src/remote/topsdkGetSdkConfig.ts)`、`[src/remote/topsdkSign.ts](../src/remote/topsdkSign.ts)`;映射为 mock 形输出:`[src/config/meetSdkRemoteConfig.ts](../src/config/meetSdkRemoteConfig.ts)`。
|
|
26
|
+
|
|
27
|
+
### `fetch-config` 与缓存文件 `meetsdk-remote-config.json`
|
|
28
|
+
|
|
29
|
+
拉取结果**始终**写入宿主工程根目录下的 **`meetsdk-remote-config.json`**(即 `<project-root>/meetsdk-remote-config.json`),作为本地缓存,**不提供自定义输出路径**。该文件只放每个游戏不同的后台参数:`packageName`、根级 `channel` / `devicePlatform`、`topsdk.appId/appSecret` 以及各插件的业务参数(例如登录 clientId、AppsFlyer devKey、Firebase `firebase_file_url`、Adjust appId)。固定 SDK 集成配置放在工具内置的 [`meetsdk-android.json`](../meetsdk-android.json) 中,包括 `topsdk.version/groupId/repositories`、插件仓库、Firebase `classpath/applyplugin` 和各插件 `dependencies`。标准集成步骤放在工具内置 [`recipes/android-default.yaml`](../recipes/android-default.yaml) 中,测试 fixture 放在 [`fixtures/recipes/`](../fixtures/recipes/) 中,游戏工程目录不需要放 recipe/fixture 文件。远程配置请用 `fetch-config` 或 `setup` 从后台拉取;`fixtures/meetsdk-remote-config.mock.json` 仅用于本仓库 Vitest,勿用于真实游戏工程。仓库内自带可跑的 Android 宿主样例见 `[test-projects/android-sample/](../test-projects/android-sample/)`(仅包含宿主工程文件与 `meetsdk-remote-config.json`);另可在同级目录下并列更多工程(如 `[test-projects/android-sample-b/](../test-projects/android-sample-b/)),用不同 `--project-root` 分别验证;说明见 `[test-projects/README.md](../test-projects/README.md)`。Vitest 管线测试默认只使用 `android-sample/`。
|
|
30
|
+
|
|
31
|
+
**与 `topsdk-tool-ios` 一致**:iOS 工具在 Python 里固定调用 `getChannelConfigUrl() + 'console/openSDK/getSDKConfig'`,用 `appId` / `appSecret` / `channelType` / `authType[]` 等拼查询串并算 `sign`,**没有**「用户传入任意完整 URL」的模式。本 CLI 的 `fetch-config` 同样**只走该 TOPSDK 接口**,不提供 `--url`。
|
|
32
|
+
|
|
33
|
+
**含义**:CLI 调用 `**console/openSDK/downloadSDKConfig`**(无需 sign):用 `appId`、`channelType` 拉取与 gp-sdk 一致的 `meetsdk-remote-config.json` 全文并**原样**写入工程根目录(不做 JSON 再序列化,不合并 `meetsdk-android.json`;后者仅在 `integrate` 时在内存中合并)。
|
|
34
|
+
|
|
35
|
+
```bash
|
|
36
|
+
meetgames fetch-config \
|
|
37
|
+
--project-root /path/to/android-project \
|
|
38
|
+
--app-id 791251136341225472 \
|
|
39
|
+
--channel-type GOOGLE \
|
|
40
|
+
--env test
|
|
41
|
+
```
|
|
42
|
+
|
|
43
|
+
`--app-id` 与 `--channel-type` 为调用接口所必需(也可来自已有 `meetsdk-remote-config.json` 或 `TOPSDK_APP_ID` / `TOPSDK_CHANNEL_TYPE`)。`packageName`、`topsdk.appSecret` 等由接口返回的 JSON 写入,无需 CLI 传入。gp-sdk 按 `(appId, channelType)` 查 channel。`--auth-type` / `TOPSDK_AUTH_TYPES` 已忽略(仅兼容旧脚本)。
|
|
44
|
+
|
|
45
|
+
### CLI 参数与子命令对应关系
|
|
46
|
+
|
|
47
|
+
解析器是**全局**的:除未知 token 会报错外,部分参数在某一子命令下**不会生效**(仅为与其它子命令共用同一套 flag 名)。
|
|
48
|
+
|
|
49
|
+
|
|
50
|
+
| 参数 | `fetch-config` | `integrate` / `setup` | `doctor` |
|
|
51
|
+
| -------------------------------- | -------------- | ------------------------------------------ | ----------------- |
|
|
52
|
+
| `--project-root` | 是(缓存目录) | 是 | 是 |
|
|
53
|
+
| `--app-id` | 是(必填*) | 否 | 否 |
|
|
54
|
+
| `--channel-type` | 是(必填*) | 否 | 否 |
|
|
55
|
+
| `--auth-type`(可重复) | 忽略(兼容) | 否 | 否 |
|
|
56
|
+
| `--env`(`prod` / `pre` / `test`,默认 `prod`) | 是 | 否 | 否 |
|
|
57
|
+
| `--verbose` | 是 | 是 | 是 |
|
|
58
|
+
| `--dry-run` | 忽略 | 是(仅预览、不写盘) | 否 |
|
|
59
|
+
| `--report-file` | 忽略 | 是 | 否 |
|
|
60
|
+
| `--patch-file` | 忽略 | 是 | 否 |
|
|
61
|
+
| `--help` / `-h` | 是 | 是 | 是 |
|
|
62
|
+
|
|
63
|
+
|
|
64
|
+
因此,在 `**fetch-config`** 上除本地 `meetsdk-remote-config.json` 外,**实际参与拉取**的还有:`--env`、`--verbose`,以及 `--app-id`、`--channel-type`(或环境变量 / 已有缓存文件)。`--dry-run`、`--report-file`、`--patch-file` 可被解析但不会改变 `fetch-config` 行为。
|
|
65
|
+
|
|
66
|
+
## 其它命令
|
|
67
|
+
|
|
68
|
+
1. `**integrate`** / `**setup**`:固定读取工具内置 `recipes/integrate-default.yaml`,对 `--project-root` 下的工程执行标准集成步骤(`setup` 会先 `fetch-config`)。
|
|
69
|
+
2. `**doctor**`:检测工程类型(Android / iOS)与路径,不写入配置。
|
|
70
|
+
|
|
71
|
+
`**integrate` 默认写磁盘**;若流水线或本地只想生成 diff、不落盘,请显式传入 `**--dry-run`**(可配合 `--patch-file` 输出 patch 文件)。Vitest 在 `tests/pipeline.preview.patch.test.ts` 中把内置 recipe 与 schema fixture 的 dry-run diff **合并写入唯一文件** `**test-projects/_preview/pipeline.patch`**(`npm test` 后打开即可核对)。
|
|
72
|
+
|
|
73
|
+
## Gradle 编辑方式(Groovy only)
|
|
74
|
+
|
|
75
|
+
| 项 | 说明 |
|
|
76
|
+
|----|------|
|
|
77
|
+
| **现阶段** | **正则 + 括号匹配**定位 `android` / `defaultConfig` / `dependencies` 等块;**行级正则**识别 `resValue`、`implementation`;**`// >>> TOPSDK … START/END`** 标记块做幂等写入(实现:`src/android/gradle.ts`、`src/android/meetSdkRemoteGradle.ts`) |
|
|
78
|
+
| **将来** | 改用 **Groovy AST** 做块定位与语句级改写 |
|
|
79
|
+
| **不支持** | **`build.gradle.kts`(Kotlin DSL)** — 仅支持 Groovy DSL 的 `build.gradle` |
|
|
80
|
+
|
|
81
|
+
详见 [技术方案调研.md §6](./技术方案调研.md#6-gradle-编辑技术路线正则--groovy-ast)。
|
|
82
|
+
|
|
83
|
+
## `gradle.applyMeetSdkRemoteConfig`
|
|
84
|
+
|
|
85
|
+
与 **sdk-integration-agent**(`topsdk-agent`)中 `gradleEditor.js` 一致:读取工程根下的 `**meetsdk-remote-config.json`**(或由步骤参数 `**configFile**` 指定相对路径),再与工具内置 `**meetsdk-android.json**` 合并;只对远程配置中已出现的插件补齐 SDK 固定配置,校验后:
|
|
86
|
+
|
|
87
|
+
- 在**根目录 `build.gradle`** 的 `allprojects { repositories { … } }` 内写入 `**// >>> TOPSDK REPO AUTO START/END**` 托管块,从内置 `meetsdk-android.json` 汇总已启用插件与 TopSdk 仓库声明生成 `google()` / `mavenCentral()` / `maven { url '…' }`;默认顺序为 Firebase、AppsFlyer、TopSdk。
|
|
88
|
+
- 若开启 `sdkModules.analytics.firebase`,在**根目录 `build.gradle`** 的 `buildscript { repositories { … } dependencies { … } }` 内写入 Firebase 所需仓库与 `classpath`(默认示例为 `com.google.gms:google-services:4.4.4`)。
|
|
89
|
+
- 在 **application 模块 `build.gradle`** 的 `defaultConfig { … }` 内把 `applicationId` 更新为远程配置里的 `packageName`,并写入 `**resValue**`(`top_channel_id`、`top_app_id`、Facebook / Google / AppsFlyer 等),在文件顶部写入 Firebase 的 `apply plugin`(默认示例为 `com.google.gms.google-services`),并在 `**dependencies { … }**` 内写入 `**def topsdk_version` / `def groupId**`、`implementation "$groupId:ui:$topsdk_version"` 以及内置 `meetsdk-android.json` 中对应插件的 `dependencies` 配置。
|
|
90
|
+
|
|
91
|
+
与 `**gradle.insertRepositories**`(`MEET_INTEGRATE REPOS` 标记块)可并存于同一 `repositories` 闭包内;当前 `**test-projects/android-sample**` 已仅用本 op 从 `meetsdk-remote-config.json` 写入仓库与依赖。
|
|
92
|
+
|
|
93
|
+
### `sdkModules`、凭证与 Gradle 依赖
|
|
94
|
+
|
|
95
|
+
- **不再**使用顶层 `facebook` / `google` / `appsflyer`,也不使用扁平 `features` / `featuresByCategory`;解析时若仍存在这些顶层键会拒绝(`tryParseAsMeetSdkRemoteConfig` 返回 `null`)。
|
|
96
|
+
- **所有插件**:integrate 仅当 `sdkModules` 对应 scope 下**写了子键**时接入(如 `kakao`、`appsflyer`、`facebookdata`);有键则 value 为 `{}` 或参数对象。无配置则不写该键。远程配置对象只放业务参数,仓库、`classpath`、`applyplugin`、`dependencies` 从内置 `meetsdk-android.json` 按插件 key 补齐。
|
|
97
|
+
- **`login.facebook` / `login.google` / `analytics.appsflyer` 等带参数插件**:对象内只包含插件业务参数;直接写 `true` 会被拒绝,避免缺参数误开启。
|
|
98
|
+
- **`login.guest` / `login.email` / `payment.googleIap` / `analytics.facebook` 等无参数插件**:使用空对象 `{}` 表示开启;其中 **`analytics.facebook`** 只控制埋点构件 `facebook-data`,与登录 Facebook 无关。
|
|
99
|
+
|
|
100
|
+
示例(开启 Facebook / Google 登录与 AppsFlyer 时,参数写在对应子键下):
|
|
101
|
+
|
|
102
|
+
```json
|
|
103
|
+
"sdkModules": {
|
|
104
|
+
"login": {
|
|
105
|
+
"guest": {},
|
|
106
|
+
"email": {},
|
|
107
|
+
"facebook": {
|
|
108
|
+
"facebookAppId": "…",
|
|
109
|
+
"fbLoginProtocolScheme": "fb…",
|
|
110
|
+
"facebookClientToken": "…"
|
|
111
|
+
},
|
|
112
|
+
"google": { "googleClientId": "….apps.googleusercontent.com" }
|
|
113
|
+
},
|
|
114
|
+
"payment": {
|
|
115
|
+
"googleIap": {}
|
|
116
|
+
},
|
|
117
|
+
"analytics": {
|
|
118
|
+
"appsflyer": {
|
|
119
|
+
"enableDebugLog": false,
|
|
120
|
+
"devKey": "…"
|
|
121
|
+
}
|
|
122
|
+
}
|
|
123
|
+
}
|
|
124
|
+
```
|
|
125
|
+
|
|
126
|
+
- **`login.facebook`**(为对象时)→ Gradle 写入 Facebook 相关 `resValue`,并追加 TOPSDK 构件 **`facebook`**(见 [`topsdkFeatureModules.ts`](../src/config/topsdkFeatureModules.ts))。
|
|
127
|
+
- **`analytics.facebook`**(为对象时)→ 构件 **`facebook-data`**(Maven 名在内置 `meetsdk-android.json` 中维护)。
|
|
128
|
+
- **`fetch-config`**:仍按 `channelAuthConfig` 把各 auth 项映射为上述嵌套结构(直接落在 `sdkModules` 内)。
|
|
129
|
+
- 扩展:在 `MeetSdkRemoteConfig` / `normalizeSdkModulesFromUnknown` 增加子模块形状,并在内置 `meetsdk-android.json` 中补对应插件的仓库、依赖或 Gradle plugin 配置。
|
|
130
|
+
|
|
131
|
+
## 后续扩展
|
|
132
|
+
|
|
133
|
+
在 `src/ops/handlers.ts` 中可继续新增其它 `op`,扩展 manifest 能驱动的工程修改能力。
|
package/docs/API.md
ADDED
|
@@ -0,0 +1,47 @@
|
|
|
1
|
+
# meet-sdk-tool 相关 HTTP 接口汇总
|
|
2
|
+
|
|
3
|
+
本文档汇总 **meet-sdk-tool** 可能接触或对齐的远程接口,便于联调与字段对照。样例 JSON 放在 [`fixtures/api-samples/`](../fixtures/api-samples/)(**已脱敏**,勿把含 `appSecret` / 私钥的原文提交到仓库)。
|
|
4
|
+
|
|
5
|
+
## 与本工具 CLI 的关系
|
|
6
|
+
|
|
7
|
+
| 接口 | meet-sdk-tool 是否调用 | CLI / 命令 |
|
|
8
|
+
|------|------------------------|------------|
|
|
9
|
+
| [downloadSDKConfig](./api/downloadSDKConfig.md) | **是(当前主路径)** | `fetch-config`、`setup` |
|
|
10
|
+
| [getSDKConfig](./api/getSDKConfig.md) | 否(库内有实现,可映射 JSON) | — |
|
|
11
|
+
| [getChannelConfig(MeetGames 运营后台)](./api/getChannelConfig-meetgames.md) | **否** | — |
|
|
12
|
+
|
|
13
|
+
`integrate` / `doctor` **不请求 HTTP**,只读本地 `meetsdk-remote-config.json` 与工程文件。
|
|
14
|
+
|
|
15
|
+
## 环境 Base URL
|
|
16
|
+
|
|
17
|
+
| 环境 | gp-sdk `openSDK`(download / getSDKConfig) | 说明 |
|
|
18
|
+
|------|-------------------------------------------|------|
|
|
19
|
+
| `prod` | `https://api-sdk-gameplus.meetsocial.com/` | CLI `--env prod`(默认) |
|
|
20
|
+
| `pre` | `https://pre-api-sdk-gameplus.meetsocial.com/` | CLI `--env pre` |
|
|
21
|
+
| `test` | `https://test-api-sdk-gameplus.meetsocial.com:1157/` | CLI `--env test` |
|
|
22
|
+
| 覆盖 | 环境变量 `TOPSDK_API_BASE_URL` | 如本机 console:`http://localhost:18080/` |
|
|
23
|
+
|
|
24
|
+
MeetGames **业务网关**(如 `getChannelConfig`)与 gp-sdk 主机不同,见各接口文档。
|
|
25
|
+
|
|
26
|
+
## 文档索引
|
|
27
|
+
|
|
28
|
+
1. [downloadSDKConfig](./api/downloadSDKConfig.md) — gp-sdk 组装 `meetsdk-remote-config.json` 并下载
|
|
29
|
+
2. [getSDKConfig](./api/getSDKConfig.md) — gp-sdk 旧接口,需 sign,返回 `channelAuthConfig`
|
|
30
|
+
3. [getChannelConfig(MeetGames)](./api/getChannelConfig-meetgames.md) — 运营后台渠道配置 VO,含 `authConfigs` / `thirdDataPlatform` / `parameterConfig`
|
|
31
|
+
|
|
32
|
+
## 本地落盘格式
|
|
33
|
+
|
|
34
|
+
无论通过哪条接口理解字段,**集成流水线只消费**工程根目录的:
|
|
35
|
+
|
|
36
|
+
[`meetsdk-remote-config.json`](../fixtures/meetsdk-remote-config.mock.json)(结构见 [`src/config/meetSdkRemoteConfig.ts`](../src/config/meetSdkRemoteConfig.ts)、JSON Schema [`schema/meetsdk-remote-config.schema.json`](../schema/meetsdk-remote-config.schema.json))
|
|
37
|
+
|
|
38
|
+
固定 Gradle 仓库、SDK 版本、依赖坐标由 [`meetsdk-android.json`](../meetsdk-android.json) 在 `integrate` 时合并。
|
|
39
|
+
|
|
40
|
+
## 代码入口
|
|
41
|
+
|
|
42
|
+
| 能力 | 源文件 |
|
|
43
|
+
|------|--------|
|
|
44
|
+
| downloadSDKConfig 客户端 | [`src/remote/topsdkDownloadSdkConfig.ts`](../src/remote/topsdkDownloadSdkConfig.ts) |
|
|
45
|
+
| getSDKConfig 客户端 | [`src/remote/topsdkGetSdkConfig.ts`](../src/remote/topsdkGetSdkConfig.ts) |
|
|
46
|
+
| 响应 → meetsdk 形 | [`src/config/meetSdkRemoteConfig.ts`](../src/config/meetSdkRemoteConfig.ts) |
|
|
47
|
+
| gp-sdk 服务端组装 | `gp-sdk/console/.../SdkConfigDownloadServiceImpl.java` |
|
|
@@ -0,0 +1,72 @@
|
|
|
1
|
+
# Cursor MCP Setup (meetgames-mcp)
|
|
2
|
+
|
|
3
|
+
This document shows a minimal Cursor MCP setup for this project.
|
|
4
|
+
|
|
5
|
+
## 1) Build first
|
|
6
|
+
|
|
7
|
+
```bash
|
|
8
|
+
cd /Users/work/Workspace/Projects/meet-sdk-tool
|
|
9
|
+
npm run build
|
|
10
|
+
```
|
|
11
|
+
|
|
12
|
+
## 2) Add MCP server config in Cursor
|
|
13
|
+
|
|
14
|
+
Copy this project file:
|
|
15
|
+
|
|
16
|
+
- `.cursor/mcp.example.json`
|
|
17
|
+
|
|
18
|
+
Into your actual Cursor MCP config, and keep one server entry:
|
|
19
|
+
|
|
20
|
+
- `meetgames-mcp-local-node` (recommended for repo development), or
|
|
21
|
+
- `meetgames-mcp-global-bin` (after global install).
|
|
22
|
+
|
|
23
|
+
### Recommended entry (local node path)
|
|
24
|
+
|
|
25
|
+
```json
|
|
26
|
+
{
|
|
27
|
+
"mcpServers": {
|
|
28
|
+
"meetgames-mcp-local-node": {
|
|
29
|
+
"command": "node",
|
|
30
|
+
"args": [
|
|
31
|
+
"/Users/work/Workspace/Projects/meet-sdk-tool/dist/mcp-entry.js"
|
|
32
|
+
],
|
|
33
|
+
"cwd": "/Users/work/Workspace/Projects/meet-sdk-tool"
|
|
34
|
+
}
|
|
35
|
+
}
|
|
36
|
+
}
|
|
37
|
+
```
|
|
38
|
+
|
|
39
|
+
## 3) (Optional) global install route
|
|
40
|
+
|
|
41
|
+
```bash
|
|
42
|
+
npm install -g /Users/work/Workspace/Projects/meet-sdk-tool
|
|
43
|
+
```
|
|
44
|
+
|
|
45
|
+
Then use:
|
|
46
|
+
|
|
47
|
+
```json
|
|
48
|
+
{
|
|
49
|
+
"mcpServers": {
|
|
50
|
+
"meetgames-mcp-global-bin": {
|
|
51
|
+
"command": "meetgames-mcp",
|
|
52
|
+
"args": [],
|
|
53
|
+
"cwd": "/Users/work/Workspace/Projects/meet-sdk-tool"
|
|
54
|
+
}
|
|
55
|
+
}
|
|
56
|
+
}
|
|
57
|
+
```
|
|
58
|
+
|
|
59
|
+
## 4) Quick verification in Cursor
|
|
60
|
+
|
|
61
|
+
After Cursor reloads MCP servers, verify the following tools are available:
|
|
62
|
+
|
|
63
|
+
- `meetgames_doctor`
|
|
64
|
+
- `meetgames_fetch_config`
|
|
65
|
+
- `meetgames_integrate_dry_run`
|
|
66
|
+
- `meetgames_integrate_apply`
|
|
67
|
+
|
|
68
|
+
Suggested test order:
|
|
69
|
+
|
|
70
|
+
1. Call `meetgames_doctor` with your project root.
|
|
71
|
+
2. Call `meetgames_integrate_dry_run`.
|
|
72
|
+
3. If dry-run is clean, call `meetgames_integrate_apply`.
|
|
@@ -0,0 +1,63 @@
|
|
|
1
|
+
# Meetgames MCP + Skill (Minimal Set)
|
|
2
|
+
|
|
3
|
+
This project now provides a minimal MCP server plus a project skill.
|
|
4
|
+
|
|
5
|
+
## Why this shape
|
|
6
|
+
|
|
7
|
+
- Keep the existing CLI as the single execution core.
|
|
8
|
+
- Add MCP as a thin interface layer for predictable tool calls.
|
|
9
|
+
- Add a skill to standardize call order and reduce operator variance.
|
|
10
|
+
|
|
11
|
+
## MCP tools (minimal set)
|
|
12
|
+
|
|
13
|
+
The server exposes these tools:
|
|
14
|
+
|
|
15
|
+
- `meetgames_doctor`
|
|
16
|
+
- `meetgames_fetch_config`
|
|
17
|
+
- `meetgames_integrate_dry_run`
|
|
18
|
+
- `meetgames_integrate_apply`
|
|
19
|
+
- `meetgames_setup` (fetch-config + integrate in one call)
|
|
20
|
+
|
|
21
|
+
All integrate tools always use the built-in recipe: `recipes/integrate-default.yaml`.
|
|
22
|
+
|
|
23
|
+
## Run MCP server
|
|
24
|
+
|
|
25
|
+
```bash
|
|
26
|
+
npm run mcp:stdio
|
|
27
|
+
```
|
|
28
|
+
|
|
29
|
+
or directly:
|
|
30
|
+
|
|
31
|
+
```bash
|
|
32
|
+
node dist/mcp-entry.js
|
|
33
|
+
```
|
|
34
|
+
|
|
35
|
+
## Suggested call flow
|
|
36
|
+
|
|
37
|
+
**One-shot (recommended for agents):**
|
|
38
|
+
|
|
39
|
+
1. `meetgames_doctor` (optional)
|
|
40
|
+
2. `meetgames_setup` with `dryRun: true`, then review; call again with `dryRun: false` to apply
|
|
41
|
+
|
|
42
|
+
**Step-by-step:**
|
|
43
|
+
|
|
44
|
+
1. `meetgames_doctor`
|
|
45
|
+
2. `meetgames_fetch_config` (if remote config needs refresh)
|
|
46
|
+
3. `meetgames_integrate_dry_run`
|
|
47
|
+
4. Review patch/report
|
|
48
|
+
5. `meetgames_integrate_apply`
|
|
49
|
+
|
|
50
|
+
## Skill location
|
|
51
|
+
|
|
52
|
+
Project skill is at:
|
|
53
|
+
|
|
54
|
+
- `.cursor/skills/meetgames-mcp/SKILL.md`
|
|
55
|
+
|
|
56
|
+
It teaches agents to use the MCP tools in the flow above, prefer dry-run first, and only apply after review.
|
|
57
|
+
|
|
58
|
+
## Cursor configuration example
|
|
59
|
+
|
|
60
|
+
See:
|
|
61
|
+
|
|
62
|
+
- [`docs/CURSOR-MCP-SETUP.md`](./CURSOR-MCP-SETUP.md)
|
|
63
|
+
- [`.cursor/mcp.example.json`](../.cursor/mcp.example.json)
|
package/docs/README.md
ADDED
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
# meet-sdk-tool 文档索引
|
|
2
|
+
|
|
3
|
+
| 文档 | 类型 | 说明 |
|
|
4
|
+
|------|------|------|
|
|
5
|
+
| [需求文档.md](./需求文档.md) | 产品需求(PRD) v1.0 | 目标、四大功能、MG/服务端配套、验收与里程碑 |
|
|
6
|
+
| [技术方案调研.md](./技术方案调研.md) | 技术调研 v1.2 | Gradle:现阶段正则,规划 Groovy AST only(不支持 `.kts`) |
|
|
7
|
+
| [ANDROID.md](./ANDROID.md) | 使用说明 | Android 集成、CLI 参数、Gradle 行为 |
|
|
8
|
+
| [API.md](./API.md) | 接口索引 | `downloadSDKConfig` 等 HTTP 接口 |
|
|
9
|
+
| [MCP-SKILL.md](./MCP-SKILL.md) | 运维 / Agent | MCP 工具与推荐调用顺序 |
|
|
10
|
+
| [CURSOR-MCP-SETUP.md](./CURSOR-MCP-SETUP.md) | 环境 | Cursor MCP 配置 |
|
|
11
|
+
|
|
12
|
+
实现细节以仓库代码为准;PRD 中标注 **【待补充】** 的条目需产品 / 业务方确认后定稿。
|
|
@@ -0,0 +1,96 @@
|
|
|
1
|
+
# downloadSDKConfig(gp-sdk)
|
|
2
|
+
|
|
3
|
+
meet-sdk-tool **`fetch-config` / `setup` 当前使用的接口**。
|
|
4
|
+
|
|
5
|
+
## 请求
|
|
6
|
+
|
|
7
|
+
| 项 | 值 |
|
|
8
|
+
|----|-----|
|
|
9
|
+
| 方法 | `GET` |
|
|
10
|
+
| 路径 | `{baseUrl}console/openSDK/downloadSDKConfig` |
|
|
11
|
+
| 鉴权 | **无** sign |
|
|
12
|
+
| Query | `appId`(必填)、`channelType`(必填,如 `GOOGLE`、`APPLE`) |
|
|
13
|
+
|
|
14
|
+
示例(测试服):
|
|
15
|
+
|
|
16
|
+
```http
|
|
17
|
+
GET https://test-api-sdk-gameplus.meetsocial.com:1157/console/openSDK/downloadSDKConfig?appId=791251136341225472&channelType=GOOGLE
|
|
18
|
+
```
|
|
19
|
+
|
|
20
|
+
本机 gp-sdk console:
|
|
21
|
+
|
|
22
|
+
```http
|
|
23
|
+
GET http://localhost:18080/console/openSDK/downloadSDKConfig?appId=791251136341225472&channelType=GOOGLE
|
|
24
|
+
```
|
|
25
|
+
|
|
26
|
+
CLI:
|
|
27
|
+
|
|
28
|
+
```bash
|
|
29
|
+
TOPSDK_API_BASE_URL=http://localhost:18080/ \
|
|
30
|
+
meetgames fetch-config --app-id 791251136341225472 --channel-type GOOGLE --env test
|
|
31
|
+
```
|
|
32
|
+
|
|
33
|
+
## 响应
|
|
34
|
+
|
|
35
|
+
- **Content-Type**:`application/json`(附件下载头 `Content-Disposition: meetsdk-remote-config.json`)
|
|
36
|
+
- **Body**:即为 `meetsdk-remote-config.json` 全文(pretty JSON),**不是** `{ code, result }` 包装
|
|
37
|
+
- **落盘**:`fetch-config` / MCP `meetgames_fetch_config` 将响应 **bytes 原样写入** `<project-root>/meetsdk-remote-config.json`,不注入 `dependencies`/`repositories`/`topsdk.version` 等字段;这些固定 SDK 配置仅在 `integrate` 时从内置 [`meetsdk-android.json`](../meetsdk-android.json) 合并。
|
|
38
|
+
|
|
39
|
+
### 服务端数据来源(gp-sdk MySQL)
|
|
40
|
+
|
|
41
|
+
| JSON 路径 | 表 | 说明 |
|
|
42
|
+
|-----------|-----|------|
|
|
43
|
+
| `packageName` | `channel.package_name` | |
|
|
44
|
+
| `channel` | `channel.channel_type` | 枚举名如 `GOOGLE` / `APPLE` |
|
|
45
|
+
| `devicePlatform` | `channel.device_platform` | 小写,如 `android` / `ios` |
|
|
46
|
+
| `topsdk.appId` / `topsdk.appSecret` | `app` | |
|
|
47
|
+
| `sdkModules.login.*` | `channel_auth`(`enable=true`) | 各登录渠道凭证 |
|
|
48
|
+
| `sdkModules.payment.*` | `channel_payment` + 部分 `channel_auth` | IAP 平台 |
|
|
49
|
+
| `sdkModules.analytics.*` | `channel_third_data_platform` | AppsFlyer / Firebase / Adjust |
|
|
50
|
+
| `sdkModules.analytics.firebase.firebase_file_url` | `channel_third_data_platform.firebase_url` | MG 经 **uploadV2** 上传后多为 OSS **objectKey**;组装 JSON 时经 `AliYunOssUtil.getOssUr` 生成下载链接(与 `downLoadXml` 一致)。若库内为 http(s) URL 则 `getFileUrl` 换签 |
|
|
51
|
+
| `sdkModules.analytics.firebase.firebase_file_name` | `channel_third_data_platform.firebase_name` | 上传原始文件名(含后缀);落盘路径由 meet-sdk-tool 按工程 **app module** 检测 |
|
|
52
|
+
|
|
53
|
+
详见 gp-sdk `SdkConfigDownloadServiceImpl`;**不包含** `topsdk.version`(integrate 时用 `meetsdk-android.json` 兜底)。
|
|
54
|
+
|
|
55
|
+
**子模块写入**:只要库表里有对应配置参数即写入子键,value 为对象(或 `{}`);无配置**不写该键**(不出现 `false`)。**不**再根据 `channel_auth.enable` / `channel_payment.enable` 过滤。`analytics.facebookdata` 等独立开关字段预留,待 meetgames-business 配置后再接。
|
|
56
|
+
|
|
57
|
+
**meet-sdk-tool integrate**:仅当 JSON 里写了对应子键时接入(如 `login.kakao`、`analytics.appsflyer`);有键则 value 必为 `{…}`。
|
|
58
|
+
|
|
59
|
+
### 上传配置文件(MG → OSS,沿用原能力)
|
|
60
|
+
|
|
61
|
+
| 项 | 值 |
|
|
62
|
+
|----|-----|
|
|
63
|
+
| 方法 | `POST` |
|
|
64
|
+
| 路径 | MeetGames 代理:`/customer/topsdk/console/meetgames/common/uploadV2` |
|
|
65
|
+
| 参数 | `file`(multipart) |
|
|
66
|
+
| 落库 | `firebase_url` ← 返回的 **objectKeyName**;`firebase_name` ← 文件名;保存走 `updateChannelThirdDataPlatform` |
|
|
67
|
+
|
|
68
|
+
**gp-sdk 不提供单独的上传接口**;`downloadSDKConfig` 只读库内 `firebase_url` 并解析为可下载 URL。
|
|
69
|
+
|
|
70
|
+
### 根级字段(与 MeetGames `getChannelConfig` 对齐)
|
|
71
|
+
|
|
72
|
+
| 字段 | 示例 | 说明 |
|
|
73
|
+
|------|------|------|
|
|
74
|
+
| `channel` | `GOOGLE` | 商店渠道(根级,不再放在 `topsdk` 下) |
|
|
75
|
+
| `devicePlatform` | `android` | 设备平台,来自 DB 并规范为小写 |
|
|
76
|
+
|
|
77
|
+
JSON Schema:[`schema/meetsdk-remote-config.schema.json`](../../schema/meetsdk-remote-config.schema.json)
|
|
78
|
+
|
|
79
|
+
### 响应体样例
|
|
80
|
+
|
|
81
|
+
仓库内测试用 mock:[`fixtures/meetsdk-remote-config.mock.json`](../../fixtures/meetsdk-remote-config.mock.json)
|
|
82
|
+
Vitest 样例工程:[`test-projects/android-sample/meetsdk-remote-config.json`](../../test-projects/android-sample/meetsdk-remote-config.json)(联调后可能被覆盖)
|
|
83
|
+
|
|
84
|
+
## 与 getChannelConfig 的区别
|
|
85
|
+
|
|
86
|
+
| | downloadSDKConfig | getChannelConfig(MeetGames) |
|
|
87
|
+
|--|-------------------|-------------------------------|
|
|
88
|
+
| 服务 | gp-sdk console | MeetGames 业务 API |
|
|
89
|
+
| 输出 | 已是 `meetsdk-remote-config.json` | 控制台 VO(`authConfigs` 等) |
|
|
90
|
+
| 鉴权 | 仅 appId + channelType | 按 channelId 查询 |
|
|
91
|
+
| meet-sdk-tool | **已接入** | 未接入,仅文档对照 |
|
|
92
|
+
|
|
93
|
+
## 实现
|
|
94
|
+
|
|
95
|
+
- 客户端:[`src/remote/topsdkDownloadSdkConfig.ts`](../../src/remote/topsdkDownloadSdkConfig.ts)、[`src/config/fetchConfigWrite.ts`](../../src/config/fetchConfigWrite.ts)
|
|
96
|
+
- 服务端:[`SDKDownloadController`](../../../gp-sdk/console/src/main/java/com/sino/gameplus/sdk/console/controller/openSDK/SDKDownloadController.java)
|
|
@@ -0,0 +1,106 @@
|
|
|
1
|
+
# getChannelConfig(MeetGames 运营后台)
|
|
2
|
+
|
|
3
|
+
**meet-sdk-tool 当前未调用此接口**;文档用于与控制台渠道配置、`downloadSDKConfig` 落盘 JSON 对照。集成请仍使用 [downloadSDKConfig](./downloadSDKConfig.md)。
|
|
4
|
+
|
|
5
|
+
## 请求
|
|
6
|
+
|
|
7
|
+
| 项 | 值 |
|
|
8
|
+
|----|-----|
|
|
9
|
+
| 方法 | `GET` |
|
|
10
|
+
| 测试环境示例 | `https://test-business-api.meetgames.com/customer/topsdk/console/meetgames/channel/getChannelConfig` |
|
|
11
|
+
| Query | `channelId`(渠道主键,如 `791251136341225475`) |
|
|
12
|
+
|
|
13
|
+
```http
|
|
14
|
+
GET https://test-business-api.meetgames.com/customer/topsdk/console/meetgames/channel/getChannelConfig?channelId=791251136341225475
|
|
15
|
+
```
|
|
16
|
+
|
|
17
|
+
正式 / 预发域名以 MeetGames 网关配置为准(与 gp-sdk `api-sdk-gameplus` 主机不同)。
|
|
18
|
+
|
|
19
|
+
## 响应结构
|
|
20
|
+
|
|
21
|
+
标准包装:
|
|
22
|
+
|
|
23
|
+
```json
|
|
24
|
+
{
|
|
25
|
+
"code": 0,
|
|
26
|
+
"message": "",
|
|
27
|
+
"hint": "",
|
|
28
|
+
"result": { },
|
|
29
|
+
"success": true,
|
|
30
|
+
"traceId": "...",
|
|
31
|
+
"appTrace": "..."
|
|
32
|
+
}
|
|
33
|
+
```
|
|
34
|
+
|
|
35
|
+
`code === 0` 且 `success === true` 表示成功;业务数据在 `result`。
|
|
36
|
+
|
|
37
|
+
### `result` 主要字段
|
|
38
|
+
|
|
39
|
+
| 字段 | 说明 |
|
|
40
|
+
|------|------|
|
|
41
|
+
| `channelId` | 渠道 ID(与 query 一致) |
|
|
42
|
+
| `appId` | 应用 ID |
|
|
43
|
+
| `channelType` / `channelTypeName` | 商店类型,如 `GOOGLE` |
|
|
44
|
+
| `devicePlatform` | 如 `android` |
|
|
45
|
+
| `packageName` | 包名 |
|
|
46
|
+
| `notifyUrl` | 支付回调等通知地址 |
|
|
47
|
+
| `authConfigs[]` | 登录渠道列表(见下表) |
|
|
48
|
+
| `thirdDataPlatform` | 第三方数据 / 归因(AppsFlyer、Firebase 等) |
|
|
49
|
+
| `parameterConfig` | 渠道参数(含 Google Play 服务账号 JSON 等敏感字段) |
|
|
50
|
+
|
|
51
|
+
### `authConfigs[]` 单项
|
|
52
|
+
|
|
53
|
+
| 字段 | 说明 |
|
|
54
|
+
|------|------|
|
|
55
|
+
| `authType` | `GUEST`、`EMAIL`、`GOOGLE`、`FACEBOOK`、`TWITTER`、`SNAPCHAT`、`LINE`、`NAVER`、`KAKAO`、`TIKTOK` 等 |
|
|
56
|
+
| `authName` | 控制台展示名 |
|
|
57
|
+
| `enable` | 是否启用 |
|
|
58
|
+
| `weight` | 排序权重 |
|
|
59
|
+
| `clientId` / `secret` / `scheme` / `redirect` / `name` | 按平台可选 |
|
|
60
|
+
|
|
61
|
+
### `thirdDataPlatform`
|
|
62
|
+
|
|
63
|
+
| 字段 | 说明 |
|
|
64
|
+
|------|------|
|
|
65
|
+
| `devKey` | 如 AppsFlyer dev key |
|
|
66
|
+
| `firebaseUrl` | `google-services.json` 在 OSS 的路径片段 |
|
|
67
|
+
| `firebaseName` | 文件名,常为 `google-services.json` |
|
|
68
|
+
| `eventUrl` | Adjust 等事件配置 OSS 签名 URL |
|
|
69
|
+
| `eventContrast` | 事件 ID 映射 |
|
|
70
|
+
|
|
71
|
+
对应 gp-sdk 表 **`channel_third_data_platform`**(download 时映射到 `sdkModules.analytics`)。
|
|
72
|
+
|
|
73
|
+
### `parameterConfig`
|
|
74
|
+
|
|
75
|
+
| 字段 | 说明 |
|
|
76
|
+
|------|------|
|
|
77
|
+
| `aliasClientId` / `aliasSecret` / `aliasToken` | 别名 / 支付相关 |
|
|
78
|
+
| `secretValue` | **敏感**:常为 Firebase **服务账号**整段 JSON(含 `private_key`) |
|
|
79
|
+
| `aliasConfig` | 扩展配置字符串 |
|
|
80
|
+
|
|
81
|
+
**勿将 `secretValue` 原文提交到 git**;样例中已替换为 `[REDACTED: ...]`。
|
|
82
|
+
|
|
83
|
+
## 与 `meetsdk-remote-config.json` 的对应关系(概念)
|
|
84
|
+
|
|
85
|
+
| getChannelConfig | downloadSDKConfig / 本地 JSON |
|
|
86
|
+
|------------------|--------------------------------|
|
|
87
|
+
| `packageName` | `packageName` |
|
|
88
|
+
| `channelType` | 根级 `channel` |
|
|
89
|
+
| `devicePlatform` | 根级 `devicePlatform` |
|
|
90
|
+
| `appId` | `topsdk.appId`(secret 在 `app` 表,此接口 result 未必带出) |
|
|
91
|
+
| `authConfigs[]`(`enable`) | `sdkModules.login.*` |
|
|
92
|
+
| `thirdDataPlatform.devKey` | `sdkModules.analytics.appsflyer` 等 |
|
|
93
|
+
| `thirdDataPlatform.firebaseUrl` | Firebase / `firebase_file_url` 类字段 |
|
|
94
|
+
| `parameterConfig` | 支付 / Google Play 服务账号等,与 `channel_payment`、parameter 表相关 |
|
|
95
|
+
|
|
96
|
+
完整 Gradle 集成仍依赖工具侧 [`meetsdk-android.json`](../../meetsdk-android.json) 合并版本与依赖。
|
|
97
|
+
|
|
98
|
+
## 脱敏样例
|
|
99
|
+
|
|
100
|
+
- 路径:[`fixtures/api-samples/getChannelConfig-meetgames.sample.json`](../../fixtures/api-samples/getChannelConfig-meetgames.sample.json)
|
|
101
|
+
- 来源:`channelId=791251136341225475`,测试业务 API,2026-05 联调
|
|
102
|
+
- 脱敏:`parameterConfig.secretValue` 全文替换;`eventUrl` 中 OSS 签名参数缩写为 `REDACTED`
|
|
103
|
+
|
|
104
|
+
## 后续
|
|
105
|
+
|
|
106
|
+
若需在 CLI 增加「按 `channelId` 拉 MeetGames 配置再转写 JSON」,需单独实现客户端与字段映射;当前 **`fetch-config` 仅支持 `downloadSDKConfig`**。
|
|
@@ -0,0 +1,38 @@
|
|
|
1
|
+
# getSDKConfig(gp-sdk)
|
|
2
|
+
|
|
3
|
+
与 **topsdk-tool-ios** / 旧 topsdk-tool 对齐的接口;**meet-sdk-tool CLI 的 `fetch-config` 已改用 [downloadSDKConfig](./downloadSDKConfig.md)**,本接口仍保留在库中供映射或兼容。
|
|
4
|
+
|
|
5
|
+
## 请求
|
|
6
|
+
|
|
7
|
+
| 项 | 值 |
|
|
8
|
+
|----|-----|
|
|
9
|
+
| 方法 | `GET` |
|
|
10
|
+
| 路径 | `{baseUrl}console/openSDK/getSDKConfig` |
|
|
11
|
+
| Query | `appId`、`channelType`、`authType`(可多次)、`sign`、`timestamp`(毫秒) |
|
|
12
|
+
| 签名 | `sign = base64( md5_binary( appId + appSecret + timestamp ) )` |
|
|
13
|
+
|
|
14
|
+
`authType` 请求前会过滤掉 `GUEST`、`UI`、`IAPPAY`(与 iOS 工具一致)。
|
|
15
|
+
|
|
16
|
+
## 响应(典型)
|
|
17
|
+
|
|
18
|
+
包装形如:
|
|
19
|
+
|
|
20
|
+
```json
|
|
21
|
+
{
|
|
22
|
+
"code": 200,
|
|
23
|
+
"data": {
|
|
24
|
+
"channelAuthConfig": { }
|
|
25
|
+
}
|
|
26
|
+
}
|
|
27
|
+
```
|
|
28
|
+
|
|
29
|
+
`channelAuthConfig` 内为各平台嵌套配置(clientId、secret、scheme 等),**不是**完整的 `meetsdk-remote-config.json`。可用 [`mapTopSdkGetSdkConfigToMeetSdkRemoteConfig`](../../src/config/meetSdkRemoteConfig.ts) 转为 integrate 所需格式(仍需 `appSecret`、`packageName` 等外部传入)。
|
|
30
|
+
|
|
31
|
+
## 环境 Base URL
|
|
32
|
+
|
|
33
|
+
与 [API 总览](../API.md#环境-base-url) 相同(`--env prod|pre|test` 或 `TOPSDK_API_BASE_URL`)。
|
|
34
|
+
|
|
35
|
+
## 实现
|
|
36
|
+
|
|
37
|
+
- [`src/remote/topsdkGetSdkConfig.ts`](../../src/remote/topsdkGetSdkConfig.ts)
|
|
38
|
+
- [`src/remote/topsdkSign.ts`](../../src/remote/topsdkSign.ts)
|