qb-pc-sdk 1.2.7 → 1.2.9

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 CHANGED
@@ -158,7 +158,7 @@ SDK 会自动检测运行环境:
158
158
 
159
159
  ### NPM 方式(模块化项目推荐)
160
160
 
161
- 适用于 Vue、React、Webpack、Vite 等模块化打包项目。
161
+ 适用于 Vue、React、Webpack、Vite 等模块化打包项目。**仅需安装 `qb-pc-sdk`,无需单独安装或引入 `qb-pc-ad-sdk-origin`**(底层 SDK 已作为依赖自动集成)。
162
162
 
163
163
  ```bash
164
164
  npm install qb-pc-sdk
@@ -203,59 +203,161 @@ npm install qb-pc-sdk
203
203
 
204
204
  ### 方式一:NPM 接入(模块化项目)
205
205
 
206
- 适用于 Vue、React、Webpack、Vite 等模块化打包项目。
206
+ 适用于 Vue、React、Webpack、Vite 等模块化打包项目。**只需引入 `qb-pc-sdk`,无需再 `import qb-pc-ad-sdk-origin`**,底层 SDK 已内置在包内并自动挂载。
207
207
 
208
- #### ES6 模块导入
208
+ #### 1. 基本用法(ES6 模块)
209
209
 
210
210
  ```javascript
211
211
  import AdSDK from 'qb-pc-sdk';
212
212
 
213
- // 使用
214
213
  const adSDK = new AdSDK({
215
- appId: 'your-app-id', // 替换为您在平台申请的应用ID
216
- placementId: 'your-placement-id', // 替换为您的在平台申请的广告位ID
217
- container: '#ad-container',
214
+ appId: 'your-app-id', // 必填,替换为平台申请的应用 ID
215
+ placementId: 'your-placement-id', // 必填,替换为平台申请的广告位 ID
216
+ container: '#ad-container', // 必填,广告挂载的容器:CSS 选择器或 DOM 元素
218
217
  onAdLoaded: (ad) => {
219
218
  console.log('✅ 广告加载成功', ad);
219
+ const size = adSDK.getAdSize(); // 可获取当前广告尺寸
220
220
  },
221
221
  onAdError: (error, message) => {
222
- console.error('❌ 广告加载失败', error, message);
223
- },
224
- onAdExpose: () => {
225
- console.log('👀 广告已曝光');
222
+ console.error('❌ 广告加载失败', message);
226
223
  },
227
- onAdClick: () => {
228
- console.log('🖱️ 用户点击了广告');
229
- }
224
+ onAdExpose: () => console.log('👀 广告已曝光'),
225
+ onAdClick: () => console.log('🖱️ 用户点击了广告'),
230
226
  });
227
+
228
+ // 页面卸载或组件销毁时调用,避免内存泄漏
229
+ // adSDK.destroy();
231
230
  ```
232
231
 
233
- #### Vue2 / Vue3 / React 等模块化环境
232
+ **⚠️ 重要:容器必须在实例化时已存在于 DOM 中。**
233
+ 若传入的是选择器(如 `#ad-container`),则创建 `new AdSDK(...)` 时,该元素必须已经被渲染;否则 SDK 不会发起广告请求,广告不会展示。在 Vue/React 等框架中请务必在**容器已挂载后再创建实例**(见下方 Vue2/Vue3 示例)。
234
234
 
235
- 在某些模块化打包环境中(如 Vue2),如果自动加载失败,需要手动引入底层 SDK 并挂载到 `window`:
235
+ #### 2. Vue 2 项目接入
236
236
 
237
- ```javascript
238
- // main.js 或入口文件
239
- import '';
237
+ 在 Vue 2 中,请使用 **ref** 获取容器 DOM,并在 **mounted + $nextTick** 之后再创建 AdSDK,确保容器已渲染。
238
+
239
+ **示例:单文件组件**
240
+
241
+ ```vue
242
+ <template>
243
+ <div class="ad-page">
244
+ <!-- 广告容器:必须设置 ref,并保证有宽高 -->
245
+ <div ref="adContainer" class="ad-container"></div>
246
+ </div>
247
+ </template>
248
+
249
+ <script>
240
250
  import AdSDK from 'qb-pc-sdk';
241
- import OriginSDK from 'qb-pc-ad-sdk-origin';
242
251
 
243
- // 确保 GDTAdSDK 挂载到 window(模块化环境可能需要手动挂载)
244
- if (typeof window !== 'undefined' && !window.GDTAdSDK) {
245
- window.GDTAdSDK = OriginSDK.default || OriginSDK.GDTAdSDK || OriginSDK;
252
+ export default {
253
+ name: 'AdPage',
254
+ data() {
255
+ return {
256
+ adSDK: null,
257
+ };
258
+ },
259
+ mounted() {
260
+ this.$nextTick(() => {
261
+ // 必须在 nextTick 后执行,确保 ref 已指向真实 DOM
262
+ const container = this.$refs.adContainer;
263
+ if (!container) return;
264
+
265
+ this.adSDK = new AdSDK({
266
+ appId: 'your-app-id',
267
+ placementId: 'your-placement-id',
268
+ container: container, // 推荐传 DOM 元素,避免选择器在 SPA 中拿不到
269
+ onAdLoaded: (ad) => {
270
+ console.log('✅ 广告加载成功', ad);
271
+ },
272
+ onAdError: (error, message) => {
273
+ console.error('❌ 广告加载失败', message);
274
+ },
275
+ });
276
+ });
277
+ },
278
+ beforeDestroy() {
279
+ if (this.adSDK && typeof this.adSDK.destroy === 'function') {
280
+ this.adSDK.destroy();
281
+ }
282
+ },
283
+ };
284
+ </script>
285
+
286
+ <style scoped>
287
+ .ad-container {
288
+ width: 400px;
289
+ height: 220px;
290
+ margin: 0 auto;
246
291
  }
292
+ </style>
293
+ ```
294
+
295
+ #### 3. Vue 3 项目接入(Composition API)
296
+
297
+ 在 Vue 3 中同样需要等容器挂载后再创建实例,使用 **ref + onMounted + nextTick**。
247
298
 
248
- // 之后在组件中使用
249
- new AdSDK({
250
- appId: 'your-app-id',
251
- placementId: 'your-placement-id',
252
- container: '#ad-container',
253
- onAdLoaded: (ad) => console.log('✅ 广告加载成功', ad),
254
- onAdError: (error, message) => console.error('❌ 广告加载失败', error, message)
299
+ **示例:`<script setup>`**
300
+
301
+ ```vue
302
+ <template>
303
+ <div class="ad-page">
304
+ <div ref="adContainerRef" class="ad-container"></div>
305
+ </div>
306
+ </template>
307
+
308
+ <script setup>
309
+ import { ref, onMounted, onBeforeUnmount, nextTick } from 'vue';
310
+ import AdSDK from 'qb-pc-sdk';
311
+
312
+ const adContainerRef = ref(null);
313
+ let adSDK = null;
314
+
315
+ onMounted(() => {
316
+ nextTick(() => {
317
+ const container = adContainerRef.value;
318
+ if (!container) return;
319
+
320
+ adSDK = new AdSDK({
321
+ appId: 'your-app-id',
322
+ placementId: 'your-placement-id',
323
+ container: container,
324
+ onAdLoaded: (ad) => console.log('✅ 广告加载成功', ad),
325
+ onAdError: (error, message) => console.error('❌ 广告加载失败', message),
326
+ });
327
+ });
328
+ });
329
+
330
+ onBeforeUnmount(() => {
331
+ if (adSDK && typeof adSDK.destroy === 'function') {
332
+ adSDK.destroy();
333
+ }
255
334
  });
335
+ </script>
336
+
337
+ <style scoped>
338
+ .ad-container {
339
+ width: 400px;
340
+ height: 220px;
341
+ margin: 0 auto;
342
+ }
343
+ </style>
256
344
  ```
257
345
 
258
- > **提示**:如果遇到 "SDK Load Timeout" 错误,通常是 `window.GDTAdSDK` 未正确挂载,请按照上述方式手动挂载。
346
+ **Vue 3 Options API** 写法与 Vue 2 类似:在 `mounted` 里用 `this.$nextTick`,用 `this.$refs.xxx` 取容器,在 `beforeUnmount` 里调用 `adSDK.destroy()`。
347
+
348
+ #### 4. NPM 接入常见问题:广告不展示
349
+
350
+ 若按上述方式接入后广告仍不展示,可按下面顺序排查:
351
+
352
+ | 可能原因 | 处理方式 |
353
+ |----------|----------|
354
+ | **容器在实例化时不存在** | 在 Vue/React 中必须在容器已挂载后再 `new AdSDK()`,例如在 `mounted` + `$nextTick`(Vue2)或 `onMounted` + `nextTick`(Vue3)中创建,并优先传 **DOM 元素**(ref)而不是选择器。 |
355
+ | **容器无宽高** | 给广告容器设置明确的 `width`、`height`(或通过布局保证有尺寸),否则广告可能不渲染。 |
356
+ | **非 Windows 环境** | 本 SDK 仅在 **Windows 系统**下加载广告,Mac/Linux/移动端会静默跳过,属正常行为。 |
357
+ | **appId / placementId 错误** | 确认从平台复制的应用 ID、广告位 ID 与配置一致,且无多余空格。 |
358
+ | **网络或接口异常** | 打开控制台查看是否有 `onAdError` 报错或网络请求失败;若出现 “SDK Load Timeout”,多为打包环境未正确包含底层依赖,可尝试重新安装:`npm install qb-pc-sdk --force`。 |
359
+
360
+ **总结:** NPM 接入只需 `import AdSDK from 'qb-pc-sdk'`,无需再引入 `qb-pc-ad-sdk-origin`;**保证在容器已存在于 DOM 且具有宽高时再创建 AdSDK 实例**,即可正常展示广告。
259
361
 
260
362
  ### 方式二:CDN 接入(静态 HTML 页面)
261
363
 
@@ -862,7 +964,7 @@ useEffect(() => {
862
964
 
863
965
  ## 依赖
864
966
 
865
- - `qb-pc-ad-sdk-origin`: 底层广告 SDK(已自动在浏览器环境加载)
967
+ - `qb-pc-ad-sdk-origin`: 底层广告 SDK,作为 `qb-pc-sdk` 的 npm 依赖自动安装;**接入时只需使用 `qb-pc-sdk`,无需单独安装或 import 该包**。
866
968
 
867
969
  ## License
868
970