# 快速上手

# TmsCore

小程序日常使用的工具函数

# 安装

npm install @tmsfe/tms-core

# 初始化

import core from '@tmsfe/tms-core';

// 初始化core                                      // 初始化操作会在小程序app.js进行,如果只开发”小程序模块无需再次进行初始化“
core.init({
  appVersion: '2022.35.1',                        // 小程序本次发版的版本号
  wxAppId: 'xxx',                                 // appId
  client: 'sinan',                                // 小程序名
  appEnv: 'production',                           //环境名称 production、development、test、predist
  appPagePaths: [],                               // 小程序包含的所有页面路径
  homePage: { path: "/page/**", isTab: false },   // 首页的相关配置
  cloudEnvId: "xxx",                              // 云函数的环境id
  defaultHost: "tim.map.qq.com",                  // 小程序请求调用接口的域名,所有请求都会走腾讯出行网关服务,腾讯出行网关在转发到相关服务
});

app.tms = core                                    // core的所有方法已经在”app.js“挂在到了app上,开发”小程序模块时,只需从app获取即可,无需再次引入“

# 发起请求示例

  const { tms } = getApp({ allowDefault: true });                  // 从app上获取tmscore
  const request = tms.createRequest({ withAuth: true });

  request.get('/api/list', {carId: '112222'}).then(res => res);    // 接口请求在初始化时已经传入腾讯出行网关域名,接口请求无需再次添加域名

# 埋点示例

const { tms } = getApp({ allowDefault: true });
const reporter = tms.getReporter();

reporter.report2('user_security_level', {}, {}); // 参数1:埋点唯一标志; 参数2:埋点属性(会埋在埋点31个字段) 参数3: 埋点属性(会埋在埋点32个字段) 依次类推
  
reporter.fastReport2('user_security_level', {}, {}); // 参数见上,埋点需要立即上报(fastReport2()上报时携带的"省"、"市"等需要异步请求的基础字段会从缓存中读取,如果无缓存则为空,report2()则一定会携带这些字段)

# 打印日志示例

const { tms } = getApp({ allowDefault: true });
const logger = tms.getRealtimeLogManager(); // 实时日志管理器实例,该对象提供的方法同wx.getRealtimeLogManager()提供的方法
                                            // 不需要用户主动反馈只要记录了在mp后台即可查看
logger.info(1, 'str', { a: 1 }, ...); 
logger.warn(1, 'str', { a: 1 }, ...);
logger.error(1, 'str', { a: 1 }, ...);


const logger =tms.getLogManager();  // 获取日志管理器对象,该对象提供的方法同wx.getLogManager()提供的方法,用户主动反馈后在mp后台方可下载
logger.log(1, 'str', { a: 1 }, ...); 
logger.info(1, 'str', { a: 1 }, ...);
logger.debug(1, 'str', { a: 1 }, ...);
logger.awrn(1, 'str', { a: 1 }, ...);

# 获取用户位置示例

const app = getApp({ allowDefault: true });
const locationManager = app.tms.getLocationManager(); // 获取位置管理器
// 参数1-showModalWhenCloseAuth: 获取位置时,如果用户关闭了位置授权,是否弹窗提示用户打开授权
// 参数2-type: 坐标类型
// 参数3-content: 弹窗内容
// 参数4-getPoi: 是否获取详细poi信息, 0 - 不获取(不返回poi字段), 1 - 获取(返回poi字段)
const loc = await Loc.getLocationDetail(false, 'gcj02', '', 1); /
// loc:
{
  cityName: '北京市',
  cityCode: '100100',
  province: '北京市',
  latitude: 325.255333,
  longitude: 116.2545454,
  adCode: 1212144,
  poi: {
    id: '1114545554511',
    title: '腾讯北京总部大厦',
    address : '北京市海淀区东北旺西路',
  }
}

# TmsBridge

小程序提供给插件的扩展(Object 实例)。在插件内通过 requireMiniProgram() 引入

# 安装

npm install @tmsfe/tms-bridge

# 小程序与插件是如何通信的

小程序在引入插件的时候,会将tmsBridge注入给插件,插件内部通过requireMiniProgram()引入小程序传入的插件。

  • 小程序引入插件,会注入index.js
{
  "myPlugin": {
    "version": "1.0.0",
    "provider": "wxidxxxxxxxxxxxxxxxx",
    "export": "index.js"
  }
}

# 小程序注入插件index.js源码示例

import TMSBridge from '@tmsfe/tms-bridge'; // 引入tmsBridge


TMSBridge.navPageMap  // TMSBridge注册页面路径,只有在这里注册的页面,插件内部才可以使用跳转。
  .set('SINAN-WEBVIEW-PATH', '/modules/x/webcontainer/webcontainer')
  .set('SINAN-MPVIEW-PATH', '/modules/x/mpcontainer/mpcontainer')
  .set('SINAN-ADDRESS-PATH', '/modules/me/pages/chooseaddress/chooseaddress')
  .set('SINAN-PASSENGER-PATH', '/modules/me/pages/contacts/contacts')
  .set('launch', '/launch/launch');
const tMSBridge = new TMSBridge({ component: true });

module.exports = {
  TMSBridge: tMSBridge
};

# 插件内部使用tmsBridge示例

if (!this.TMSBridge) {
  const { TMSBridge } = requireMiniProgram(); // 引入小程序扩展能力
  this.TMSBridge = TMSBridge.bind(wx);        // 绑定当前调用域
}
this.TMSBridge.navigateToMP({                 // TMSBridge跳转至小程序页面的api
  page: 'launch',                             // 在上文index.js注册页面的key
  query: 'target=index&from=page1'
});
Last Updated: 4/25/2023, 19:37:42