# 微信小程序 SDK 插件版

## 1 插件版小程序 SDK 和小程序 SDK 区别

经过我们测试，发现如果小程序中使用了插件，在开发者工具下可以修改 App 和 Page，但在线上会报错不能修改\
不能修改的话会导致我们自动采集预置事件的功能无效\
在 2018-9 月的测试发现，新用户首次使用小程序会出现这样的问题，杀死微信后，再次打开小程序又可以使用。具体原因不详\
针对上述情况，也就是使用了插件的小程序客户，需要使用插件版小程序 SDK\
这个版本相比小程序 SDK ，复杂在于每个 Page 里的 JS 顶部都要引入一段代码，才可以自动采集 Page 里的预置事件

## 2 安装方法

### 2.1 下载文件

从 github 上下载 [微信小程序 sdk](https://github.com/sensorsdata/sa-sdk-miniprogram) ，sensorsdata.plugin.min.js .

### 2.2 引入并配置参数

在app.js 和全部的 pages 目录里的 js 顶部引入如下代码;并且调用 setPara() 方法设置初始化参数。注： server\_url 需在 setPara() 中配置。

  app.js 的顶部引入如下代码

```
------app.js
    var sa = require('./utils/sensorsdata.plugin.min.js');
    var App = sa.App;
    sa.setPara({
        name: 'sensors',
        server_url: '数据接收地址'
    });
```

  在全部（注意是全部！）的 pages 目录里的 js 顶部引入如下代码

```
------index.js
    var Page = getApp().sensors.Page;
```

  注意：\
    1 var App 与 var Page 变量名不能修改\
    2 所有的 pages 目录里的 js 顶部都要引入

### 2.3 标志初始化完成

如果异步的获取 openid 等操作已经完成，此时调用 init() 方法标志已完成初始化\
注意: 必须调用，否则不会发数据

```
------app.js
    var sa = require('./utils/sensorsdata.plugin.min.js');
    var App = sa.App;
    sa.setPara({
        name: 'sensors',
        server_url: '数据接收地址'
    });
    sa.init();
```

## 3 自定义追踪代码

  app.js 中自定义方法

```
// 方案1  通过 sa 可以使用 track 等方法

    var sa = require('./utils/sensorsdata.plugin.min.js');
    var App = sa.App;
    sa.setPara({
        name: 'sensors',
        server_url: '数据接收地址'
    })
    sa.init();
    sa.track('addToCart',{
        productName:'华为畅享 9S'
    });

// 方案2 通过在方法内部使用 this.sensors 可以使用 track 等方法

    var sa = require('./utils/sensorsdata.plugin.min.js');
    var App = sa.App;
    sa.setPara({
        name: 'sensors',
        server_url: '数据接收地址'
    })
    sa.init();
    App({
        onShow:function(){
            this.sensors.track('addToCart',{
                productName:'华为畅享 9S'
            });
        }
    })
```

  page 中使用自定义方法

```
    var app = getApp();
    var Page = app.sensors.Page;
    app.sensors.track('addToCart',{
        productName:'华为畅享 9S'
    });
```


---

# Agent Instructions: Querying This Documentation

If you need additional information that is not directly available in this page, you can query the documentation dynamically by asking a question.

Perform an HTTP GET request on the current page URL with the `ask` query parameter:

```
GET https://54td.gitbook.io/shence/technical_guide/detailed_guide/mp_sdk_summary/mp_sdk_plugin.md?ask=<question>
```

The question should be specific, self-contained, and written in natural language.
The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
