跳转至

UniApp 应用接入


前置条件

注意:若您开通了 RUM Headless 服务,前置条件已自动帮您配置完成,直接接入应用即可。

应用接入

当前 UniApp 版本支持 Android 和 iOS 平台。登录观测云控制台,进入用户访问监测页面,点击左上角 新建应用,即可开始创建一个新的应用。

安装

本地使用

源码地址https://github.com/GuanceCloud/datakit-uniapp-native-plugin

Demo 地址https://github.com/GuanceCloud/datakit-uniapp-native-plugin/Hbuilder_Example

下载的 SDK 包结构说明

|--datakit-uniapp-native-plugin
    |-- Hbuilder_Example                // GCUniPlugin 插件的示例工程
        |-- nativeplugins          // 示例工程的本地插件文件夹
            |-- GCUniPlugin           // ⭐️ GCUniPlugin 原生插件包 ⭐️
                |-- android              // 存放 android 插件所需要的依赖库及资源文件
                |-- ios                  // 存放 ios 插件所需要的依赖库及资源文件
                |-- package.json         // 插件配置文件
    |-- UniPlugin-Android           // 插件开发 Android 主工程 
    |-- UniPlugin-iOS                     // 插件开发 iOS 主工程 

GCUniPlugin 文件夹配置到您的 uni_app 项目的 “nativeplugins” 下,还需要在 manifest.json 文件的 “App原生插件配置” 项下点击“选择本地插件”,在列表中选择 GCUniPlugin 插件:

img

注意:保存后,需要提交云端打包,(制作 自定义基座 也属于云端打包)后插件才会生效。

更多详情,可参考:HBuilderX中使用本地插件自定义基座

市场插件方式

(未提供)

uni 小程序 SDK 安装

开发调试与 wgt 发布使用

  • 在 uni 小程序 SDK 开发调试时需要使用本地使用方法集成 GCUniPlugin

  • uni 小程序 SDK 制作成 wgt 包供宿主 App 使用时,宿主 App 中需要导入 GCUniPlugin 的依赖库(包含 Native SDK 库),并注册 GCUniPlugin Module

宿主 App 需要添加的操作:

iOS

  • 添加 GCUniPlugin 依赖库

    在 Xcode 项目左侧目录选中工程名,在 TARGETS -> Build Phases -> Link Binary With Libaries 中点击“+”按钮,在弹出的窗口中点击 Add Other -> Add Files...,然后打开 GCUniPlugin/ios/ 依赖库目录,选中目录中的 FTMobileSDK.xcframework 以及 Guance_UniPlugin_App.xcframework 单击 open 按钮将依赖库添加到工程中。

    当 SDK Version < 0.2.0 时:在 TARGETS -> General -> Frameworks,Libaries,and Embedded Content 中找到 FTMobileSDK.xcframework Embed 方式改为 Embed & sign

  • 注册 GCUniPlugin Module

    - (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {
    ....
      //  注册 GCUniPlugin module
    [WXSDKEngine registerModule:@"GCUniPlugin-MobileAgent" withClass:NSClassFromString(@"FTMobileUniModule")];
    [WXSDKEngine registerModule:@"GCUniPlugin-RUM" withClass:NSClassFromString(@"FTRUMModule")];
    [WXSDKEngine registerModule:@"GCUniPlugin-Logger" withClass:NSClassFromString(@"FTLogModule")];
    [WXSDKEngine registerModule:@"GCUniPlugin-Tracer" withClass:NSClassFromString(@"FTTracerModule")];  
      return YES;
    }

Android

  • 添加 GCUniPlugin 依赖库

  • 方式一:GCUniPlugin/android/ 文件夹中 ft-native-[version].aarft-sdk-[version].aargc-uniplugin-[last-version].aar 添加到项目的 libs 文件夹中,修改 build.gradle 文件添加依赖

  • 方式二: 使用 Gradle Maven 远程仓库的方式进行配置。这里配置方式可以参考 UniAndroid-Plugin 工程配置
  dependencies {
      implementation files('libs/ft-native-[version].aar')
      implementation files('libs/ft-sdk-[version].aar')
      implementation files('libs/gc-uniplugin-[last-version].aar')
      implementation 'com.google.code.gson:gson:2.8.5'
  }   
  • 注册 GCUniPlugin Module
  public class App extends Application {
      @Override
      public void onCreate() {
          super.onCreate();
          try {
            //  注册 GCUniPlugin module
              WXSDKEngine.registerModule("GCUniPlugin-Logger", FTLogModule.class);
              WXSDKEngine.registerModule("GCUniPlugin-RUM", FTRUMModule.class);
              WXSDKEngine.registerModule("GCUniPlugin-Tracer", FTTracerModule.class);
              WXSDKEngine.registerModule("GCUniPlugin-MobileAgent", FTSDKUniModule.class);
          } catch (Exception e) {
              e.printStackTrace();
          }
          ......
      }
  }

UniApp SDK 与 Native SDK 混合使用

  • 在上述添加 GCUniPlugin 依赖库操作时已将 Native SDK 添加至宿主项目中,因此可直接调用 Native SDK 方法

  • SDK 的初始化

    混合使用时,仅需在宿主 App 内初始化 Native SDK,在 uni 小程序中无需再进行初始化配置,可以直接调用 UniApp SDK 提供的方法。

    宿主 App 内 SDK 的初始方法请参考 iOS SDK 初始化配置Android SDK 初始化配置

    注意:请在加载 uni 小程序之前,宿主 App 完成 SDK 初始化,以确保在调用 SDK 的其他任何方法之前,SDK 已经完全准备就绪。

  • Android 集成额外配置:

    配置 Gradle Plugin ft-plugin ,采集 App 启动事件和网络请求数据,以及 Android Native 原生相关事件(页面跳转、点击事件、Native 网络请求、WebView 数据)。

SDK 初始化

基础配置

// 在 App.vue 配置
<script>
    var guanceModule = uni.requireNativePlugin("GCUniPlugin-MobileAgent");
    export default {
        onLaunch: function() {
            console.log('App Launch')
            guanceModule.sdkConfig({
                'datakitUrl': 'your datakitUrl',
                'debug': true,
                'env': 'common',
                'globalContext': {
                    'custom_key': 'custom value'
                }
            })
        },
        onShow: function() {
            console.log('App Show')
        },
        onHide: function() {
            console.log('App Hide')
        }
    }
</script>
<style>
</style>
参数名称 参数类型 必须 参数说明
datakitUrl string Datakit 访问地址,例子:http://10.0.0.1:9529,端口默认 9529,安装 SDK 设备需能访问这地址.注意:datakit 和 dataway 配置两者二选一
datawayUrl string 公网 Dataway 访问地址,例子:http://10.0.0.1:9528,端口默认 9528,安装 SDK 设备需能访问这地址.注意:datakit 和 dataway 配置两者二选一
clientToken string 认证 token,需要与 datawayUrl 同时使用
debug boolean 设置是否允许打印 Debug 日志,默认false
env string 环境,默认prod,任意字符,建议使用单个单词,例如 test
service string 设置所属业务或服务的名称 默认:df_rum_iosdf_rum_android
globalContext object 添加自定义标签
offlinePakcage boolean 仅 Android 支持,是否使用离线打包或 uni 小程序,默认为 false,详细说明见Android 云打包与离线打包区别
autoSync boolean 是否开启自动同步。默认 YES。当为 NO 时使用 flushSyncData 方法自行管理数据同步
syncPageSize number 设置同步请求条目数。范围 [5,)注意:请求条目数越大,代表数据同步占用更大的计算资源,默认为 10
syncSleepTime number 设置同步间歇时间。范围 [0,5000],默认不设置
enableDataIntegerCompatible boolean 需要与 web 数据共存情况下,建议开启。此配置用于处理 web 数据类型存储兼容问题 。
compressIntakeRequests boolean 对同步数据进行压缩,SDK 0.2.0 以上版本支持这个参数
enableLimitWithDbSize boolean 开启使用 DB 限制总缓存大小功能。
注意:开启之后 Log 配置 logCacheLimitCount 及 RUM 配置rumCacheLimitCount 将失效。SDK 0.2.0 以上版本支持该参数
dbCacheLimit number DB 缓存限制大小。范围 [30MB,),默认 100MB,单位 byte,SDK 0.2.0 以上版本支持该参数
dbDiscardStrategy string 设置数据库中数据丢弃规则。
丢弃策略:discard丢弃新数据(默认)、discardOldest丢弃旧数据。SDK 0.2.0 以上版本支持该参数

RUM 配置

var rum = uni.requireNativePlugin("GCUniPlugin-RUM");
rum.setConfig({
        'androidAppId':'YOUR_ANDROID_APP_ID',
                'iOSAppId':'YOUR_IOS_APP_ID',
                'errorMonitorType':'all', // or 'errorMonitorType':['battery','memory']
                'deviceMonitorType':['cpu','memory']// or  'deviceMonitorType':'all'
            })
参数名称 参数类型 必须 说明
androidAppId string appId,监测中申请
iOSAppId string appId,监测中申请
samplerate number 采样率,取值范围 [0,1],0 表示不采集,1 表示全采集,默认值为 1。作用域为同一 session_id 下所有 View,Action,LongTask,Error 数据
enableNativeUserAction boolean 是否进行 Native Action 追踪,Button 点击事件,纯 uni-app 应用建议关闭,默认为 false,Android 云打包不支持
enableNativeUserResource boolean 是否进行 Native Resource 自动追踪,默认为 false ,Android 云打包不支持。由于 uniapp 的网络请求在 iOS 端是使用系统 API 实现的,所以开启后,iOS 所有 resource 数据能够一并采集,此时请屏蔽 iOS 端的手动采集,以防止数据重复采集。
enableNativeUserView boolean 是否进行 Native View 自动追踪,纯 uni-app 应用建议关闭,,默认为 false
errorMonitorType string/array 错误监控补充类型:allbatterymemorycpu
deviceMonitorType string/array 页面监控补充类型: allbattery(仅Android支持)、 memorycpufps
detectFrequency string 页面监控频率:normal(默认)、 frequentrare
globalContext object 自定义全局参数,特殊 key :track_id (用于追踪功能)
enableResourceHostIP boolean 是否采集请求目标域名地址的 IP。作用域:只影响 enableNativeUserResource 为 true 的默认采集。iOS:>= iOS 13 下支持。Android:单个 Okhttp 对相同域名存在 IP 缓存机制,相同 OkhttpClient,在连接服务端 IP 不发生变化的前提下,只会生成一次。
enableTrackNativeCrash boolean 是否采集 Native Error
enableTrackNativeAppANR boolean 是否采集 Native ANR
enableTrackNativeFreeze boolean 是否采集 Native Freeze
nativeFreezeDurationMs number 设置采集 Native Freeze卡顿的阈值,取值范围 [100,),单位毫秒。iOS 默认 250ms,Android 默认 1000ms
rumDiscardStrategy string 丢弃策略:discard丢弃新数据(默认)、discardOldest丢弃旧数据
rumCacheLimitCount number 本地缓存最大 RUM 条目数量限制 [10000,),默认 100_000

Log 配置

var logger = uni.requireNativePlugin("GCUniPlugin-Logger");
logger.setConfig({
  'enableLinkRumData':true,
  'enableCustomLog':true,
  'discardStrategy':'discardOldest'
})
参数名称 参数类型 必须 参数说明
samplerate number 采样率,取值范围 [0,1],0 表示不采集,1 表示全采集,默认值为 1。
enableLinkRumData boolean 是否与 RUM 关联
enableCustomLog boolean 是否开启自定义日志
discardStrategy string 日志丢弃策略:discard丢弃新数据(默认)、discardOldest丢弃旧数据
logLevelFilters array 日志等级过滤,数组中需填写 日志等级info提示、warning警告、error错误、criticalok恢复
globalContext object 自定义全局参数
logCacheLimitCount number 本地缓存最大日志条目数量限制 [1000,),日志越大,代表磁盘缓存压力越大,默认 5000

Trace 配置

var tracer = uni.requireNativePlugin("GCUniPlugin-Tracer");
tracer.setConfig({
                'traceType': 'ddTrace'
            })
参数名称 参数类型 必须 参数说明
samplerate number 采样率,取值范围 [0,1],0 表示不采集,1 表示全采集,默认值为 1。
traceType string 链路类型:ddTrace(默认)、zipkinMultiHeaderzipkinSingleHeadertraceparentskywalkingjaeger
enableLinkRUMData boolean 是否与 RUM 数据关联,默认false
enableNativeAutoTrace boolean 是否开启原生网络自动追踪 iOS NSURLSession ,Android OKhttp,默认false, Android 云打包不支持。 由于 uniapp 的网络请求在 iOS 端是使用系统 API 实现的,所以开启后,iOS 端 uniapp 发起的网络请求可以自动追踪,此时请屏蔽 iOS 端的手动链路追踪,以防止链路与 RUM 数据关联错误。

RUM 用户数据追踪

var rum = uni.requireNativePlugin("GCUniPlugin-RUM");

Action

API - startAction

启动 RUM Action。

RUM 会绑定该 Action 可能触发的 Resource、Error、LongTask 事件。避免在 0.1 s 内多次添加,同一个 View 在同一时间只会关联一个 Action,在上一个 Action 未结束时,新增的 Action 会被丢弃。与 addAction 方法添加 Action 互不影响.

rum.startAction({
                    'actionName': 'action name',
                    'actionType': 'action type'
                })
参数名称 参数类型 必须 参数说明
actionName string 事件名称
actionType string 事件类型
property object 事件上下文(可选)

API - addAction

添加 Action 事件。无 duration,无丢弃逻辑。

rum.addAction({
                    'actionName': 'action name',
                    'actionType': 'action type'
                })
参数名称 参数类型 必须 参数说明
actionName string 事件名称
actionType string 事件类型
property object 事件上下文(可选)

View

  • 自动采集
// 自动采集,可参考 SDK 包内 GCUniPlugin 插件的示例工程
// step 1. 在 SDK 包内找到 GCWatchRouter.js、GCPageMixin.js 文件,添加到您的工程
// step 2. 在 App.vue 添加 Router 监控,如下:
<script>
    import WatchRouter from '@/GCWatchRouter.js'
    export default {
    mixins:[WatchRouter],
    }
</script>
// step 3. 在应用显示的第一个 page 页面添加 pageMixin 如下
<script>
    import GCPageMixin from '../../GCPageMixin.js';
    export default {
        data() {
            return {}
        },
        mixins:[GCPageMixin],
    }
</script>
  • 手动采集
// 手动采集 View 的生命周期
// step 1(可选)
rum.onCreateView({
                    'viewName': 'Current Page Name',
                    'loadTime': 100000000,
                })
// step 2
rum.startView('Current Page Name')
// step 3  
rum.stopView()         

API - onCreateView

创建页面时长记录

参数名称 参数类型 必须 参数说明
viewName string 页面名称
loadTime number 页面加载时间(纳秒级别时间戳)

API - startView

进入页面

参数名称 参数类型 必须 参数说明
viewName string 页面名称
property object 事件上下文(可选)

API - stopView

离开页面

参数名称 参数类型 必须 参数说明
property object 事件上下文(可选)

Error

  • 自动采集
/// 使用 uniapp 错误监听函数 发生脚本错误或 API 调用报错时触发
<script>
  var rum = uni.requireNativePlugin("GCUniPlugin-MobileAgent");
  var appState = 'startup';
    // 只能在App.vue里监听
    export default {
        onLaunch: function() {
            console.log('App Launch')
        },
        onShow: function() {
      appState = 'run'
            console.log('App Show')
        },
        onHide: function() {
            console.log('App Hide')
        },
    onError:function(err){   
            if (err instanceof Error){
                console.log('Error name:', err.name);
                console.log('Error message:', err.message);
                console.log('Error stack:',err.stack);
                rum.addError({
                    'message': err.message,
                    'stack': err.stack,
          'state': appState,
                })
            }else if(err instanceof String){
                console.log('Error:', err);
                rum.addError({
                    'message': err,
                    'stack': err,
          'state': appState,
                })
            }
    }
</script>
  • 手动采集
// 手动添加
rum.addError({
                    'message': 'Error message',
                    'stack': 'Error stack',
                })

API - addError

添加 Error 事件

参数名称 参数类型 必须 参数说明
message string 错误信息
stack string 堆栈信息
state string App 运行状态 (unknownstartuprun)
type string 错误类型,默认 uniapp_crash
property object 事件上下文(可选)

Resource

SDK 提供了一个示例方法 gc.request。该方法封装自 uni.request 的网络请求方法,您可以直接将 uni.request 方法替换为 gc.request 进行网络请求。

额外参数:filterPlatform

  • 功能filterPlatform 参数用于指定哪些平台的资源数据不应被采集。
  • 使用场景:当启用 enableNativeUserResource 功能时,uniapp 在 iOS 端会自动采集通过系统 API 发起的网络请求数据。为了避免数据重复采集,您可以在使用 gc.request 时,通过添加 filterPlatform: ["ios"]参数来屏蔽在 iOS 平台上的手动数据采集。

gc.request 实现

// GCRequest.js
var rum = uni.requireNativePlugin("GCUniPlugin-RUM");
var tracer = uni.requireNativePlugin("GCUniPlugin-Tracer");
// 获取平台信息
const platform = uni.getSystemInfoSync().platform;
export default {
    getUUID() {
        return 'xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx'.replace(/[xy]/g, function(c) {
            var r = Math.random() * 16 | 0,
                v = c == 'x' ? r : (r & 0x3 | 0x8);
            return v.toString(16);
        });
    },
    isEmpty(value) {
        return value === null || value === undefined;
    },
    /// 通过 filterPlatform 参数进行平台过滤,当开启 `enableNativeUserResource` 时,
    //  由于 uniapp 的网络请求在 iOS 端是使用系统 API 实现的,iOS 所有 resource 数据能够一并采集,
    /// 此时请屏蔽 iOS 端 uniapp 中手动采集,以防止数据重复采集。
    /// 例:["ios"], iOS 端设置不进行 trace 追踪与 RUM 采集。
    request(options){ 
        let key = this.getUUID();
        var filter;
        if(this.isEmpty(options.filterPlatform)){
            filter = false
        }else{
            filter = options.filterPlatform.includes(platform);
        }
        var traceHeader = {}
        if(filter == false){
          // trace 关联 RUM
          var traceHeader = tracer.getTraceHeader({
            'key': key,
            'url': options.url,
          })
        }
        traceHeader = Object.assign({},traceHeader, options.header)
        rum.startResource({
            'key':key,
        });
        var responseHeader;
        var responseBody;
        var resourceStatus;
        return uni.request({
            url: options.url,
            method: options.method,
            header: traceHeader,
            data:options.data,
            timeout:options.timeout,
            success: (res) => {
                if(filter){
                  responseHeader = res.header;
                  responseBody = res.data;
                  resourceStatus = res.statusCode;
                }
                if(this.isEmpty(options.success)){
                    options.success(res);
                }
            },
            fail:(err) => {
                if(!filter){
                  responseBody = err.errMsg;
                }
                if(this.isEmpty(options.fail)){
                    options.fail(err);
                }
            },
            complete() {
                if(!filter){
                  rum.stopResource({
                    'key':key,
                  })
                  rum.addResource({
                    'key': key,
                    'content': {
                        'url': options.url,
                        'httpMethod': options.method,
                        'requestHeader': traceHeader,
                        'responseHeader': responseHeader,
                        'responseBody': responseBody,
                        'resourceStatus': resourceStatus,
                    }
                  })
                }
                if(this.isEmpty(options.complete)){
                    options.complete();
                }
            }
        });
    }
} 

使用示例

import gc from './GCRequest.js';
gc.request({
                url: requestUrl,
                method: method,
                header: header,
                filterPlatform:["ios"],
                timeout:30000,
                success(res)  {
                    console.log('success:' + JSON.stringify(res))
                },
                fail(err) {
                    console.log('fail:' + JSON.stringify(err))
                },
                complete() {
                    console.log('complete:' + JSON.stringify(err))
                }
            });

API - startResource

HTTP 请求开始

参数名称 参数类型 必须 参数说明
key string 请求唯一标识
property object 事件上下文(可选)

API - stopResource

HTTP 请求结束

参数名称 参数类型 必须 参数说明
key string 请求唯一标识
property object 事件上下文(可选)

API - addResource

参数名称 参数类型 必须 参数说明
key string 请求唯一标识
content content object 请求相关数据

content object

prototype 参数类型 参数说明
url string 请求 url
httpMethod string http 方法
requestHeader object 请求头
responseHeader object 响应头
responseBody string 响应结果
resourceStatus string 请求结果状态码

Logger 日志打印

var logger = uni.requireNativePlugin("GCUniPlugin-Logger");
logger.logging({
                    'content':`Log content`,
                    'status':status
                })

API - logging

参数名称 参数类型 必须 参数说明
content string 日志内容,可为json字符串
status string 日志等级
property object 事件上下文(可选)

日志等级

字符串 含义
info 提示
warning 警告
error 错误
critical 严重
ok 恢复

Tracer 网络链路追踪

//示例使用 uni.request 进行网络请求
var tracer = uni.requireNativePlugin("GCUniPlugin-Tracer");
let key = Utils.getUUID();//可参考 example utils.js
var header = tracer.getTraceHeader({
                    'key': key,
                    'url': requestUrl,
                })
uni.request({
          url: requestUrl,
          header: header,
          success() {
            console.log('success');
          },
          complete() {
            console.log('complete');
          }
        });

API - getTraceHeader

获取 trace 需要添加的请求头,获取后添加到 HTTP 请求的请求头中。

参数名称 参数类型 必须 参数说明
key string 请求唯一标识
url string 请求 URL

返回值类型: object

用户信息绑定与解绑

var guanceModule = uni.requireNativePlugin("GCUniPlugin-MobileAgent");

guanceModule.bindRUMUserData({
                'userId':'Test userId',
                'userName':'Test name',
                'userEmail':'test@123.com',
                'extra':{
                    'age':'20'
                }
            })

guanceModule.unbindRUMUserData()

API - bindRUMUserData

绑定用户信息:

参数名称 参数类型 必须 参数说明
userId string 用户Id
userName string 用户名称
userEmail string 用户邮箱
extra object 用户的额外信息

API - unbindRUMUserData

解绑当前用户。

关闭 SDK

var guanceModule = uni.requireNativePlugin("GCUniPlugin-MobileAgent");
guanceModule.shutDown()

API - shutDown

关闭 SDK。

清理 SDK 缓存数据

var guanceModule = uni.requireNativePlugin("GCUniPlugin-MobileAgent");
guanceModule.clearAllData()

API - clearAllData

清除所有尚未上传至服务器的数据。

主动同步数据

var guanceModule = uni.requireNativePlugin("GCUniPlugin-MobileAgent");
guanceModule.flushSyncData()

API - flushSyncData

当配置 guanceModule.sdkConfigtrue 时,无需做额外的操作,SDK 会进行自动同步。

当配置 guanceModule.sdkConfigfalse 时,需要主动触发数据同步方法,进行数据同步。

添加自定义标签

var guanceModule = uni.requireNativePlugin("GCUniPlugin-MobileAgent");
ftMobileSDK.appendGlobalContext({
                  'ft_global_key':'ft_global_value'
              })
ftMobileSDK.appendRUMGlobalContext({
                  'ft_global_rum_key':'ft_global_rum_value'
              })
ftMobileSDK.appendLogGlobalContext({
                  'ft_global_log_key':'ft_global_log_value'
             })               

API - appendGlobalContext

添加自定义全局参数。作用于 RUM、Log 数据

参数名称 参数类型 必须 参数说明
object 自定义全局参数

API - appendRUMGlobalContext

添加自定义 RUM 全局参数。作用于 RUM 数据

参数名称 参数类型 必须 参数说明
object 自定义全局 RUM 参数

API - appendLogGlobalContext

添加自定义 RUM、Log 全局参数。作用于 Log 数据

参数名称 参数类型 必须 参数说明
object 自定义全局 Log 参数

常见问题

插件开发 iOS 主工程 UniPlugin-iOS 使用

下载 UniApp 离线开发 SDK

根据 uni-app 开发工具 HBuilderX 的版本号,下载开发插件需要的 SDK包

SDK 包结构说明

|--iOSSDK   
    |-- HBuilder-Hello              // uni-app 离线打包工程
    |-- HBuilder-uniPluginDemo      // uni-app 插件开发主工程 (本文档需要使用的工程)
    |-- SDK                         // 依赖库及依赖资源文件

将依赖库及依赖资源文件 SDK 文件夹拖到 UniPlugin-iOS 文件夹内,拖拽后目录结构应如下。

|-- UniPlugin-iOS
    |-- HBuilder-uniPluginDemo      // uni-app 插件开发主工程 (本文档需要使用的工程)
    |-- SDK                         // 依赖库及依赖资源文件

更多详情,可参考 iOS 插件开发环境配置

工程配置

1.Architectures 设置

因为 Xcode 12 提供的模拟器支持 arm64 架构,uni_app 提供的 framework 支持的是 arm64 的真机,x86_64 的模拟器。所以

Excluded Architectures 设置 Any iOS Simulator SDK : arm64

2.Other Linker Flags

$(inherited) -ObjC -framework "FTMobileSDK" -framework "Guance_UniPlugin_App"

3.Framework Search Paths

$(inherited)
"${PODS_CONFIGURATION_BUILD_DIR}/FTMobileSDK"
"${PODS_CONFIGURATION_BUILD_DIR}/Guance-UniPlugin-App"
$(DEVELOPER_FRAMEWORKS_DIR)
$(PROJECT_DIR)/../SDK/libs
$(PROJECT_DIR)

插件开发 Android 主工程 UniPlugin-Android 使用

工程配置

详细依赖配置,可参考 Demo。更多 Gradle 扩展参数配置请参考 Android SDK

|-- UniPlugin-Android
    |-- app
        |--build.gradle
        // ---> 配置 ft-plugin
        // apply:'ft-plugin'

    |-- uniplugin_module
        |-- src
            |-- main
                |-- java
                    |-- com.ft.sdk.uniapp
        |-- build.gradle 
        //---> 配置依赖 dependencies
        //implementation 'com.cloudcare.ft.mobile.sdk.tracker.agent:ft-sdk:xxxx'
        //implementation 'com.google.code.gson:gson:xxxx'
        //implementation 'com.cloudcare.ft.mobile.sdk.tracker.agent:ft-native:xxxx'

    |-- build.gradle
        //---> 配置 repo
        //  maven {
        //          url 'https://mvnrepo.jiagouyun.com/repository/maven-releases'
        //  }
        //
        //--> 配置 buildScrpit
        //  classpath 'com.cloudcare.ft.mobile.sdk.tracker.plugin:ft-plugin:xxxx'

Android 云打包与离线打包区别

Android 云打包与离线打包使用了两种不同的集成逻辑。离线打包集成方式与观测云 Android SDK 集成方式相同,使用 Android Studio Gradle Plugin 的方式,云打包无法使用 Android Studio Gradle Plugin ,所以只能通过观测云 UniApp Native Plugin 中内部代码实现部分功能。所以离线打包版本配置可选项要比云打包版本更多,SDK 配置中 offlinePakcage参数就是为了区分两种情况。

其他

文档评价

文档内容是否对您有帮助? ×