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 +134 -32
- package/core.min.js +1 -1
- package/loader.min.js +1 -1
- package/package.json +2 -2
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',
|
|
216
|
-
placementId: 'your-placement-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('❌ 广告加载失败',
|
|
223
|
-
},
|
|
224
|
-
onAdExpose: () => {
|
|
225
|
-
console.log('👀 广告已曝光');
|
|
222
|
+
console.error('❌ 广告加载失败', message);
|
|
226
223
|
},
|
|
227
|
-
|
|
228
|
-
|
|
229
|
-
}
|
|
224
|
+
onAdExpose: () => console.log('👀 广告已曝光'),
|
|
225
|
+
onAdClick: () => console.log('🖱️ 用户点击了广告'),
|
|
230
226
|
});
|
|
227
|
+
|
|
228
|
+
// 页面卸载或组件销毁时调用,避免内存泄漏
|
|
229
|
+
// adSDK.destroy();
|
|
231
230
|
```
|
|
232
231
|
|
|
233
|
-
|
|
232
|
+
**⚠️ 重要:容器必须在实例化时已存在于 DOM 中。**
|
|
233
|
+
若传入的是选择器(如 `#ad-container`),则创建 `new AdSDK(...)` 时,该元素必须已经被渲染;否则 SDK 不会发起广告请求,广告不会展示。在 Vue/React 等框架中请务必在**容器已挂载后再创建实例**(见下方 Vue2/Vue3 示例)。
|
|
234
234
|
|
|
235
|
-
|
|
235
|
+
#### 2. Vue 2 项目接入
|
|
236
236
|
|
|
237
|
-
|
|
238
|
-
|
|
239
|
-
|
|
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
|
-
|
|
244
|
-
|
|
245
|
-
|
|
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
|
-
|
|
250
|
-
|
|
251
|
-
|
|
252
|
-
|
|
253
|
-
|
|
254
|
-
|
|
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
|
-
|
|
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
|
|