diff --git a/Assets/Plugins.meta b/Assets/Plugins.meta new file mode 100644 index 0000000..9531fe7 --- /dev/null +++ b/Assets/Plugins.meta @@ -0,0 +1,9 @@ +fileFormatVersion: 2 +guid: 36ef74cfcb5f6e644b5f15323d9b3bce +folderAsset: yes +timeCreated: 1598326833 +licenseType: Free +DefaultImporter: + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Plugins/Android.meta b/Assets/Plugins/Android.meta new file mode 100644 index 0000000..66c49d6 --- /dev/null +++ b/Assets/Plugins/Android.meta @@ -0,0 +1,9 @@ +fileFormatVersion: 2 +guid: 8bae2a533e394e64384f7be9ff611e2c +folderAsset: yes +timeCreated: 1598326833 +licenseType: Free +DefaultImporter: + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Plugins/iOS.meta b/Assets/Plugins/iOS.meta new file mode 100644 index 0000000..bc358f0 --- /dev/null +++ b/Assets/Plugins/iOS.meta @@ -0,0 +1,9 @@ +fileFormatVersion: 2 +guid: 8aa96f831ac8e3449b64c0744c0e3c99 +folderAsset: yes +timeCreated: 1598326833 +licenseType: Free +DefaultImporter: + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Plugins/iOS/SensorsAnalyticsSDK.framework.meta b/Assets/Plugins/iOS/SensorsAnalyticsSDK.framework.meta new file mode 100644 index 0000000..ce3e49e --- /dev/null +++ b/Assets/Plugins/iOS/SensorsAnalyticsSDK.framework.meta @@ -0,0 +1,25 @@ +fileFormatVersion: 2 +guid: b68bf6e7c1944f2438fb4adcd7398678 +folderAsset: yes +timeCreated: 1598326833 +licenseType: Free +PluginImporter: + serializedVersion: 1 + iconMap: {} + executionOrder: {} + isPreloaded: 0 + isOverridable: 0 + platformData: + Any: + enabled: 0 + settings: {} + Editor: + enabled: 0 + settings: + DefaultValueInitialized: true + iOS: + enabled: 1 + settings: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Plugins/iOS/SensorsAnalyticsSDK.framework/Headers.meta b/Assets/Plugins/iOS/SensorsAnalyticsSDK.framework/Headers.meta new file mode 100644 index 0000000..3777d39 --- /dev/null +++ b/Assets/Plugins/iOS/SensorsAnalyticsSDK.framework/Headers.meta @@ -0,0 +1,7 @@ +fileFormatVersion: 2 +guid: fc12eceb8b047464faf746a2aa62f84d +folderAsset: yes +DefaultImporter: + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Plugins/iOS/SensorsAnalyticsSDK.framework/Headers/SAConfigOptions.h b/Assets/Plugins/iOS/SensorsAnalyticsSDK.framework/Headers/SAConfigOptions.h new file mode 100644 index 0000000..a23669d --- /dev/null +++ b/Assets/Plugins/iOS/SensorsAnalyticsSDK.framework/Headers/SAConfigOptions.h @@ -0,0 +1,163 @@ +// +// SAConfigOptions.h +// SensorsAnalyticsSDK +// +// Created by 储强盛 on 2019/4/8. +// Copyright © 2015-2020 Sensors Data Co., Ltd. All rights reserved. +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. +// + +#import +#import "SAConstants.h" + +@class SASecretKey; + +NS_ASSUME_NONNULL_BEGIN + +/** + * @class + * SensorsAnalyticsSDK 初始化配置 + */ +@interface SAConfigOptions : NSObject + +/** + 指定初始化方法,设置 serverURL + @param serverURL 数据接收地址 + @return 配置对象 + */ +- (instancetype)initWithServerURL:(nonnull NSString *)serverURL launchOptions:(nullable NSDictionary *)launchOptions NS_DESIGNATED_INITIALIZER; + +/// 禁用 init 初始化 +- (instancetype)init NS_UNAVAILABLE; + +/// 禁用 new 初始化 ++ (instancetype)new NS_UNAVAILABLE; + +/** + * @property + * + * @abstract + * 打开 SDK 自动追踪,默认只追踪 App 启动 / 关闭、进入页面、元素点击 + * + * @discussion + * 该功能自动追踪 App 的一些行为,例如 SDK 初始化、App 启动 / 关闭、进入页面 等等,具体信息请参考文档: + * https://sensorsdata.cn/manual/ios_sdk.html + * 该功能默认关闭 + */ +@property (nonatomic) SensorsAnalyticsAutoTrackEventType autoTrackEventType; + +/// 是否开启 WKWebView 的 H5 打通功能,该功能默认是关闭的 +@property (nonatomic) BOOL enableJavaScriptBridge; + +/// 是否自动收集 App Crash 日志,该功能默认是关闭的 +@property (nonatomic) BOOL enableTrackAppCrash; + +/** + * @property + * + * @abstract + * 两次数据发送的最小时间间隔,单位毫秒 + * + * @discussion + * 默认值为 15 * 1000 毫秒, 在每次调用 track、trackSignUp 以及 profileSet 等接口的时候, + * 都会检查如下条件,以判断是否向服务器上传数据: + * 1. 是否 WIFI/3G/4G/5G 网络 + * 2. 是否满足以下数据发送条件之一: + * 1) 与上次发送的时间间隔是否大于 flushInterval + * 2) 本地缓存日志数目是否达到 flushBulkSize + * 如果满足这两个条件之一,则向服务器发送一次数据;如果都不满足,则把数据加入到队列中,等待下次检查时把整个队列的内容一并发送。 + * 需要注意的是,为了避免占用过多存储,队列最多只缓存10000条数据。 + */ +@property (nonatomic) NSInteger flushInterval; + +/** + * @property + * + * @abstract + * 本地缓存的最大事件数目,当累积日志量达到阈值时发送数据 + * + * @discussion + * 默认值为 100,在每次调用 track、trackSignUp 以及 profileSet 等接口的时候,都会检查如下条件,以判断是否向服务器上传数据: + * 1. 是否 WIFI/3G/4G/5G 网络 + * 2. 是否满足以下数据发送条件之一: + * 1) 与上次发送的时间间隔是否大于 flushInterval + * 2) 本地缓存日志数目是否达到 flushBulkSize + * 如果同时满足这两个条件,则向服务器发送一次数据;如果不满足,则把数据加入到队列中,等待下次检查时把整个队列的内容一并发送。 + * 需要注意的是,为了避免占用过多存储,队列最多只缓存 10000 条数据。 + */ +@property (nonatomic) NSInteger flushBulkSize; + +/// 设置本地缓存最多事件条数,默认为 10000 条事件 +@property (nonatomic) NSInteger maxCacheSize; + +/// 开启 log 打印 +@property (nonatomic, assign) BOOL enableLog; + +/// 开启点击图 +@property (nonatomic, assign) BOOL enableHeatMap; + +/// 开启可视化全埋点 +@property (nonatomic, assign) BOOL enableVisualizedAutoTrack; +#pragma mark - 请求远程配置策略 +/// 请求远程配置地址,默认从 serverURL 解析 +@property (nonatomic, copy) NSString *remoteConfigURL; + +/// 禁用随机时间请求远程配置 +@property (nonatomic, assign) BOOL disableRandomTimeRequestRemoteConfig; + +/// 最小间隔时长,单位:小时,默认 24 +@property (nonatomic, assign) NSInteger minRequestHourInterval; + +/// 最大间隔时长,单位:小时,默认 48 +@property (nonatomic, assign) NSInteger maxRequestHourInterval; + +/// DeepLink 中解析出来的参数是否需要保存到本地 +@property (nonatomic, assign) BOOL enableSaveDeepLinkInfo; + +/// DeepLink 中用户自定义来源渠道属性 key 值,可传多个。 +@property (nonatomic, copy) NSArray *sourceChannels; + +/// 是否在手动埋点事件中自动添加渠道匹配信息 +@property (nonatomic, assign) BOOL enableAutoAddChannelCallbackEvent; + +/// 当 App 进入后台时,是否执行 flush 将数据发送到 SensrosAnalytics,默认为 YES +@property (nonatomic, assign) BOOL flushBeforeEnterBackground; + +/// 是否开启加密 +@property (nonatomic, assign) BOOL enableEncrypt; + +/// 存储公钥的回调 +@property (nonatomic, copy) void (^saveSecretKey)(SASecretKey * _Nonnull secretKey); + +/// 获取公钥的回调 +@property (nonatomic, copy) SASecretKey * _Nonnull (^loadSecretKey)(void); + +/// 是否开启多渠道匹配,开启后调用 profile_set,不开启则调用 profile_set_once +@property (nonatomic, assign) BOOL enableMultipleChannelMatch; + +@end + + +/// RSA 公钥秘钥信息 +@interface SASecretKey : NSObject + +/// 秘钥版本 +@property(nonatomic, assign) NSInteger version; + +/// 秘钥值 +@property(nonatomic, copy) NSString *key; + +@end + +NS_ASSUME_NONNULL_END diff --git a/Assets/Plugins/iOS/SensorsAnalyticsSDK.framework/Headers/SAConfigOptions.h.meta b/Assets/Plugins/iOS/SensorsAnalyticsSDK.framework/Headers/SAConfigOptions.h.meta new file mode 100644 index 0000000..136d8e3 --- /dev/null +++ b/Assets/Plugins/iOS/SensorsAnalyticsSDK.framework/Headers/SAConfigOptions.h.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: a1d3c2723aec04579bdcabba085ce30e +timeCreated: 1606819380 +licenseType: Free +DefaultImporter: + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Plugins/iOS/SensorsAnalyticsSDK.framework/Headers/SAConstants.h b/Assets/Plugins/iOS/SensorsAnalyticsSDK.framework/Headers/SAConstants.h new file mode 100644 index 0000000..ef23238 --- /dev/null +++ b/Assets/Plugins/iOS/SensorsAnalyticsSDK.framework/Headers/SAConstants.h @@ -0,0 +1,106 @@ +// +// SAConstants.h +// SensorsAnalyticsSDK +// +// Created by 向作为 on 2018/8/9. +// Copyright © 2015-2020 Sensors Data Co., Ltd. All rights reserved. +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. +// + +#import + + +#pragma mark - typedef +/** + * @abstract + * Debug 模式,用于检验数据导入是否正确。该模式下,事件会逐条实时发送到 SensorsAnalytics,并根据返回值检查 + * 数据导入是否正确。 + * + * @discussion + * Debug 模式的具体使用方式,请参考: + * http://www.sensorsdata.cn/manual/debug_mode.html + * + * Debug模式有三种选项: + * SensorsAnalyticsDebugOff - 关闭 DEBUG 模式 + * SensorsAnalyticsDebugOnly - 打开 DEBUG 模式,但该模式下发送的数据仅用于调试,不进行数据导入 + * SensorsAnalyticsDebugAndTrack - 打开 DEBUG 模式,并将数据导入到 SensorsAnalytics 中 + */ +typedef NS_ENUM(NSInteger, SensorsAnalyticsDebugMode) { + SensorsAnalyticsDebugOff, + SensorsAnalyticsDebugOnly, + SensorsAnalyticsDebugAndTrack, +}; + +/** + * @abstract + * TrackTimer 接口的时间单位。调用该接口时,传入时间单位,可以设置 event_duration 属性的时间单位。 + * + * @discuss + * 时间单位有以下选项: + * SensorsAnalyticsTimeUnitMilliseconds - 毫秒 + * SensorsAnalyticsTimeUnitSeconds - 秒 + * SensorsAnalyticsTimeUnitMinutes - 分钟 + * SensorsAnalyticsTimeUnitHours - 小时 + */ +typedef NS_ENUM(NSInteger, SensorsAnalyticsTimeUnit) { + SensorsAnalyticsTimeUnitMilliseconds, + SensorsAnalyticsTimeUnitSeconds, + SensorsAnalyticsTimeUnitMinutes, + SensorsAnalyticsTimeUnitHours +}; + + +/** + * @abstract + * AutoTrack 中的事件类型 + * + * @discussion + * SensorsAnalyticsEventTypeAppStart - $AppStart + * SensorsAnalyticsEventTypeAppEnd - $AppEnd + * SensorsAnalyticsEventTypeAppClick - $AppClick + * SensorsAnalyticsEventTypeAppViewScreen - $AppViewScreen + */ +typedef NS_OPTIONS(NSInteger, SensorsAnalyticsAutoTrackEventType) { + SensorsAnalyticsEventTypeNone = 0, + SensorsAnalyticsEventTypeAppStart = 1 << 0, + SensorsAnalyticsEventTypeAppEnd = 1 << 1, + SensorsAnalyticsEventTypeAppClick = 1 << 2, + SensorsAnalyticsEventTypeAppViewScreen = 1 << 3, +}; + +/** + * @abstract + * 网络类型 + * + * @discussion + * SensorsAnalyticsNetworkTypeNONE - NULL + * SensorsAnalyticsNetworkType2G - 2G + * SensorsAnalyticsNetworkType3G - 3G + * SensorsAnalyticsNetworkType4G - 4G + * SensorsAnalyticsNetworkTypeWIFI - WIFI + * SensorsAnalyticsNetworkTypeALL - ALL + * SensorsAnalyticsNetworkType5G - 5G + */ +typedef NS_OPTIONS(NSInteger, SensorsAnalyticsNetworkType) { + SensorsAnalyticsNetworkTypeNONE = 0, + SensorsAnalyticsNetworkType2G = 1 << 0, + SensorsAnalyticsNetworkType3G = 1 << 1, + SensorsAnalyticsNetworkType4G = 1 << 2, + SensorsAnalyticsNetworkTypeWIFI = 1 << 3, + SensorsAnalyticsNetworkTypeALL = 0xFF, + +#ifdef __IPHONE_14_1 + SensorsAnalyticsNetworkType5G = 1 << 4, +#endif +}; diff --git a/Assets/Plugins/iOS/SensorsAnalyticsSDK.framework/Headers/SAConstants.h.meta b/Assets/Plugins/iOS/SensorsAnalyticsSDK.framework/Headers/SAConstants.h.meta new file mode 100644 index 0000000..1af7ab9 --- /dev/null +++ b/Assets/Plugins/iOS/SensorsAnalyticsSDK.framework/Headers/SAConstants.h.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 85abb121583764f41b84dd62ef2cfc1c +timeCreated: 1606819380 +licenseType: Free +DefaultImporter: + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Plugins/iOS/SensorsAnalyticsSDK.framework/Headers/SASecurityPolicy.h b/Assets/Plugins/iOS/SensorsAnalyticsSDK.framework/Headers/SASecurityPolicy.h new file mode 100644 index 0000000..6960de1 --- /dev/null +++ b/Assets/Plugins/iOS/SensorsAnalyticsSDK.framework/Headers/SASecurityPolicy.h @@ -0,0 +1,95 @@ +// +// SASecurityPolicy.h +// SensorsAnalyticsSDK +// +// Created by 张敏超 on 2019/3/9. +// Copyright © 2015-2020 Sensors Data Co., Ltd. All rights reserved. +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. +// + +#import + +typedef NS_ENUM(NSUInteger, SASSLPinningMode) { + SASSLPinningModeNone, + SASSLPinningModePublicKey, + SASSLPinningModeCertificate, +}; + +NS_ASSUME_NONNULL_BEGIN + +/** + SASecurityPolicy 是参考 AFSecurityPolicy 实现 + 使用方法与 AFSecurityPolicy 相同 + 感谢 AFNetworking: https://github.com/AFNetworking/AFNetworking + */ +@interface SASecurityPolicy : NSObject + +/// 证书验证类型,默认为:SASSLPinningModeNone +@property (readonly, nonatomic, assign) SASSLPinningMode SSLPinningMode; + +/// 证书数据 +@property (nonatomic, strong, nullable) NSSet *pinnedCertificates; + +/// 是否信任无效或者过期证书,默认为:NO +@property (nonatomic, assign) BOOL allowInvalidCertificates; + +/// 是否验证 domain +@property (nonatomic, assign) BOOL validatesDomainName; + +/** + 从一个 Bundle 中获取证书 + + @param bundle 目标 Bundle + @return 证书数据 + */ ++ (NSSet *)certificatesInBundle:(NSBundle *)bundle; + +/** + 创建一个默认的验证对象 + + @return 默认的对象 + */ ++ (instancetype)defaultPolicy; + +/** + 根据 mode 创建对象 + + @param pinningMode 类型 + @return 初始化对象 + */ ++ (instancetype)policyWithPinningMode:(SASSLPinningMode)pinningMode; + +/** + 通过 mode 及 证书数据,初始化一个验证对象 + + @param pinningMode mode + @param pinnedCertificates 证书数据 + @return 初始化对象 + */ ++ (instancetype)policyWithPinningMode:(SASSLPinningMode)pinningMode withPinnedCertificates:(NSSet *)pinnedCertificates; + +/** + 是否通过验证 + + 一般在 `URLSession:didReceiveChallenge:completionHandler:` 和 `URLSession:task: didReceiveChallenge:completionHandler:` 两个回调方法中进行验证。 + + @param serverTrust 服务端信任的证书 + @param domain 域名 + @return 是否信任 + */ +- (BOOL)evaluateServerTrust:(SecTrustRef)serverTrust forDomain:(nullable NSString *)domain; + +@end + +NS_ASSUME_NONNULL_END diff --git a/Assets/Plugins/iOS/SensorsAnalyticsSDK.framework/Headers/SASecurityPolicy.h.meta b/Assets/Plugins/iOS/SensorsAnalyticsSDK.framework/Headers/SASecurityPolicy.h.meta new file mode 100644 index 0000000..5ddae93 --- /dev/null +++ b/Assets/Plugins/iOS/SensorsAnalyticsSDK.framework/Headers/SASecurityPolicy.h.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: dd4a4b28171ac43b4a343f7423d9a078 +timeCreated: 1606819380 +licenseType: Free +DefaultImporter: + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Plugins/iOS/SensorsAnalyticsSDK.framework/Headers/SensorsAnalyticsSDK.h b/Assets/Plugins/iOS/SensorsAnalyticsSDK.framework/Headers/SensorsAnalyticsSDK.h new file mode 100644 index 0000000..3ae45f2 --- /dev/null +++ b/Assets/Plugins/iOS/SensorsAnalyticsSDK.framework/Headers/SensorsAnalyticsSDK.h @@ -0,0 +1,1425 @@ +// SensorsAnalyticsSDK.h +// SensorsAnalyticsSDK +// +// Created by 曹犟 on 15/7/1. +// Copyright © 2015-2020 Sensors Data Co., Ltd. All rights reserved. +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. +// + +#import +#import +#import + +#import "SASecurityPolicy.h" +#import "SAConfigOptions.h" +#import "SAConstants.h" + +NS_ASSUME_NONNULL_BEGIN + +@class SensorsAnalyticsPeople; + +/** + * @abstract + * 在 DEBUG 模式下,发送错误时会抛出该异常 + */ +@interface SensorsAnalyticsDebugException : NSException + +@end + +@protocol SAUIViewAutoTrackDelegate + +//UITableView +@optional +- (NSDictionary *)sensorsAnalytics_tableView:(UITableView *)tableView autoTrackPropertiesAtIndexPath:(NSIndexPath *)indexPath; + +//UICollectionView +@optional +- (NSDictionary *)sensorsAnalytics_collectionView:(UICollectionView *)collectionView autoTrackPropertiesAtIndexPath:(NSIndexPath *)indexPath; +@end + +@interface UIImage (SensorsAnalytics) +@property (nonatomic, copy) NSString* sensorsAnalyticsImageName; +@end + +@interface UIView (SensorsAnalytics) +- (nullable UIViewController *)sensorsAnalyticsViewController __attribute__((deprecated("已过时"))); + +/// viewID +@property (nonatomic, copy) NSString* sensorsAnalyticsViewID; + +/// AutoTrack 时,是否忽略该 View +@property (nonatomic, assign) BOOL sensorsAnalyticsIgnoreView; + +/// AutoTrack 发生在 SendAction 之前还是之后,默认是 SendAction 之前 +@property (nonatomic, assign) BOOL sensorsAnalyticsAutoTrackAfterSendAction; + +/// AutoTrack 时,View 的扩展属性 +@property (nonatomic, strong) NSDictionary* sensorsAnalyticsViewProperties; + +@property (nonatomic, weak, nullable) id sensorsAnalyticsDelegate; +@end + + + +/** + * @abstract + * 自动追踪 (AutoTrack) 中,实现该 Protocal 的 Controller 对象可以通过接口向自动采集的事件中加入属性 + * + * @discussion + * 属性的约束请参考 track:withProperties: + */ +@protocol SAAutoTracker + +@required +- (NSDictionary *)getTrackProperties; + +@end + +@protocol SAScreenAutoTracker + +@required +- (NSString *)getScreenUrl; + +@end + +/** + * @class + * SensorsAnalyticsSDK 类 + * + * @abstract + * 在 SDK 中嵌入 SensorsAnalytics 的 SDK 并进行使用的主要 API + * + * @discussion + * 使用 SensorsAnalyticsSDK 类来跟踪用户行为,并且把数据发给所指定的 SensorsAnalytics 的服务。 + * 它也提供了一个 SensorsAnalyticsPeople 类型的 property,用来访问用户 Profile 相关的 API。 + */ +@interface SensorsAnalyticsSDK : NSObject + +/** + * @property + * + * @abstract + * 对 SensorsAnalyticsPeople 这个 API 的访问接口 + */ +@property (atomic, readonly, strong) SensorsAnalyticsPeople *people; + +/** + * @property + * + * @abstract + * 获取用户的唯一用户标识 + */ +@property (atomic, readonly, copy) NSString *distinctId; + +/** + * @property + * + * @abstract + * 用户登录唯一标识符 + */ +@property (atomic, readonly, copy) NSString *loginId; + +/** + @abstract + 用于评估是否为服务器信任的安全链接。 + + @discussion + 默认使用 defaultPolicy + */ +@property (nonatomic, strong) SASecurityPolicy *securityPolicy; + +#pragma mark- init instance +/** + 通过配置参数,配置神策 SDK + + 此方法调用必须符合以下条件: + 1、必须在应用启动时调用,即在 application:didFinishLaunchingWithOptions: 中调用, + 2、必须在主线线程中调用 + 3、必须在 SDK 其他方法调用之前调用 + 如果不符合上述条件,存在丢失 $AppStart 事件及应用首页的 $AppViewScreen 事件风险 + + @param configOptions 参数配置 + */ ++ (void)startWithConfigOptions:(nonnull SAConfigOptions *)configOptions NS_SWIFT_NAME(start(configOptions:)); + +/** + * @abstract + * 返回之前所初始化好的单例 + * + * @discussion + * 调用这个方法之前,必须先调用 startWithConfigOptions: 这个方法 + * + * @return 返回的单例 + */ ++ (SensorsAnalyticsSDK * _Nullable)sharedInstance; + +/** + * @abstract + * 返回预置的属性 + * + * @return NSDictionary 返回预置的属性 + */ +- (NSDictionary *)getPresetProperties; + +/** + * @abstract + * 设置当前 serverUrl + * + * @discussion + * 默认不请求远程配置 + * + * @param serverUrl 当前的 serverUrl + * + */ +- (void)setServerUrl:(NSString *)serverUrl; + +/** +* @abstract +* 设置当前 serverUrl,并选择是否请求远程配置 +* +* @param serverUrl 当前的 serverUrl +* @param isRequestRemoteConfig 是否请求远程配置 +*/ +- (void)setServerUrl:(NSString *)serverUrl isRequestRemoteConfig:(BOOL)isRequestRemoteConfig; + +#pragma mark--cache and flush + +/** + * @abstract + * 设置本地缓存最多事件条数 + * + * @discussion + * 默认为 10000 条事件 + * + */ +@property (nonatomic, getter = getMaxCacheSize) UInt64 maxCacheSize __attribute__((deprecated("已过时,请参考 SAConfigOptions 类的 maxCacheSize"))); +- (UInt64)getMaxCacheSize __attribute__((deprecated("已过时,请参考 SAConfigOptions 类的 maxCacheSize"))); + +/** + * @abstract + * 设置 flush 时网络发送策略 + * + * @discussion + * 默认 3G、4G、WI-FI 环境下都会尝试 flush + * + * @param networkType SensorsAnalyticsNetworkType + */ +- (void)setFlushNetworkPolicy:(SensorsAnalyticsNetworkType)networkType; + +/** + * @abstract + * 登录,设置当前用户的 loginId + * + * @param loginId 当前用户的 loginId + */ +- (void)login:(NSString *)loginId; + +/** + 登录,设置当前用户的 loginId + + 触发 $SignUp 事件。 + ⚠️属性为事件属性,非用户属性 + + @param loginId 当前用户的登录 id + @param properties $SignUp 事件的事件属性 + */ +- (void)login:(NSString *)loginId withProperties:(NSDictionary * _Nullable )properties; + +/** + * @abstract + * 注销,清空当前用户的 loginId + * + */ +- (void)logout; + +/** + * @abstract + * 获取匿名 id + * + * @return anonymousId 匿名 id + */ +- (NSString *)anonymousId; + +/** + * @abstract + * 重置默认匿名 id + */ +- (void)resetAnonymousId; + +/** + * @abstract + * 自动收集 App Crash 日志,该功能默认是关闭的 + */ +- (void)trackAppCrash __attribute__((deprecated("已过时,请参考 SAConfigOptions 类的 enableTrackAppCrash"))); + +/** + * @property + * + * @abstract + * 打开 SDK 自动追踪,默认只追踪App 启动 / 关闭、进入页面、元素点击 + * @discussion + * 该功能自动追踪 App 的一些行为,例如 SDK 初始化、App 启动 / 关闭、进入页面 等等,具体信息请参考文档: + * https://sensorsdata.cn/manual/ios_sdk.html + * 该功能默认关闭 + */ +- (void)enableAutoTrack:(SensorsAnalyticsAutoTrackEventType)eventType __attribute__((deprecated("已过时,请参考 SAConfigOptions 类的 autoTrackEventType"))); + +/** + * @abstract + * 是否开启 AutoTrack + * + * @return YES: 开启 AutoTrack; NO: 关闭 AutoTrack + */ +- (BOOL)isAutoTrackEnabled; + +/** + * @abstract + * 判断某个 AutoTrack 事件类型是否被忽略 + * + * @param eventType SensorsAnalyticsAutoTrackEventType 要判断的 AutoTrack 事件类型 + * + * @return YES:被忽略; NO:没有被忽略 + */ +- (BOOL)isAutoTrackEventTypeIgnored:(SensorsAnalyticsAutoTrackEventType)eventType; + +/** + * @abstract + * 忽略某一类型的 View + * + * @param aClass View 对应的 Class + */ +- (void)ignoreViewType:(Class)aClass; + +/** + * @abstract + * 判断某个 View 类型是否被忽略 + * + * @param aClass Class View 对应的 Class + * + * @return YES:被忽略; NO:没有被忽略 + */ +- (BOOL)isViewTypeIgnored:(Class)aClass; + +/** + * @abstract + * 判断某个 ViewController 是否被忽略 + * + * @param viewController UIViewController + * + * @return YES:被忽略; NO:没有被忽略 + */ +- (BOOL)isViewControllerIgnored:(UIViewController *)viewController; + +/** + * @abstract + * 设置是否显示 debugInfoView,对于 iOS,是 UIAlertView/UIAlertController + * + * @discussion + * 设置是否显示 debugInfoView,默认显示 + * + * @param show 是否显示 + */ +- (void)showDebugInfoView:(BOOL)show; + +/** + @abstract + 在初始化 SDK 之后立即调用,替换神策分析默认分配的 *匿名 ID* + + @discussion + 一般情况下,如果是一个注册用户,则应该使用注册系统内的 user_id,调用 SDK 的 login: 接口。 + 对于未注册用户,则可以选择一个不会重复的匿名 ID,如设备 ID 等 + 如果没有调用此方法,则使用 SDK 自动生成的匿名 ID + SDK 会自动将设置的 anonymousId 保存到文件中,下次启动时会从中读取 + + 重要:该方法在 SDK 初始化之后立即调用,可以自定义匿名 ID,不要重复调用。 + + @param anonymousId 当前用户的 anonymousId + */ +- (void)identify:(NSString *)anonymousId; + +#pragma mark - trackTimer +/** + 开始事件计时 + + @discussion + 若需要统计某个事件的持续时间,先在事件开始时调用 trackTimerStart:"Event" 记录事件开始时间,该方法并不会真正发送事件; + 随后在事件结束时,调用 trackTimerEnd:"Event" withProperties:properties, + SDK 会追踪 "Event" 事件,并自动将事件持续时间记录在事件属性 "event_duration" 中,时间单位为秒。 + + @param event 事件名称 + @return 返回计时事件的 eventId,用于交叉计时场景。普通计时可忽略 + */ +- (nullable NSString *)trackTimerStart:(NSString *)event; + +/** + 结束事件计时 + + @discussion + 多次调用 trackTimerEnd: 时,以首次调用为准 + + @param event 事件名称或事件的 eventId + @param propertyDict 自定义属性 + */ +- (void)trackTimerEnd:(NSString *)event withProperties:(nullable NSDictionary *)propertyDict; + +/** + 结束事件计时 + + @discussion + 多次调用 trackTimerEnd: 时,以首次调用为准 + + @param event 事件名称或事件的 eventId + */ +- (void)trackTimerEnd:(NSString *)event; + +/** + 暂停事件计时 + + @discussion + 多次调用 trackTimerPause: 时,以首次调用为准。 + + @param event 事件名称或事件的 eventId + */ +- (void)trackTimerPause:(NSString *)event; + +/** + 恢复事件计时 + + @discussion + 多次调用 trackTimerResume: 时,以首次调用为准。 + + @param event 事件名称或事件的 eventId + */ +- (void)trackTimerResume:(NSString *)event; + +/** +删除事件计时 + + @discussion + 多次调用 removeTimer: 时,只有首次调用有效。 + + @param event 事件名称或事件的 eventId +*/ +- (void)removeTimer:(NSString *)event; + +/** + 清除所有事件计时器 + */ +- (void)clearTrackTimer; + +- (UIViewController *_Nullable)currentViewController; + +#pragma mark track event +/** + * @abstract + * 调用 track 接口,追踪一个带有属性的 event + * + * @discussion + * propertyDict 是一个 Map。 + * 其中的 key 是 Property 的名称,必须是 NSString + * value 则是 Property 的内容,只支持 NSString、NSNumber、NSSet、NSArray、NSDate 这些类型 + * 特别的,NSSet 或者 NSArray 类型的 value 中目前只支持其中的元素是 NSString + * + * @param event event的名称 + * @param propertyDict event的属性 + */ +- (void)track:(NSString *)event withProperties:(nullable NSDictionary *)propertyDict; + +/** + * @abstract + * 调用 track 接口,追踪一个无私有属性的 event + * + * @param event event 的名称 + */ +- (void)track:(NSString *)event; + +/** + 调用 track 接口并附加渠道信息 + + @param event event 的名称 + */ +- (void)trackChannelEvent:(NSString *)event; + +/** +调用 track 接口并附加渠道信息 + + @param event event 的名称 + @param propertyDict event 的属性 + */ +- (void)trackChannelEvent:(NSString *)event properties:(nullable NSDictionary *)propertyDict; + +/** + * @abstract + * 设置 Cookie + * + * @param cookie NSString cookie + * @param encode BOOL 是否 encode + */ +- (void)setCookie:(NSString *)cookie withEncode:(BOOL)encode; + +/** + * @abstract + * 返回已设置的 Cookie + * + * @param decode BOOL 是否 decode + * @return NSString cookie + */ +- (NSString *)getCookieWithDecode:(BOOL)decode; + +/** + * @abstract + * 在 AutoTrack 时,用户可以设置哪些 controllers 不被 AutoTrack + * + * @param controllers controller ‘字符串’数组 + */ +- (void)ignoreAutoTrackViewControllers:(NSArray *)controllers; + +/** + * @abstract + * 获取 LastScreenUrl + * + * @return LastScreenUrl + */ +- (NSString *)getLastScreenUrl; + +/** + * @abstract + * App 退出或进到后台时清空 referrer,默认情况下不清空 + */ +- (void)clearReferrerWhenAppEnd; + +/** + * @abstract + * 获取 LastScreenTrackProperties + * + * @return LastScreenTrackProperties + */ +- (NSDictionary *)getLastScreenTrackProperties; + +- (SensorsAnalyticsDebugMode)debugMode; + +/** + * @abstract + * 通过代码触发 UIView 的 $AppClick 事件 + * + * @param view UIView + */ +- (void)trackViewAppClick:(nonnull UIView *)view; + +/** + * @abstract + * 通过代码触发 UIViewController 的 $AppViewScreen 事件 + * + * @param viewController 当前的 UIViewController + */ +- (void)trackViewScreen:(UIViewController *)viewController; +- (void)trackViewScreen:(UIViewController *)viewController properties:(nullable NSDictionary *)properties; + +/** + * @abstract + * 通过代码触发 UIView 的 $AppClick 事件 + * + * @param view UIView + * @param properties 自定义属性 + */ +- (void)trackViewAppClick:(nonnull UIView *)view withProperties:(nullable NSDictionary *)properties; + +/** + @abstract + * Track App Extension groupIdentifier 中缓存的数据 + * + * @param groupIdentifier groupIdentifier + * @param completion 完成 track 后的 callback + */ +- (void)trackEventFromExtensionWithGroupIdentifier:(NSString *)groupIdentifier completion:(void (^)(NSString *groupIdentifier, NSArray *events)) completion; + +/** + * @abstract + * 修改入库之前的事件属性 + * + * @param callback 传入事件名称和事件属性,可以修改或删除事件属性。请返回一个 BOOL 值,true 表示事件将入库, false 表示事件将被抛弃 + */ +- (void)trackEventCallback:(BOOL (^)(NSString *eventName, NSMutableDictionary *properties))callback; + +/** + * @abstract + * 用来设置每个事件都带有的一些公共属性 + * + * @discussion + * 当 track 的 Properties,superProperties 和 SDK 自动生成的 automaticProperties 有相同的 key 时,遵循如下的优先级: + * track.properties > superProperties > automaticProperties + * 另外,当这个接口被多次调用时,是用新传入的数据去 merge 先前的数据,并在必要时进行 merge + * 例如,在调用接口前,dict 是 @{@"a":1, @"b": "bbb"},传入的 dict 是 @{@"b": 123, @"c": @"asd"},则 merge 后的结果是 + * @{"a":1, @"b": 123, @"c": @"asd"},同时,SDK 会自动将 superProperties 保存到文件中,下次启动时也会从中读取 + * + * @param propertyDict 传入 merge 到公共属性的 dict + */ +- (void)registerSuperProperties:(NSDictionary *)propertyDict; + +/** + * @abstract + * 用来设置事件的动态公共属性 + * + * @discussion + * 当 track 的 Properties,superProperties 和 SDK 自动生成的 automaticProperties 有相同的 key 时,遵循如下的优先级: + * track.properties > dynamicSuperProperties > superProperties > automaticProperties + * + * 例如,track.properties 是 @{@"a":1, @"b": "bbb"},返回的 eventCommonProperty 是 @{@"b": 123, @"c": @"asd"}, + * superProperties 是 @{@"a":1, @"b": "bbb",@"c":@"ccc"},automaticProperties 是 @{@"a":1, @"b": "bbb",@"d":@"ddd"}, + * 则 merge 后的结果是 @{"a":1, @"b": "bbb", @"c": @"asd",@"d":@"ddd"} + * 返回的 NSDictionary 需满足以下要求 + * 重要:1,key 必须是 NSString + * 2,key 的名称必须符合要求 + * 3,value 的类型必须是 NSString、NSNumber、NSSet、NSArray、NSDate + * 4,value 类型为 NSSet、NSArray 时,NSSet、NSArray 中的所有元素必须为 NSString + * @param dynamicSuperProperties block 用来返回事件的动态公共属性 + */ +- (void)registerDynamicSuperProperties:(NSDictionary *(^)(void)) dynamicSuperProperties; + +/** + * @abstract + * 从 superProperty 中删除某个 property + * + * @param property 待删除的 property 的名称 + */ +- (void)unregisterSuperProperty:(NSString *)property; + +/** + * @abstract + * 删除当前所有的 superProperty + */ +- (void)clearSuperProperties; + +/** + * @abstract + * 拿到当前的 superProperty 的副本 + * + * @return 当前的 superProperty 的副本 + */ +- (NSDictionary *)currentSuperProperties; + +/** + * @abstract + * 得到 SDK 的版本 + * + * @return SDK 的版本 + */ +- (NSString *)libVersion; + +/** + * @abstract + * 强制试图把数据传到对应的 SensorsAnalytics 服务器上 + * + * @discussion + * 主动调用 flush 接口,则不论 flushInterval 和 flushBulkSize 限制条件是否满足,都尝试向服务器上传一次数据 + */ +- (void)flush; + +/** + * @abstract + * 删除本地缓存的全部事件 + * + * @discussion + * 一旦调用该接口,将会删除本地缓存的全部事件,请慎用! + */ +- (void)deleteAll; + +#pragma mark Item 操作 + +/** + 设置 item + + @param itemType item 类型 + @param itemId item Id + @param propertyDict item 相关属性 + */ +- (void)itemSetWithType:(NSString *)itemType itemId:(NSString *)itemId properties:(nullable NSDictionary *)propertyDict; + +/** + 删除 item + + @param itemType item 类型 + @param itemId item Id + */ +- (void)itemDeleteWithType:(NSString *)itemType itemId:(NSString *)itemId; + + +#pragma mark - VisualizedAutoTrack + +/** + * 判断是否为符合要求的 openURL + + * @param url 打开的 URL + * @return YES/NO + */ +- (BOOL)canHandleURL:(NSURL *)url; + +/** + 是否开启 可视化全埋点 分析,默认不 + + @return YES/NO + */ +- (BOOL)isVisualizedAutoTrackEnabled; + +/** + 指定哪些页面开启 可视化全埋点 分析, + 如果指定了页面,只有这些页面的 $AppClick 事件会采集控件的 viwPath。 + + @param controllers 指定的页面的类名数组 + */ +- (void)addVisualizedAutoTrackViewControllers:(NSArray *)controllers; + +/** + 当前页面是否开启 可视化全埋点 分析。 + + @param viewController 当前页面 viewController + @return YES/NO + */ +- (BOOL)isVisualizedAutoTrackViewController:(UIViewController *)viewController; + +#pragma mark HeatMap + +/** + 是否开启点击图 + + @return YES/NO 是否开启了点击图 + */ +- (BOOL)isHeatMapEnabled; + +/** + 指定哪些页面开启 HeatMap,如果指定了页面 + 只有这些页面的 $AppClick 事件会采集控件的 viwPath + + @param controllers 需要开启点击图的 ViewController 的类名 + */ +- (void)addHeatMapViewControllers:(NSArray *)controllers; + +/** + 当前页面是否开启 点击图 分析。 + + @param viewController 当前页面 viewController + @return 当前 viewController 是否支持点击图分析 + */ +- (BOOL)isHeatMapViewController:(UIViewController *)viewController; + +/** + * @abstract + * 处理 url scheme 跳转打开 App + * + * @param url 打开本 app 的回调的 url + */ +- (BOOL)handleSchemeUrl:(NSURL *)url; + +#pragma mark - profile +/** + * @abstract + * 直接设置用户的一个或者几个 Profiles + * + * @discussion + * 这些 Profile 的内容用一个 NSDictionary 来存储 + * 其中的 key 是 Profile 的名称,必须是 NSString + * Value 则是 Profile 的内容,只支持 NSString、NSNumberNSSet、NSArray、NSDate 这些类型 + * 特别的,NSSet 或者 NSArray 类型的 value 中目前只支持其中的元素是 NSString + * 如果某个 Profile 之前已经存在了,则这次会被覆盖掉;不存在,则会创建 + * + * @param profileDict 要替换的那些 Profile 的内容 + */ +- (void)set:(NSDictionary *)profileDict; + +/** + * @abstract + * 直接设置用户的pushId + * + * @discussion + * 设置用户的 pushId 比如 @{@"jgId":pushId},并触发 profileSet 设置对应的用户属性。 + * 当 disctinct_id 或者 pushId 没有发生改变的时,不会触发 profileSet。 + * @param pushTypeKey pushId 的 key + * @param pushId pushId 的值 + */ +- (void)profilePushKey:(NSString *)pushTypeKey pushId:(NSString *)pushId; + +/** + * @abstract + * 删除用户设置的 pushId + * + * *@discussion + * 删除用户设置的 pushId 比如 @{@"jgId":pushId},并触发 profileUnset 删除对应的用户属性。 + * 当 disctinct_id 未找到本地缓存记录时, 不会触发 profileUnset。 + * @param pushTypeKey pushId 的 key + */ +- (void)profileUnsetPushKey:(NSString *)pushTypeKey; + +/** + * @abstract + * 首次设置用户的一个或者几个 Profiles + * + * @discussion + * 与 set 接口不同的是,如果该用户的某个 Profile 之前已经存在了,会被忽略;不存在,则会创建 + * + * @param profileDict 要替换的那些 Profile 的内容 + */ +- (void)setOnce:(NSDictionary *)profileDict; + +/** + * @abstract + * 设置用户的单个 Profile 的内容 + * + * @discussion + * 如果这个 Profile 之前已经存在了,则这次会被覆盖掉;不存在,则会创建 + * + * @param profile Profile 的名称 + * @param content Profile 的内容 + */ +- (void)set:(NSString *) profile to:(id)content; + +/** + * @abstract + * 首次设置用户的单个 Profile 的内容 + * + * @discussion + * 与 set 类接口不同的是,如果这个 Profile 之前已经存在了,则这次会被忽略;不存在,则会创建 + * + * @param profile Profile 的名称 + * @param content Profile 的内容 + */ +- (void)setOnce:(NSString *) profile to:(id)content; + +/** + * @abstract + * 删除某个 Profile 的全部内容 + * + * @discussion + * 如果这个 Profile 之前不存在,则直接忽略 + * + * @param profile Profile 的名称 + */ +- (void)unset:(NSString *) profile; + +/** + * @abstract + * 给一个数值类型的 Profile 增加一个数值 + * + * @discussion + * 只能对 NSNumber 类型的 Profile 调用这个接口,否则会被忽略 + * 如果这个 Profile 之前不存在,则初始值当做 0 来处理 + * + * @param profile 待增加数值的 Profile 的名称 + * @param amount 要增加的数值 + */ +- (void)increment:(NSString *)profile by:(NSNumber *)amount; + +/** + * @abstract + * 给多个数值类型的 Profile 增加数值 + * + * @discussion + * profileDict 中,key 是 NSString ,value 是 NSNumber + * 其它与 - (void)increment:by: 相同 + * + * @param profileDict 多个 + */ +- (void)increment:(NSDictionary *)profileDict; + +/** + * @abstract + * 向一个 NSSet 或者 NSArray 类型的 value 添加一些值 + * + * @discussion + * 如前面所述,这个 NSSet 或者 NSArray 的元素必须是 NSString,否则,会忽略 + * 同时,如果要 append 的 Profile 之前不存在,会初始化一个空的 NSSet 或者 NSArray + * + * @param profile profile + * @param content description + */ +- (void)append:(NSString *)profile by:(NSObject *)content; + +/** + * @abstract + * 删除当前这个用户的所有记录 + */ +- (void)deleteUser; + +/** + * @abstract + * log 功能开关 + * + * @discussion + * 根据需要决定是否开启 SDK log , SensorsAnalyticsDebugOff 模式默认关闭 log + * SensorsAnalyticsDebugOnly SensorsAnalyticsDebugAndTrack 模式默认开启log + * + * @param enabelLog YES/NO + */ +- (void)enableLog:(BOOL)enabelLog; + +/** + * @abstract + * 设备方向信息采集功能开关 + * + * @discussion + * 根据需要决定是否开启设备方向采集 + * 默认关闭 + * + * @param enable YES/NO + */ +- (void)enableTrackScreenOrientation:(BOOL)enable; + +/** + * @abstract + * 位置信息采集功能开关 + * + * @discussion + * 根据需要决定是否开启位置采集 + * 默认关闭 + * + * @param enable YES/NO + */ +- (void)enableTrackGPSLocation:(BOOL)enable; + +/** + * @abstract + * 清除 keychain 缓存数据 + * + * @discussion + * 注意:清除 keychain 中 kSAService 名下的数据,包括 distinct_id 和 AppInstall 标记。 + * 清除后 AppInstall 可以再次触发,造成 AppInstall 事件统计不准确。 + * + */ +- (void)clearKeychainData; + +@end + +#pragma mark - $AppInstall +@interface SensorsAnalyticsSDK (AppInstall) + +#pragma mark trackInstallation +/** + * @abstract + * 用于在 App 首次启动时追踪渠道来源,SDK 会将渠道值填入事件属性 $utm_ 开头的一系列属性中 + */ +- (void)trackAppInstall; + +/** + * @abstract + * 用于在 App 首次启动时追踪渠道来源,SDK 会将渠道值填入事件属性 $utm_ 开头的一系列属性中 + * + * @param properties 激活事件的属性 + */ +- (void)trackAppInstallWithProperties:(nullable NSDictionary *)properties; + +/** + * @abstract + * 用于在 App 首次启动时追踪渠道来源,SDK 会将渠道值填入事件属性 $utm_ 开头的一系列属性中 + * + * @param properties 激活事件的属性 + * @param disableCallback 是否关闭这次渠道匹配的回调请求 + */ +- (void)trackAppInstallWithProperties:(nullable NSDictionary *)properties disableCallback:(BOOL)disableCallback; + +/** + * @abstract + * 用于在 App 首次启动时追踪渠道来源,SDK 会将渠道值填入事件属性 $utm_ 开头的一系列属性中 + * 使用该接口 + * + * @discussion + * 这个接口是一个较为复杂的功能,请在使用前先阅读相关说明: https://sensorsdata.cn/manual/track_installation.html,并在必要时联系我们的技术支持人员。 + * + * @param event event 的名称 + */ +- (void)trackInstallation:(NSString *)event; + +/** + * @abstract + * 用于在 App 首次启动时追踪渠道来源,并设置追踪渠道事件的属性。SDK 会将渠道值填入事件属性 $utm_ 开头的一系列属性中。 + * + * @discussion + * propertyDict 是一个 Map。 + * 其中的 key 是 Property 的名称,必须是 NSString + * value 则是 Property 的内容,只支持 NSString、NSNumber、NSSet、NSArray、NSDate 这些类型 + * 特别的,NSSet 或者 NSArray 类型的 value 中目前只支持其中的元素是 NSString + * + * 这个接口是一个较为复杂的功能,请在使用前先阅读相关说明: https://sensorsdata.cn/manual/track_installation.html,并在必要时联系我们的技术支持人员。 + * + * @param event event 的名称 + * @param propertyDict event 的属性 + */ +- (void)trackInstallation:(NSString *)event withProperties:(nullable NSDictionary *)propertyDict; + +/** + * @abstract + * 用于在 App 首次启动时追踪渠道来源,并设置追踪渠道事件的属性。SDK 会将渠道值填入事件属性 $utm_ 开头的一系列属性中。 + * + * @discussion + * propertyDict 是一个 Map。 + * 其中的 key 是 Property 的名称,必须是 NSString + * value 则是 Property 的内容,只支持 NSString、NSNumber、NSSet、NSArray、NSDate 这些类型 + * 特别的,NSSet 或者 NSArray 类型的 value 中目前只支持其中的元素是 NSString + * + * 这个接口是一个较为复杂的功能,请在使用前先阅读相关说明: https://sensorsdata.cn/manual/track_installation.html,并在必要时联系我们的技术支持人员。 + * + * @param event event 的名称 + * @param propertyDict event 的属性 + * @param disableCallback 是否关闭这次渠道匹配的回调请求 + */ +- (void)trackInstallation:(NSString *)event withProperties:(nullable NSDictionary *)propertyDict disableCallback:(BOOL)disableCallback; + +@end + +#pragma mark - Deeplink +@interface SensorsAnalyticsSDK (Deeplink) + +/** +DeepLink 回调函数 +@param callback 请求成功后的回调函数 + params:创建渠道链接时填写的 App 内参数 + succes:deeplink 唤起结果 + appAwakePassedTime:获取渠道信息所用时间 +*/ +- (void)setDeeplinkCallback:(void(^)(NSString *_Nullable params, BOOL success, NSInteger appAwakePassedTime))callback; + +@end + +#pragma mark - JSCall +@interface SensorsAnalyticsSDK (JSCall) + +#pragma mark about webView + +/** + * @abstract + * H5 数据打通的时候默认通过 ServerUrl 校验 + */ +- (void)addWebViewUserAgentSensorsDataFlag; + +/** + * @abstract + * H5 数据打通的时候是否通过 ServerUrl 校验, 如果校验通过,H5 的事件数据走 App 上报否则走 JSSDK 上报 + * + * @param enableVerify YES/NO 校验通过后可走 App,上报数据/直接走 App,上报数据 + */ +- (void)addWebViewUserAgentSensorsDataFlag:(BOOL)enableVerify; + +/** + * @abstract + * H5 数据打通的时候是否通过 ServerUrl 校验, 如果校验通过,H5 的事件数据走 App 上报否则走 JSSDK 上报 + * + * @param enableVerify YES/NO 校验通过后可走 App,上报数据/直接走 App,上报数据 + * @param userAgent userAgent = nil ,SDK 会从 webview 中读取 ua + + */ +- (void)addWebViewUserAgentSensorsDataFlag:(BOOL)enableVerify userAgent:(nullable NSString *)userAgent; +/** + * @abstract + * 将 distinctId 传递给当前的 WebView + * + * @discussion + * 混合开发时,将 distinctId 传递给当前的 WebView + * + * @param webView 当前 WebView,支持 WKWebView + * + * @return YES:SDK 已进行处理,NO:SDK 没有进行处理 + */ +- (BOOL)showUpWebView:(id)webView WithRequest:(NSURLRequest *)request; + +- (BOOL)showUpWebView:(id)webView WithRequest:(NSURLRequest *)request enableVerify:(BOOL)enableVerify; + +/** + * @abstract + * 将 distinctId 传递给当前的 WebView + * + * @discussion + * 混合开发时,将 distinctId 传递给当前的 WebView + * + * @param webView 当前 WebView,支持 WKWebView + * @param request NSURLRequest + * @param propertyDict NSDictionary 自定义扩展属性 + * + * @return YES:SDK 已进行处理,NO:SDK 没有进行处理 + */ +- (BOOL)showUpWebView:(id)webView WithRequest:(NSURLRequest *)request andProperties:(nullable NSDictionary *)propertyDict; + +#pragma mark trackFromH5 + +- (void)trackFromH5WithEvent:(NSString *)eventInfo; + +- (void)trackFromH5WithEvent:(NSString *)eventInfo enableVerify:(BOOL)enableVerify; +@end + +#pragma mark - +/** + * @class + * SensorsAnalyticsPeople 类 + * + * @abstract + * 用于记录用户 Profile 的 API + * + * @discussion + * 请不要自己来初始化这个类. 请通过 SensorsAnalyticsSDK 提供的 people 这个 property 来调用 + */ +@interface SensorsAnalyticsPeople : NSObject + +/** + * @abstract + * 直接设置用户的一个或者几个 Profiles + * + * @discussion + * 这些 Profile 的内容用一个 NSDictionary 来存储 + * 其中的 key 是 Profile 的名称,必须是 NSString + * Value 则是 Profile 的内容,只支持 NSString、NSNumber、NSSet、NSArray、NSDate 这些类型 + * 特别的,NSSet 或者 NSArray 类型的 value 中目前只支持其中的元素是 NSString + * 如果某个 Profile 之前已经存在了,则这次会被覆盖掉;不存在,则会创建 + * + * @param profileDict 要替换的那些 Profile 的内容 + */ +- (void)set:(NSDictionary *)profileDict; + +/** + * @abstract + * 首次设置用户的一个或者几个 Profiles + * + * @discussion + * 与set接口不同的是,如果该用户的某个 Profile 之前已经存在了,会被忽略;不存在,则会创建 + * + * @param profileDict 要替换的那些 Profile 的内容 + */ +- (void)setOnce:(NSDictionary *)profileDict; + +/** + * @abstract + * 设置用户的单个 Profile 的内容 + * + * @discussion + * 如果这个 Profile 之前已经存在了,则这次会被覆盖掉;不存在,则会创建 + * + * @param profile Profile 的名称 + * @param content Profile 的内容 + */ +- (void)set:(NSString *) profile to:(id)content; + +/** + * @abstract + * 首次设置用户的单个 Profile 的内容 + * + * @discussion + * 与 set 类接口不同的是,如果这个 Profile 之前已经存在了,则这次会被忽略;不存在,则会创建 + * + * @param profile Profile 的名称 + * @param content Profile 的内容 + */ +- (void)setOnce:(NSString *) profile to:(id)content; + +/** + * @abstract + * 删除某个 Profile 的全部内容 + * + * @discussion + * 如果这个 Profile 之前不存在,则直接忽略 + * + * @param profile Profile 的名称 + */ +- (void)unset:(NSString *) profile; + +/** + * @abstract + * 给一个数值类型的 Profile 增加一个数值 + * + * @discussion + * 只能对 NSNumber 类型的 Profile 调用这个接口,否则会被忽略 + * 如果这个 Profile 之前不存在,则初始值当做 0 来处理 + * + * @param profile 待增加数值的 Profile 的名称 + * @param amount 要增加的数值 + */ +- (void)increment:(NSString *)profile by:(NSNumber *)amount; + +/** + * @abstract + * 给多个数值类型的 Profile 增加数值 + * + * @discussion + * profileDict 中,key是 NSString,value 是 NSNumber + * 其它与 - (void)increment:by: 相同 + * + * @param profileDict 多个 + */ +- (void)increment:(NSDictionary *)profileDict; + +/** + * @abstract + * 向一个 NSSet 或者 NSArray 类型的 value 添加一些值 + * + * @discussion + * 如前面所述,这个 NSSet 或者 NSArray 的元素必须是 NSString,否则,会忽略 + * 同时,如果要 append 的 Profile 之前不存在,会初始化一个空的 NSSet 或者 NSArray + * + * @param profile profile + * @param content description + */ +- (void)append:(NSString *)profile by:(NSObject *)content; + +/** + * @abstract + * 删除当前这个用户的所有记录 + */ +- (void)deleteUser; + +@end + +#pragma mark - Deprecated +@interface SensorsAnalyticsSDK (Deprecated) + +/** + * @property + * + * @abstract + * 两次数据发送的最小时间间隔,单位毫秒 + * + * @discussion + * 默认值为 15 * 1000 毫秒, 在每次调用 track、trackSignUp 以及 profileSet 等接口的时候, + * 都会检查如下条件,以判断是否向服务器上传数据: + * 1. 是否 WIFI/3G/4G 网络 + * 2. 是否满足以下数据发送条件之一: + * 1) 与上次发送的时间间隔是否大于 flushInterval + * 2) 本地缓存日志数目是否达到 flushBulkSize + * 如果满足这两个条件之一,则向服务器发送一次数据;如果都不满足,则把数据加入到队列中,等待下次检查时把整个队列的内容一并发送。 + * 需要注意的是,为了避免占用过多存储,队列最多只缓存10000条数据。 + */ +@property (atomic) UInt64 flushInterval __attribute__((deprecated("已过时,请参考 SAConfigOptions 类的 flushInterval"))); + +/** + * @property + * + * @abstract + * 本地缓存的最大事件数目,当累积日志量达到阈值时发送数据 + * + * @discussion + * 默认值为 100,在每次调用 track、trackSignUp 以及 profileSet 等接口的时候,都会检查如下条件,以判断是否向服务器上传数据: + * 1. 是否 WIFI/3G/4G 网络 + * 2. 是否满足以下数据发送条件之一: + * 1) 与上次发送的时间间隔是否大于 flushInterval + * 2) 本地缓存日志数目是否达到 flushBulkSize + * 如果同时满足这两个条件,则向服务器发送一次数据;如果不满足,则把数据加入到队列中,等待下次检查时把整个队列的内容一并发送。 + * 需要注意的是,为了避免占用过多存储,队列最多只缓存 10000 条数据。 + */ +@property (atomic) UInt64 flushBulkSize __attribute__((deprecated("已过时,请参考 SAConfigOptions 类的 flushBulkSize"))); + +/** + * @proeprty + * + * @abstract + * 当 App 进入后台时,是否执行 flush 将数据发送到 SensrosAnalytics + * + * @discussion + * 默认值为 YES + */ +@property (atomic) BOOL flushBeforeEnterBackground __attribute__((deprecated("已过时,请参考 SAConfigOptions 类的 flushBeforeEnterBackground"))); + +/** + * @abstract + * 根据传入的配置,初始化并返回一个 SensorsAnalyticsSDK 的单例 + * + @param configOptions 参数配置 + @return 返回的单例 + */ ++ (SensorsAnalyticsSDK *)sharedInstanceWithConfig:(nonnull SAConfigOptions *)configOptions __attribute__((deprecated("已过时,请使用 + (void)startWithConfigOptions: 方法进行初始化"))); + +/** + * @abstract + * 根据传入的配置,初始化并返回一个 SensorsAnalyticsSDK 的单例 + * + * @param serverURL 收集事件的 URL + * @param debugMode Sensors Analytics 的 Debug 模式 + * + * @return 返回的单例 + */ ++ (SensorsAnalyticsSDK *)sharedInstanceWithServerURL:(nullable NSString *)serverURL + andDebugMode:(SensorsAnalyticsDebugMode)debugMode __attribute__((deprecated("已过时,请参考 sharedInstanceWithConfig:"))); + +/** + * @abstract + * 根据传入的配置,初始化并返回一个 SensorsAnalyticsSDK 的单例 + * + * @param serverURL 收集事件的 URL + * @param launchOptions launchOptions + * @param debugMode Sensors Analytics 的 Debug 模式 + * + * @return 返回的单例 + */ ++ (SensorsAnalyticsSDK *)sharedInstanceWithServerURL:(nonnull NSString *)serverURL + andLaunchOptions:(NSDictionary * _Nullable)launchOptions + andDebugMode:(SensorsAnalyticsDebugMode)debugMode __attribute__((deprecated("已过时,请参考 sharedInstanceWithConfig:"))); +/** + * @abstract + * 根据传入的配置,初始化并返回一个 SensorsAnalyticsSDK 的单例。 + * 目前 DebugMode 为动态开启,详细请参考说明文档:https://www.sensorsdata.cn/manual/ios_sdk.html + * @param serverURL 收集事件的 URL + * @param launchOptions launchOptions + * + * @return 返回的单例 + */ ++ (SensorsAnalyticsSDK *)sharedInstanceWithServerURL:(nonnull NSString *)serverURL + andLaunchOptions:(NSDictionary * _Nullable)launchOptions __attribute__((deprecated("已过时,请参考 sharedInstanceWithConfig:"))); + +/** + 设置调试模式 + 目前 DebugMode 为动态开启,详细请参考说明文档:https://www.sensorsdata.cn/manual/ios_sdk.html + @param debugMode 调试模式 + */ +- (void)setDebugMode:(SensorsAnalyticsDebugMode)debugMode __attribute__((deprecated("已过时,建议动态开启调试模式"))); + +/** + * @property + * + * @abstract + * 打开 SDK 自动追踪,默认只追踪App 启动 / 关闭、进入页面 + * + * @discussion + * 该功能自动追踪 App 的一些行为,例如 SDK 初始化、App 启动 / 关闭、进入页面 等等,具体信息请参考文档: + * https://sensorsdata.cn/manual/ios_sdk.html + * 该功能默认关闭 + */ +- (void)enableAutoTrack __attribute__((deprecated("已过时,请参考 SAConfigOptions 类的 autoTrackEventType"))); + +/** + * @abstract + * 过滤掉 AutoTrack 的某个事件类型 + * + * @param eventType SensorsAnalyticsAutoTrackEventType 要忽略的 AutoTrack 事件类型 + */ +- (void)ignoreAutoTrackEventType:(SensorsAnalyticsAutoTrackEventType)eventType __attribute__((deprecated("已过时,请参考enableAutoTrack:(SensorsAnalyticsAutoTrackEventType)eventType"))); + +/** + * @abstract + * 判断某个 ViewController 是否被忽略 + * + * @param viewControllerClassName UIViewController 类名 + * + * @return YES:被忽略; NO:没有被忽略 + */ +- (BOOL)isViewControllerStringIgnored:(NSString *)viewControllerClassName __attribute__((deprecated("已过时,请参考 -(BOOL)isViewControllerIgnored:(UIViewController *)viewController"))); + +/** + * @abstract + * 提供一个接口,用来在用户注册的时候,用注册ID来替换用户以前的匿名ID + * + * @discussion + * 这个接口是一个较为复杂的功能,请在使用前先阅读相关说明: http://www.sensorsdata.cn/manual/track_signup.html,并在必要时联系我们的技术支持人员。 + * + * @param newDistinctId 用户完成注册后生成的注册ID + * @param propertyDict event的属性 + */ +- (void)trackSignUp:(NSString *)newDistinctId withProperties:(nullable NSDictionary *)propertyDict __attribute__((deprecated("已过时,请参考login"))); + +/** + * @abstract + * 不带私有属性的trackSignUp,用来在用户注册的时候,用注册ID来替换用户以前的匿名ID + * + * @discussion + * 这个接口是一个较为复杂的功能,请在使用前先阅读相关说明: http://www.sensorsdata.cn/manual/track_signup.html,并在必要时联系我们的技术支持人员。 + * + * @param newDistinctId 用户完成注册后生成的注册ID + */ +- (void)trackSignUp:(NSString *)newDistinctId __attribute__((deprecated("已过时,请参考login"))); + +/** + * @abstract + * 初始化事件的计时器。 + * + * @discussion + * 若需要统计某个事件的持续时间,先在事件开始时调用 trackTimer:"Event" 记录事件开始时间,该方法并不会真正发 + * 送事件;随后在事件结束时,调用 track:"Event" withProperties:properties,SDK 会追踪 "Event" 事件,并自动将事件持续时 + * 间记录在事件属性 "event_duration" 中。 + * + * 默认时间单位为毫秒,若需要以其他时间单位统计时长,请使用 trackTimer:withTimeUnit + * + * 多次调用 trackTimer:"Event" 时,事件 "Event" 的开始时间以最后一次调用时为准。 + * + * @param event event的名称 + */ +- (void)trackTimerBegin:(NSString *)event __attribute__((deprecated("已过时,请参考 trackTimerStart"))); + +/** + * @abstract + * 初始化事件的计时器,允许用户指定计时单位。 + * + * @discussion + * 请参考 trackTimer + * + * @param event event的名称 + * @param timeUnit 计时单位,毫秒/秒/分钟/小时 + */ +- (void)trackTimerBegin:(NSString *)event withTimeUnit:(SensorsAnalyticsTimeUnit)timeUnit __attribute__((deprecated("已过时,请参考 trackTimerStart"))); + +/** + * @abstract + * 初始化事件的计时器。 + * + * @discussion + * 若需要统计某个事件的持续时间,先在事件开始时调用 trackTimer:"Event" 记录事件开始时间,该方法并不会真正发 + * 送事件;随后在事件结束时,调用 track:"Event" withProperties:properties,SDK 会追踪 "Event" 事件,并自动将事件持续时 + * 间记录在事件属性 "event_duration" 中。 + * + * 默认时间单位为毫秒,若需要以其他时间单位统计时长,请使用 trackTimer:withTimeUnit + * + * 多次调用 trackTimer:"Event" 时,事件 "Event" 的开始时间以最后一次调用时为准。 + * + * @param event event 的名称 + */ +- (void)trackTimer:(NSString *)event __attribute__((deprecated("已过时,请参考 trackTimerStart"))); + +/** + * @abstract + * 初始化事件的计时器,允许用户指定计时单位。 + * + * @discussion + * 请参考 trackTimer + * + * @param event event 的名称 + * @param timeUnit 计时单位,毫秒/秒/分钟/小时 + */ +- (void)trackTimer:(NSString *)event withTimeUnit:(SensorsAnalyticsTimeUnit)timeUnit __attribute__((deprecated("已过时,请参考 trackTimerStart"))); + +#pragma mark- HeatMap & VisualizedAutoTrack +/** + * @abstract + * 神策 SDK 会处理 点击图,可视化全埋点url + * @discussion + * 目前处理 heatmap,visualized + * @param url 点击图的 url + * @return YES/NO + */ +- (BOOL)handleHeatMapUrl:(NSURL *)url __attribute__((deprecated("已过时,请参考 handleSchemeUrl:"))); + +/** + * 开启 可视化全埋点 分析,默认不开启, + * $AppClick 事件将会采集控件的 viewPath。 + */ +- (void)enableVisualizedAutoTrack __attribute__((deprecated("已过时,请参考 SAConfigOptions 类的 enableVisualizedAutoTrack"))); + +/** + 开启 HeatMap,$AppClick 事件将会采集控件的 viewPath + */ +- (void)enableHeatMap __attribute__((deprecated("已过时,请参考 SAConfigOptions 类的 enableHeatMap"))); + +/** + * @abstract + * Track $AppViewScreen事件 + * + * @param url 当前页面url + * @param properties 用户扩展属性 + */ +- (void)trackViewScreen:(NSString *)url withProperties:(NSDictionary *)properties __attribute__((deprecated("已过时,请参考 trackViewScreen: properties:"))); + +@end + +NS_ASSUME_NONNULL_END + diff --git a/Assets/Plugins/iOS/SensorsAnalyticsSDK.framework/Headers/SensorsAnalyticsSDK.h.meta b/Assets/Plugins/iOS/SensorsAnalyticsSDK.framework/Headers/SensorsAnalyticsSDK.h.meta new file mode 100644 index 0000000..0e4d54f --- /dev/null +++ b/Assets/Plugins/iOS/SensorsAnalyticsSDK.framework/Headers/SensorsAnalyticsSDK.h.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 4f078843194a74a4291823efe0a91540 +timeCreated: 1606819380 +licenseType: Free +DefaultImporter: + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Plugins/iOS/SensorsAnalyticsSDK.framework/Info.plist b/Assets/Plugins/iOS/SensorsAnalyticsSDK.framework/Info.plist new file mode 100644 index 0000000..6121109 Binary files /dev/null and b/Assets/Plugins/iOS/SensorsAnalyticsSDK.framework/Info.plist differ diff --git a/Assets/Plugins/iOS/SensorsAnalyticsSDK.framework/Info.plist.meta b/Assets/Plugins/iOS/SensorsAnalyticsSDK.framework/Info.plist.meta new file mode 100644 index 0000000..78a3a3b --- /dev/null +++ b/Assets/Plugins/iOS/SensorsAnalyticsSDK.framework/Info.plist.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 945ad0a26ce2d4ffeb0294a9cedf4c83 +timeCreated: 1606819380 +licenseType: Free +DefaultImporter: + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Plugins/iOS/SensorsAnalyticsSDK.framework/Modules.meta b/Assets/Plugins/iOS/SensorsAnalyticsSDK.framework/Modules.meta new file mode 100644 index 0000000..d0bed60 --- /dev/null +++ b/Assets/Plugins/iOS/SensorsAnalyticsSDK.framework/Modules.meta @@ -0,0 +1,7 @@ +fileFormatVersion: 2 +guid: c2acec4039f2a43cebee29f77d360ab9 +folderAsset: yes +DefaultImporter: + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Plugins/iOS/SensorsAnalyticsSDK.framework/Modules/module.modulemap b/Assets/Plugins/iOS/SensorsAnalyticsSDK.framework/Modules/module.modulemap new file mode 100644 index 0000000..b5c9e83 --- /dev/null +++ b/Assets/Plugins/iOS/SensorsAnalyticsSDK.framework/Modules/module.modulemap @@ -0,0 +1,6 @@ +framework module SensorsAnalyticsSDK { + umbrella header "SensorsAnalyticsSDK.h" + + export * + module * { export * } +} diff --git a/Assets/Plugins/iOS/SensorsAnalyticsSDK.framework/Modules/module.modulemap.meta b/Assets/Plugins/iOS/SensorsAnalyticsSDK.framework/Modules/module.modulemap.meta new file mode 100644 index 0000000..961a707 --- /dev/null +++ b/Assets/Plugins/iOS/SensorsAnalyticsSDK.framework/Modules/module.modulemap.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 8fcb4384acbe34b7aaac64a1aecb6f94 +timeCreated: 1606819380 +licenseType: Free +DefaultImporter: + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Plugins/iOS/SensorsAnalyticsSDK.framework/SensorsAnalyticsSDK b/Assets/Plugins/iOS/SensorsAnalyticsSDK.framework/SensorsAnalyticsSDK new file mode 100644 index 0000000..26edab0 Binary files /dev/null and b/Assets/Plugins/iOS/SensorsAnalyticsSDK.framework/SensorsAnalyticsSDK differ diff --git a/Assets/Plugins/iOS/SensorsAnalyticsSDK.framework/SensorsAnalyticsSDK.bundle.meta b/Assets/Plugins/iOS/SensorsAnalyticsSDK.framework/SensorsAnalyticsSDK.bundle.meta new file mode 100644 index 0000000..96cda1a --- /dev/null +++ b/Assets/Plugins/iOS/SensorsAnalyticsSDK.framework/SensorsAnalyticsSDK.bundle.meta @@ -0,0 +1,7 @@ +fileFormatVersion: 2 +guid: e9126ba4eb5e343e980110d3e7ac1ec0 +folderAsset: yes +DefaultImporter: + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Plugins/iOS/SensorsAnalyticsSDK.framework/SensorsAnalyticsSDK.bundle/sa_autotrack_viewcontroller_blacklist.json b/Assets/Plugins/iOS/SensorsAnalyticsSDK.framework/SensorsAnalyticsSDK.bundle/sa_autotrack_viewcontroller_blacklist.json new file mode 100644 index 0000000..c778435 --- /dev/null +++ b/Assets/Plugins/iOS/SensorsAnalyticsSDK.framework/SensorsAnalyticsSDK.bundle/sa_autotrack_viewcontroller_blacklist.json @@ -0,0 +1,143 @@ +{ + "$AppViewScreen": { + "public": [ + "UIAlertController", + "UITabBarController", + "UINavigationController", + "SAAlertController", + "SFSafariViewController", + "AVPlayerViewController", + "UIReferenceLibraryViewController", + "UIImagePickerController", + "UIDocumentMenuViewController", + "UIActivityViewController", + "SLComposeViewController", + "UISplitViewController" + ], + "private": [ + "UIApplicationRotationFollowingController", + "SFBrowserRemoteViewController", + "UIInputWindowController", + "UIKeyboardCandidateGridCollectionViewController", + "UICompatibilityInputViewController", + "UIApplicationRotationFollowingControllerNoTouches", + "UIActivityGroupViewController", + "UIKeyboardCandidateRowViewController", + "UIKeyboardHiddenViewController", + "_UIAlertControllerTextFieldViewController", + "_UILongDefinitionViewController", + "_UIResilientRemoteViewContainerViewController", + "_UIShareExtensionRemoteViewController", + "_UIRemoteDictionaryViewController", + "UISystemKeyboardDockController", + "_UINoDefinitionViewController", + "_UIActivityGroupListViewController", + "_UIRemoteViewController", + "_UIFallbackPresentationViewController", + "_UIDocumentPickerRemoteViewController", + "_UIAlertShimPresentingViewController", + "_UIWaitingForRemoteViewContainerViewController", + "_UIActivityUserDefaultsViewController", + "_UIActivityViewControllerContentController", + "_UIRemoteInputViewController", + "_UIUserDefaultsActivityNavigationController", + "_SFAppPasswordSavingViewController", + "UISnapshotModalViewController", + "WKActionSheet", + "DDSafariViewController", + "SFAirDropActivityViewController", + "CKSMSComposeController", + "DDParsecLoadingViewController", + "PLUIPrivacyViewController", + "PLUICameraViewController", + "SLRemoteComposeViewController", + "CAMViewfinderViewController", + "DDParsecNoDataViewController", + "CAMPreviewViewController", + "DDParsecCollectionViewController", + "DDParsecRemoteCollectionViewController", + "AVFullScreenPlaybackControlsViewController", + "PLPhotoTileViewController", + "AVFullScreenViewController", + "CAMImagePickerCameraViewController", + "CKSMSComposeRemoteViewController", + "PUPhotoPickerHostViewController", + "PUUIAlbumListViewController", + "PUUIPhotosAlbumViewController", + "SFAppAutoFillPasswordViewController", + "PUUIMomentsGridViewController", + "SFPasswordRemoteViewController", + "UIWebRotatingAlertController", + "UIEditUserWordController" + ] + }, + "$AppClick": { + "public": [ + "UINavigationController", + "SAAlertController", + "SFSafariViewController", + "AVPlayerViewController", + "UIReferenceLibraryViewController", + "UIImagePickerController", + "UIDocumentMenuViewController", + "UIActivityViewController", + "SLComposeViewController", + "UISplitViewController" + ], + "private": [ + "SFBrowserRemoteViewController", + "UIInputWindowController", + "UIKeyboardCandidateGridCollectionViewController", + "UICompatibilityInputViewController", + "UIApplicationRotationFollowingControllerNoTouches", + "UIActivityGroupViewController", + "UIKeyboardCandidateRowViewController", + "UIKeyboardHiddenViewController", + "_UIAlertControllerTextFieldViewController", + "_UILongDefinitionViewController", + "_UIResilientRemoteViewContainerViewController", + "_UIShareExtensionRemoteViewController", + "_UIRemoteDictionaryViewController", + "UISystemKeyboardDockController", + "_UINoDefinitionViewController", + "_UIActivityGroupListViewController", + "_UIRemoteViewController", + "_UIFallbackPresentationViewController", + "_UIDocumentPickerRemoteViewController", + "_UIAlertShimPresentingViewController", + "_UIWaitingForRemoteViewContainerViewController", + "_UIActivityUserDefaultsViewController", + "_UIActivityViewControllerContentController", + "_UIRemoteInputViewController", + "_UIUserDefaultsActivityNavigationController", + "_SFAppPasswordSavingViewController", + "UISnapshotModalViewController", + "WKActionSheet", + "DDSafariViewController", + "SFAirDropActivityViewController", + "CKSMSComposeController", + "DDParsecLoadingViewController", + "PLUIPrivacyViewController", + "PLUICameraViewController", + "SLRemoteComposeViewController", + "CAMViewfinderViewController", + "DDParsecNoDataViewController", + "CAMPreviewViewController", + "DDParsecCollectionViewController", + "DDParsecRemoteCollectionViewController", + "AVFullScreenPlaybackControlsViewController", + "PLPhotoTileViewController", + "AVFullScreenViewController", + "CAMImagePickerCameraViewController", + "CKSMSComposeRemoteViewController", + "PUPhotoPickerHostViewController", + "PUUIAlbumListViewController", + "PUUIPhotosAlbumViewController", + "SFAppAutoFillPasswordViewController", + "PUUIMomentsGridViewController", + "SFPasswordRemoteViewController", + "UIWebRotatingAlertController", + "UIEditUserWordController" + ] + } +} diff --git a/Assets/Plugins/iOS/SensorsAnalyticsSDK.framework/SensorsAnalyticsSDK.bundle/sa_autotrack_viewcontroller_blacklist.json.meta b/Assets/Plugins/iOS/SensorsAnalyticsSDK.framework/SensorsAnalyticsSDK.bundle/sa_autotrack_viewcontroller_blacklist.json.meta new file mode 100644 index 0000000..e831048 --- /dev/null +++ b/Assets/Plugins/iOS/SensorsAnalyticsSDK.framework/SensorsAnalyticsSDK.bundle/sa_autotrack_viewcontroller_blacklist.json.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 8ad250689261540c4a46c7aeb3ca539d +timeCreated: 1606819380 +licenseType: Free +TextScriptImporter: + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Plugins/iOS/SensorsAnalyticsSDK.framework/SensorsAnalyticsSDK.bundle/sa_headmap_path.json b/Assets/Plugins/iOS/SensorsAnalyticsSDK.framework/SensorsAnalyticsSDK.bundle/sa_headmap_path.json new file mode 100644 index 0000000..0f36b46 --- /dev/null +++ b/Assets/Plugins/iOS/SensorsAnalyticsSDK.framework/SensorsAnalyticsSDK.bundle/sa_headmap_path.json @@ -0,0 +1,485 @@ +{ + "type": "snapshot_request", + "payload": { + "config": { + "enums": [ + { + "name": "UIControlState", + "flag_set": true, + "base_type": "NSUInteger", + "values": [ + { + "value": 0, + "display_name": "Normal" + }, + { + "value": 1, + "display_name": "Highlighted" + }, + { + "value": 2, + "display_name": "Disabled" + }, + { + "value": 4, + "display_name": "Selected" + } + ] + }, + { + "name": "UIControlEvents", + "base_type": "NSUInteger", + "flag_set": true, + "values": [ + { + "value": 1, + "display_name": "TouchDown" + }, + { + "value": 2, + "display_name": "TouchDownRepeat" + }, + { + "value": 4, + "display_name": "TouchDragInside" + }, + { + "value": 8, + "display_name": "TouchDragOutside" + }, + { + "value": 16, + "display_name": "TouchDragEnter" + }, + { + "value": 32, + "display_name": "TouchDragExit" + }, + { + "value": 64, + "display_name": "TouchUpInside" + }, + { + "value": 128, + "display_name": "TouchUpOutside" + }, + { + "value": 256, + "display_name": "TouchCancel" + }, + { + "value": 4096, + "display_name": "ValueChanged" + }, + { + "value": 65536, + "display_name": "EditingDidBegin" + }, + { + "value": 131072, + "display_name": "EditingChanged" + }, + { + "value": 262144, + "display_name": "EditingDidEnd" + }, + { + "value": 524288, + "display_name": "EditingDidEndOnExit" + }, + { + "value": 4095, + "display_name": "AllTouchEvents" + }, + { + "value": 983040, + "display_name": "AllEditingEvents" + }, + { + "value": 251658240, + "display_name": "ApplicationReserved" + }, + { + "value": 4026531840, + "display_name": "SystemReserved" + }, + { + "value": 4294967295, + "display_name": "AllEvents" + } + ] + } + ], + "classes": [ + { + "name": "NSObject", + "superclass": null, + "properties": [ + + ] + }, + { + "name": "UIResponder", + "superclass": "NSObject", + "properties": [ + + ] + }, + { + "name": "UIScreen", + "superclass": "NSObject", + "properties": [ + { + "name": "bounds", + "type": "CGRect", + "readonly": true + }, + { + "name": "applicationFrame", + "type": "CGRect", + "readonly": true + } + ] + }, + { + "name": "UIStoryboardSegueTemplate", + "superclass": "NSObject", + "properties": [ + { + "name": "identifier", + "type": "NSString", + "readonly": true + }, + { + "name": "viewController", + "type": "UIViewController" + }, + { + "name": "performOnViewLoad", + "type": "BOOL" + } + ] + }, + { + "name": "UINavigationItem", + "superclass": "NSObject", + "properties": [ + + ] + }, + { + "name": "UIBarItem", + "superclass": "NSObject", + "properties": [ + + ] + }, + { + "name": "UIBarButtonItem", + "superclass": "UIBarItem", + "properties": [ + + ] + }, + { + "name": "UIGestureRecognizer", + "superclass": "NSObject", + "properties": [ + + ] + }, + { + "name": "UIGestureRecognizerTarget", + "superclass": "NSObject", + "properties": [ + + ] + }, + { + "name": "UIView", + "superclass": "UIResponder", + "properties": [ + { + "name": "userInteractionEnabled", + "type": "BOOL" + }, + { + "name": "frame", + "type": "CGRect" + }, + { + "name": "bounds", + "type": "CGRect" + }, + { + "name": "transform", + "type": "CGAffineTransform" + }, + { + "name": "superview", + "type": "UIView" + }, + { + "name": "window", + "type": "UIWindow" + }, + { + "name": "subviews", + "type": "NSArray" + }, + { + "name": "jjf_fingerprintVersion", + "type": "NSArray", + "use_kvc": false + }, + { + "name": "jjf_varA", + "type": "NSString", + "use_kvc": false + }, + { + "name": "sensorsAnalyticsViewID", + "type": "NSString", + "use_kvc": false + }, + { + "name": "jjf_varB", + "type": "NSString", + "use_kvc": false + }, + { + "name": "jjf_varC", + "type": "NSString", + "use_kvc": false + }, + { + "name": "jjf_varSetD", + "type": "NSArray", + "use_kvc": false + }, + { + "name": "jjf_varE", + "type": "NSString", + "use_kvc": false + }, + { + "name": "restorationIdentifier", + "type": "NSString" + } + ] + }, + { + "name": "UILabel", + "superclass": "UIView", + "properties": [ + { + "name": "text", + "type": "NSString" + } + ] + }, + { + "name": "UIImageView", + "superclass": "UIView", + "properties": [ + + ] + }, + { + "name": "UIControlTargetAction", + "superclass": "NSObject", + "properties": [ + + ] + }, + { + "name": "UIControl", + "superclass": "UIView", + "properties": [ + { + "name": "state", + "type": "UIControlState" + }, + { + "name": "enabled", + "type": "BOOL" + }, + { + "name": "allTargets", + "type": "NSSet" + }, + { + "name": "allControlEvents", + "type": "UIControlEvents" + }, + { + "name": "_targetActions", + "type": "NSArray" + }, + { + "name": "nextResponder", + "type": "UIResponder" + } + ] + }, + { + "name": "UISwitch", + "superclass": "UIControl", + "properties": [ + + ] + }, + { + "name": "UIScrollView", + "superclass": "UIView", + "properties": [ + { + "name": "contentOffset", + "type": "CGPoint" + }, + { + "name": "contentSize", + "type": "CGSize" + } + ] + }, + { + "name": "UITableView", + "superclass": "UIScrollView", + "properties": [ + { + "name": "allowsSelection", + "type": "BOOL" + } + ] + }, + { + "name": "UITableViewCell", + "superclass": "UIView", + "properties": [ + { + "name": "sa_indexPath", + "type": "NSString", + "use_kvc": false + } + ] + }, + { + "name": "UITableViewHeaderFooterView", + "superclass": "UIView", + "properties": [ + { + "name": "sa_section", + "type": "NSString", + "use_kvc": false + } + ] + }, + { + "name": "UICollectionView", + "superclass": "UIScrollView", + "properties": [ + { + "name": "allowsSelection", + "type": "BOOL" + } + ] + }, + { + "name": "UICollectionViewCell", + "superclass": "UIView", + "properties": [ + { + "name": "sa_indexPath", + "type": "NSString", + "use_kvc": false + } + ] + }, + { + "name": "UITextView", + "superclass": "UIScrollView", + "properties": [ + { + "name": "text", + "type": "NSString" + } + ] + }, + { + "name": "UIButton", + "superclass": "UIControl", + "properties": [ + + ] + }, + { + "name": "CALayer", + "superclass": "NSObject", + "properties": [ + + ] + }, + { + "name": "NSLayoutConstraint", + "superclass": "NSObject", + "properties": [ + + ] + }, + { + "name": "UIWindow", + "superclass": "UIView", + "properties": [ + { + "name": "rootViewController", + "type": "UIViewController" + }, + { + "name": "screen", + "type": "UIScreen", + "readonly": true + } + ] + }, + { + "name": "UIViewController", + "superclass": "UIResponder", + "properties": [ + { + "name": "isViewLoaded", + "type": "BOOL", + "readonly": true + }, + { + "name": "view", + "type": "UIView", + "predicate": "self.isViewLoaded == YES" + }, + { + "name": "restorationIdentifier", + "type": "NSString" + }, + { + "name": "parentViewController", + "type": "UIViewController" + }, + { + "name": "presentedViewController", + "type": "UIViewController" + }, + { + "name": "presentingViewController", + "type": "UIViewController" + }, + { + "name": "childViewControllers", + "type": "NSArray" + } + ] + } + ] + } + } +} + diff --git a/Assets/Plugins/iOS/SensorsAnalyticsSDK.framework/SensorsAnalyticsSDK.bundle/sa_headmap_path.json.meta b/Assets/Plugins/iOS/SensorsAnalyticsSDK.framework/SensorsAnalyticsSDK.bundle/sa_headmap_path.json.meta new file mode 100644 index 0000000..95a82ac --- /dev/null +++ b/Assets/Plugins/iOS/SensorsAnalyticsSDK.framework/SensorsAnalyticsSDK.bundle/sa_headmap_path.json.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: ba445167d535841ebb0821fb0735fed7 +timeCreated: 1606819380 +licenseType: Free +TextScriptImporter: + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Plugins/iOS/SensorsAnalyticsSDK.framework/SensorsAnalyticsSDK.bundle/sa_mcc_mnc_mini.json b/Assets/Plugins/iOS/SensorsAnalyticsSDK.framework/SensorsAnalyticsSDK.bundle/sa_mcc_mnc_mini.json new file mode 100644 index 0000000..e0af46c --- /dev/null +++ b/Assets/Plugins/iOS/SensorsAnalyticsSDK.framework/SensorsAnalyticsSDK.bundle/sa_mcc_mnc_mini.json @@ -0,0 +1 @@ +{"334040":"AT&T\/IUSACell","42577":"Hot Mobile\/Mirs","45417":"Vodafone\/SmarTone","44032":"NTT Docomo","24802":"Radiolinja Eesti","376352":"IslandCom Communications Ltd.","74000":"MOVISTAR\/OteCel","44040":"SoftBank Mobile Corp","40411":"Sterling Cellular Ltd.","25092":"Printelefone","50506":"H3G Ltd.","44009":"NTT Docomo","25568":"Beeline","22001":"Telenor\/Mobtel","35830":"Cingular Wireless","311830":"Thumb Cellular Limited Partnership","25704":"BeST","44017":"NTT Docomo","41820":"ZAIN\/Atheer\/Orascom","50514":"AAPT Ltd. ","41305":"Airtel","23402":"O2 Ltd.","29341":"Mobitel","44025":"NTT Docomo","311270":"Verizon Wireless","45418":"CSL Ltd.","23410":"O2 Ltd.","44033":"NTT Docomo","40404":"Idea Cellular Ltd.","24803":"Tele2 Eesti AS","74001":"Claro\/Port","44041":"SoftBank Mobile Corp","40412":"Escotel Mobile Communications","26606":"CTS Mobile","41805":"Asia Cell","41677":"Orange\/Petra","46699":"TransAsia","25093":"Telecom XXL","311282":"Verizon Wireless","50507":"Vodafone","30801":"Ameris","22002":"Telenor\/Mobtel","404045":"Bharti Airtel Limited (Karnataka) (India)","44018":"NTT Docomo","23403":"Airtel\/Vodafone","44026":"NTT Docomo","45419":"HKT\/PCCW","310740":"Telemetrix Inc.","23411":"O2 Ltd.","44034":"NTT Docomo","40405":"Fascel","310460":"TMP Corporation","346006":"Digicel Ltd.","37650":"Digicel","310180":"Cingular Wireless","74002":"Alegro\/Telcsa","40413":"Barakhamba Sales & Serv.","40277":"TashiCell","24804":"Top Connect OU","44042":"SoftBank Mobile Corp","467193":"Sun Net","50508":"Railcorp\/Vodafone","44050":"KDDI Corporation","22003":"MTS\/Telekom Srbija","21601":"Pannon\/Telenor","50516":"Victorian Rail Track Corp. (VicTrack)","44019":"NTT Docomo","311271":"Verizon Wireless","50524":"Advanced Comm Tech Pty.","44027":"NTT Docomo","41830":"Orascom Telecom","23412":"Railtrack Plc","44035":"NTT Docomo","65301":"SwaziTelecom","302320":"mobilicity","45428":"China Mobile\/Peoples","23420":"H3G Hutchinson","90111":"InMarSAT","73601":"Viva\/Nuevatel","40414":"Spice","311283":"Verizon Wireless","376050":"Digicel TCI Ltd","20201":"Cosmote","334030":"Movistar\/Pegaso","44051":"KDDI Corporation","40422":"Idea Cellular Ltd.","50509":"Airnet Commercial Australia Ltd..","366020":"Cingular Wireless\/Digicel","44043":"SoftBank Mobile Corp","40430":"Usha Martin Telecom","41308":"H3G Hutchison ","44028":"NTT Docomo","36251":"TELCELL GSM","44036":"NTT Docomo","40407":"Idea Cellular Ltd.","45429":"HKT\/PCCW","90112":"Maritime Communications Partner AS","44044":"SoftBank Mobile Corp","73602":"Entel Pcs","311260":"SLO Cellular Inc \/ Cellular One of San Luis","65310":"Swazi MTN","40415":"Aircel Digilink India","26609":"eazi telecom","20202":"Cosmote","41808":"Sanatel","44052":"KDDI Corporation","20210":"Tim\/Wind","22005":"VIP Mobile","44060":"NTT Docomo","311272":"Verizon Wireless","50526":"Dialogue Communications Pty Ltd","44029":"NTT Docomo","90105":"Thuraya Satellite","35850":"Digicel (St Lucia) Limited","23414":"HaySystems","732187":"eTb","44037":"NTT Docomo","41840":"Korek","64901":"MTC","90113":"Antarctica","23422":"Routotelecom","44045":"SoftBank Mobile Corp","73603":"Tigo","40416":"Hexcom India","63001":"Vodacom","23430":"Everyth. Ev.wh.\/T-Mobile","20203":"OTE Hellenic Telecommunications Organization SA","311284":"Verizon Wireless","40424":"Idea Cellular Ltd.","310730":"United States Cellular Corp.","310450":"Northeast Colorado Cellular Inc.","44053":"KDDI Corporation","44061":"NTT Docomo","310170":"AT&T Wireless Inc.","50519":"Lycamobile Pty Ltd","64282":"Spacetel \/ Econet \/ Leo ","55201":"Palau National Communications Corp. (PNCC) (Palau","23407":"Cable and Wireless ","364390":"Bahamas Telco. Comp.","46000":"中国移动","23415":"Vodafone","44038":"NTT Docomo","40409":"Reliance Telecom Private","64902":"Switch\/Nam. Telec.","90114":"AeroMobile","23423":"Vectofone Mobile Wifi","44046":"SoftBank Mobile Corp","708001":"SERCOM\/CLARO","40417":"Aircel","63002":"Airtel\/ZAIN","23431":"Everyth. Ev.wh.\/T-Mobile","29370":"Telemach\/TusMobil\/VEGA","20204":"Organismos Sidirodromon Ellados (OSE)","40425":"Aircel","45447":"shared by private TETRA systems","44054":"KDDI Corporation","44062":"NTT Docomo","62101":"Visafone","40433":"Aircel","311273":"Verizon Wireless","70401":"Claro","23408":"OnePhone","44070":"KDDI Corporation","40441":"RPG Cellular","334020":"TelCel\/America Movil","46001":"中国联通","23416":"Opal Telecom","44039":"NTT Docomo","63510":"MTN\/Rwandacell","64903":"Leo \/ Orascom","23424":"Stour Marine","44047":"SoftBank Mobile Corp","40418":"Reliance Telecom Private","62601":"CSTmovel","311285":"Verizon Wireless","23432":"Everyth. Ev.wh.\/T-Mobile","20205":"Vodafone","25099":"BeeLine\/VimpelCom","311810":"Bluegrass Wireless LLC","44055":"KDDI Corporation","44063":"NTT Docomo","40434":"BSNL","311250":"Wave Runner LLC","54801":"Telecom Cook Islands","70402":"TIGO\/COMCEL","23409":"Tismi","44071":"KDDI Corporation","40442":"Aircel","46002":"中国移动","23417":"FlexTel","61201":"Comstar","40450":"Reliance Telecom Private","21630":"T-mobile\/Magyar","360050":"Digicel","23425":"Truphone","44048":"SoftBank Mobile Corp","52000":"Hutch\/CAT CDMA","708002":"Telefonica\/CELTEL","40419":"Escotel Mobile Communications","23433":"Everyth. Ev.wh.\/Orange","732130":"Avantel SAS","29364":"T-2 d.o.o.","46010":"中国联通","44056":"KDDI Corporation","310990":"E.N.M.R. Telephone Coop.","20214":"CyTa Mobile","44064":"NTT Docomo","70267":"DigiCell","61701":"Orange\/Cellplus","311274":"Verizon Wireless","29001":"Tele Greenland","70403":"Telefonica","44072":"KDDI Corporation","732142":"UNE EPM Telecomunicaciones SA ESP","310440":"Dobson Cellular Systems","502195":"XOX Com Sdn Bhd","23418":"Cloud9\/wire9 Tel.","61202":"Atlantik Tel.\/Moov","45601":"Mobitel\/Cam GSM","44080":"KDDI Corporation","310160":"T-Mobile","53901":"Tonga Communications","23426":"Lycamobile","46011":"中国电信","44049":"NTT Docomo","52001":"AIS\/Advanced Info Service","374140":"LaqTel Ltd.","29501":"Swisscom FL AG","23434":"Everyth. Ev.wh.\/Orange","732154":"Virgin Mobile Colombia SAS","20207":"AMD Telecom SA","40428":"Aircel","63005":"SuperCell","311286":"Verizon Wireless","40451":"BSNL","60301":"ATM Mobils","46003":"中国电信","40436":"Reliance Telecom Private","61702":"Mahanagar Telephone","70268":"International Telco (INTELCO)","44065":"NTT Docomo","23450":"Jersey Telecom","44073":"KDDI Corporation","40444":"Spice","61710":"Emtel Ltd","52501":"Singtel","44081":"KDDI Corporation","62120":"Airtel\/ZAIN\/Econet","61203":"Orange","41845":"Mobitel (Iraq-Kurdistan) and Moutiny","23419":"PMN\/Teleware","45602":"Smart Mobile","63513":"TIGO","23427":"Vodafone","334010":"NEXTEL","40460":"Aircel Digilink India","40452":"Reliance Telecom Private","46004":"中国卫通","29502":"Orange","23435":"JSC Ingenicum","46020":"中国铁通","44058":"NTT Docomo","40429":"Aircel","60302":"Orascom \/ DJEZZY","60801":"Orange\/Sonatel","44066":"NTT Docomo","311275":"Verizon Wireless","61703":"Mahanagar Telephone","50571":"Telstra Corp. Ltd.","28601":"Turkcell","44074":"KDDI Corporation","23451":"Jersey Telecom","311800":"Bluegrass Wireless LLC","52502":"Singtel","44082":"KDDI Corporation","35001":"Telecommunications (Bermuda & West Indies) Ltd (Digicel Bermuda)","61204":"Comium","45603":"QB\/Cambodia Adv. Comms.","63514":"Airtel","40453":"BSNL","44090":"SoftBank Mobile Corp","23428":"Marthon Telecom","311287":"Verizon Wireless","46005":"中国电信","52003":"Advanced Wireless Networks\/AWN","60802":"TIGO\/Sentel GSM","23436":"Cable and Wireless Isle of Man","20209":"Tim\/Wind","60303":"Oreedo\/Wataniya \/ Nedjma ","27201":"Vodafone Eircell","44067":"NTT Docomo","40438":"BSNL","50572":"Telstra Corp. Ltd.","28602":"Vodafone-Telsim","43801":"MTS\/Barash Communication","44075":"KDDI Corporation","52503":"MobileOne Ltd","310980":"AT&T Wireless Inc.","44083":"KDDI Corporation","35002":"M3 Wireless Ltd","61205":"MTN","50201":"Art900","45604":"Cambodia Advance Communications Co. Ltd (CADCOMMS)","40454":"BSNL","46006":"中国联通","35010":"DigiCel \/ Cingular","62130":"MTN","310710":"Arctic Slope Telephone Association Cooperative Inc.","52004":"True Move\/Orange","36403":"Smart Communications","40462":"BSNL","23437":"Synectiv Ltd.","40470":"Hexacom India","310430":"GCI Communication Corp.","60803":"Expresso\/Sudatel","27202":"Three\/O2\/Digifone","310150":"AT&T Wireless Inc.","44068":"NTT Docomo","311276":"Verizon Wireless","36291":"SETEL GSM","52020":"ACeS Thailand - ACeS Regional Services Co Ltd","374130":"Digicel","28603":"AVEA\/Aria","43802":"Altyn Asyr\/TM-Cell","44076":"KDDI Corporation","44084":"KDDI Corporation","45605":"Smart Mobile","61206":"OriCell","40455":"BSNL","52512":"GRID Communications Pte Ltd","46007":"中国移动","44092":"SoftBank Mobile Corp","42901":"NT Mobile \/ Namaste","28967":"Aquafon","312040":"Custer Telephone Cooperative Inc.","52005":"Total Access (DTAC)","50210":"Digi Telecommunications","29505":"Telecom FL1 AG","41001":"Mobilink","344030":"APUA PCS","40471":"BSNL","311288":"Verizon Wireless","27203":"Meteor Mobile Ltd.","26801":"Vodafone","42402":"Etisalat","44069":"NTT Docomo","27211":"Tesco Mobile\/Liffey Telecom","28604":"AVEA\/Aria","44077":"KDDI Corporation","52505":"Starhub","41501":"MIC1 (Alfa)","44085":"KDDI Corporation","45606":"Smart Mobile","61207":"Aircomm SA","40456":"Escotel Mobile Communications","36269":"Polycom N.V.\/ Digicel","50590":"Singtel Optus","44093":"SoftBank Mobile Corp","40464":"BSNL","28968":"A-Mobile","50211":"MTX Utara","42902":"Ncell","46008":"中国移动","29506":"CUBIC (Liechtenstein","62140":"M-Tel\/Nigeria Telecom. Ltd.","40472":"BSNL","27204":"Access Telecom Ltd.","40480":"BSNL","42403":"DU","311277":"Verizon Wireless","40101":"Beeline\/KaR-Tel LLP","23455":"Guernsey Telecoms","502151":"Baraka Telecom Sdn Bhd","44078":"Okinawa Cellular Telephone","338050":"DIGICEL\/Mossel","502198":"CelCom","52506":"Starhub","25901":"Orange\/Voxtel","44086":"KDDI Corporation","62125":"Visafone","24001":"Telia Mobile","40457":"BSNL","46009":"中国联通","311289":"Verizon Wireless","44094":"SoftBank Mobile Corp","50212":"Maxis","41003":"UFONE\/PAKTel","29507":"First Mobile AG","40473":"BSNL","722070":"Movistar\/Telefonica","50220":"Electcoms Wireless Sdn Bhd","52015":"ACT Mobile","310690":"Keystone Wireless LLC","26803":"NOS\/Optimus","27205":"Three\/H3G","40481":"BSNL","350000":"Bermuda Digital Communications Ltd (BDC)","52023":"Digital Phone Co.","27213":"Lycamobile","40102":"K-Cell","310700":"Cross Valliant Cellular Partnership","27077":"Millicom Tango GSM","36430":"Bahamas Telco. Comp.","44079":"KDDI Corporation","41882":"Korek","310420":"Cincinnati Bell Wireless LLC","25902":"Moldcell","52507":"Singtel","310140":"GTA Wireless","41503":"MIC2\/LibanCell\/MTC","24002":"H3G Access AB","45608":"Metfone","44087":"NTT Docomo","40458":"BSNL","44095":"SoftBank Mobile Corp","40466":"BSNL","24010":"Spring Mobil AB","50213":"CelCom","374120":"Bmobile\/TSTT","41004":"ZONG\/CMPak","42904":"Smart Cell","40474":"BSNL","23101":"Orange","26804":"Lycamobile","40482":"Escorts Telecom Ltd.","311278":"Verizon Wireless","62150":"Glo Mobile","36295":"EOCG Wireless NV","312030":"Cross Wireless Telephone Co.","23457":"Sky UK Limited","502152":"YES","22200":"VOIP Line","21670":"Vodafone","25903":"IDC\/Unite ","44088":"KDDI Corporation","45609":"Sotelco\/Beeline","40459":"BSNL","44096":"SoftBank Mobile Corp","732111":"TIGO\/Colombia Movil","24011":"Lindholmen Science Park AB","40467":"Reliance Telecom Private","40475":"BSNL","23102":"T-Mobile","27207":"eircom Ltd","40483":"Reliable Internet Services","311490":"Sprint Spectrum","732123":"Movistar","23458":"Manx Telecom","311500":"Cambridge Telephone Company Inc.","22201":"TIM","21671":"UPC Magyarorszag Kft.","25904":"Eventis Mobile","311220":"United States Cellular Corp.","358110":"Cable & Wireless","44089":"KDDI Corporation","24004":"H3G Access AB","41892":"Itisaluna and Kalemat","44097":"SoftBank Mobile Corp","45618":"MFone\/Camshin\/Cellcard","24012":"Lycamobile Ltd","40468":"Mahanagar Telephone Nigam","41006":"Telenor","40476":"BSNL","24020":"Wireless Maingate AB","23103":"4Ka","52018":"Total Access (DTAC)","26806":"MEO\/TMN","311279":"Verizon Wireless","28988":"A-Mobile","722340":"Telecom Personal S.A.","502153":"Webe\/Packet One Networks (Malaysia) Sdn Bhd","62160":"ETISALAT","310960":"Uintah Basin Electronics Telecommunications Inc.","22202":"Elsacom","25905":"IDC\/Unite ","310680":"AT&T Wireless Inc.","22210":"Vodafone","24005":"Svenska UMTS-N","23475":"Inquam Telecom Ltd","44098":"SoftBank Mobile Corp","40469":"Mahanagar Telephone Nigam","310410":"AT&T Wireless Inc.","50216":"Digi Telecommunications","24013":"Ventelo Sverige AB","41007":"Warid Telecom","310130":"North Carolina RSA 3 Cellular Tel. Co.","40477":"BSNL","23104":"T-Mobile","23491":"Vodafone","27209":"Clever Communications Ltd","26807":"NOS\/Optimus","40485":"Reliance Telecom Private","750001":"Cable and Wireless South Atlantic Ltd (Falkland Islands","65001":"TNM\/Telekom Network Ltd.","312290":"Uintah Basin Electronics Telecommunications Inc.","53943":"Shoreline Communication","50588":"Localstar Holding Pty. Ltd","24006":"Telenor (Vodafone)","23476":"BT Group","44099":"NTT Docomo","24014":"TDC Sverige AB","50217":"Maxis","72400":"Nextel (Telet)","41008":"Instaphone","65501":"Vodacom","40478":"Idea Cellular Ltd.","24022":"Eu Tel AB","23105":"Orange","23492":"Cable and Wireless ","73801":"DigiCel","40486":"Barakhamba Sales & Serv.","24030":"NextGen Mobile Ltd (CardBoardFish)","732101":"Comcel S.A. Occel S.A.\/Celcaribe","722341":"Telecom Personal S.A.","40107":"Dalacom\/Altel","502154":"Tron\/Talk Focus Sdn Bhd","65010":"Airtel\/Zain\/Celtel ltd.","24007":"Tele2 Sverige AB","311480":"Verizon Wireless","23477":"BT Group","64101":"Airtel\/Celtel","24015":"Wireless Maingate Nordic AB","50218":"U Mobile","72401":"Vivo S.A.\/Telemig ","21303":"Mobiland","65502":"8.ta","40479":"CellOne A&N","24023":"Infobip Ltd.","23106":"O2","73802":"Cellink Plus","65510":"MTN","41532":"Cellis","40487":"Escorts Telecom Ltd.","20402":"Tele2","64601":"Airtel\/MADACOM","20410":"KPN Telecom B.V.","21803":"Eronet Mobile","27099":"Orange\/VOXmobile S.A.","722330":"Claro\/ CTI\/AMX","24008":"Telenor (Vodafone)","23478":"Wave Telecom Ltd","55280":"Palau Mobile Corp. (PMC) (Palau","310950":"Unknown","50219":"CelCom","24016":"42 Telecom AB","72402":"TIM","310670":"Northstar","64110":"MTN Ltd.","24024":"Telenor (Vodafone)","72410":"Vivo S.A.\/Telemig ","310390":"Yorkville Telephone Cooperative","41533":"Cellis","63201":"GuineTel","40488":"Escorts Telecom Ltd.","732102":"Movistar","23115":"Orange","20403":"Voiceworks Mobile BV","502155":"Samata Communications Sdn Bhd","310400":"Minnesota South. Wirel. Co. \/ Hickory","64602":"Orange\/Soci","23494":"H3G Hutchinson","310120":"Sprint Spectrum","22206":"Vodafone","354860":"Cable & Wireless ","311481":"Verizon Wireless","50599":"Railcorp\/Vodafone","63701":"Telesom ","312280":"Cellular Network Partnership LLC","24017":"Gotalandsnatet AB","72403":"TIM","64111":"Uganda Telecom Ltd.","22230":"RFI Rete Ferroviaria Italiana SpA","24025":"Digitel Mobile Srl","72411":"Vivo S.A.\/Telemig ","41534":"FTML Cellis","312010":"Missouri RSA No 5 Partnership","65512":"MTN","63202":"SpaceTel","20404":"Vodafone Libertel","40489":"Escorts Telecom Ltd.","64603":"Sacel","54001":"BREEZE","20412":"KPN\/Telfort","22207":"Noverca Italia Srl","21805":"M-Tel","62301":"Centrafr. Telecom+","63090":"Africell","20420":"T-mobile\/former Orange","70601":"CLARO\/CTE","24018":"Generic Mobile Systems Sweden AB","72404":"TIM","63710":"Nationlink","24026":"Beepsend","72412":"Claro\/Albra\/America Movil","41535":"Cellis","62801":"Libertis S.A.","732103":"TIGO\/Colombia Movil","63203":"Orange","20405":"Elephant Talk Communications Premium Rate Services Netherlands BV","65521":"Cape Town Metropolitan","64604":"Telma","54002":"bemobile","36439":"Bahamas Telco. Comp.","22208":"Fastweb SpA","62302":"Telecel Centraf. ","54010":"BREEZE","20421":"NS Railinfrabeheer B.V.","311482":"Verizon Wireless","70602":"Digicel","338020":"Cable & Wireless","24019":"Mundio Mobile (Sweden) Ltd","72405":"Claro\/Albra\/America Movil","61401":"Orange\/Sahelc.","65506":"Sentech","24027":"Fogg Mobile AB","722320":"Claro\/ CTI\/AMX","41536":"MIC2\/LibanCell\/MTC","62802":"MOOV\/Telecel","37001":"Orange","24035":"42 Telecom AB","20406":"Mundio\/Vectone Mobile","310940":"Poka Lambro Telco Ltd.","310660":"T-Mobile","20414":"6GMOBILE BV","310380":"AT&T Wireless Inc.","61901":"Airtel\/Zain\/Celtel","29201":"Prima Telecom","62303":"Orange\/Celca","70603":"Telemovil","63704":"Somafone","72406":"Vivo S.A.\/Telemig ","61402":"Airtel\/Zain\/CelTel","64114":"Orange","65507":"Cell C","71021":"Empresa Nicaraguense de Telecomunicaciones SA (ENITEL)","24028":"CoolTEL Aps","22233":"PosteMobile SpA","37002":"Claro","41537":"MIC2\/LibanCell\/MTC","62803":"Airtel\/ZAIN\/Celtel Gabon S.A.","64122":"Airtel\/Warid","29701":"Telenor\/Promonte GSM","24036":"ID Mobile","20407":"Teleena Holding BV","312270":"Cellular Network Partnership LLC","64130":"K2 Telecom Ltd","60501":"Orange","20415":"Ziggo BV","72430":"Oi (TNL PCS \/ Oi)","62304":"Nationlink","61902":"Tigo\/Millicom","311483":"Verizon Wireless","20423":"Aspider Solutions","70604":"Telefonica","72407":"CTBC\/Triangulo ","61403":"MOOV\/TeleCel","28301":"ArmenTel\/Beeline","22234":"BT Italia SpA","24029":"Mercury International Carrier Services","72415":"Sercontel Cel","37003":"TRIcom","41538":"MIC2\/LibanCell\/MTC","62804":"Azur\/Usan S.A.","71030":"Movistar","29702":"Monet\/T-mobile","20408":"KPN Telecom B.V.","72423":"Vivo S.A.\/Telemig ","60502":"TuniCell\/Tunisia Telecom","63086":"Orange RDC sarl","20416":"T-Mobile B.V.","72431":"Oi (TNL PCS \/ Oi)","61903":"Africel","311460":"Fisher Wireless Services Inc.","20424":"Private Mobility Nederland BV","28801":"Faroese Telecom","70605":"INTELFON SA de CV","72408":"TIM","61404":"Orange\/Sahelc.","22235":"Lycamobile Srl","72416":"Brazil Telcom","37004":"Trilogy Dominicana S. A.","41539":"MIC2\/LibanCell\/MTC","28310":"Orange","22243":"Telecom Italia Mobile SpA","29703":"Mtel","20409":"Lycamobile Ltd","72424":"Amazonia Celular S\/A","63730":"Golis","60503":"Oreedo\/Orascom","27401":"Siminn","43002":"Etisalat","20417":"Intercity Mobile Communications BV","72432":"CTBC Celular SA (CTBC)","405034":"TATA \/ Karnataka","61904":"Comium","311484":"Verizon Wireless","722310":"Claro\/ CTI\/AMX","28802":"Kall GSM","42101":"Sabaphone","310650":"Jasper","310370":"Docomo","310090":"Edge Wireless LLC","26001":"Polkomtel\/Plus","22244":"WIND (Blu) -","310100":"Plateau Telecommunications Inc.","64133":"Smile Communications Uganda Ltd","63088":"Yozma Timeturns sprl (YTT)","27402":"Vodafone\/Tal hf","20418":"UPC Nederland BV","72433":"CTBC Celular SA (CTBC)","42601":"Batelco","61905":"Africel","302780":"Sask Tel Mobility","28803":"Edge Mobile Sp\/F","42102":"MTN\/Spacetel","64118":"Suretelecom Uganda Ltd","28304":"Karabakh Telecom","26002":"T-Mobile\/ERA","65519":"Wireless Business Solutions (Pty) Ltd","41201":"Afghan Wireless\/AWCC","29577":"Alpmobile\/Tele2","26010":"Sferia","63089":"TIGO\/Oasis","27403":"Vodafone\/Tal hf","72434":"CTBC Celular SA (CTBC)","42602":"ZAIN\/Vodafone","311485":"Verizon Wireless","27411":"NOVA","346140":"LIME \/ Cable & Wirel.","33401":"NEXTEL","42103":"Yemen Mob. CDMA","41701":"Syriatel Holdings","28305":"Vivacell","72419":"Vivo S.A.\/Telemig ","311170":"PetroCom","26003":"Orange\/IDEA\/Centertel","26011":"NORDISK Polska","60506":"TuniCell\/Tunisia Telecom","27404":"VIKING\/IMC","20428":"Lancelot BV","33402":"TelCel\/America Movil","42104":"HITS\/Y Unitel","41702":"MTN\/Spacetel","24201":"Telenor","54509":"Kiribati Frigate","722020":"Nextel","26004":"Tele2","310920":"Get Mobile Inc.","41203":"WaselTelecom (WT)","26012":"Cyfrowy POLSAT S.A.","310360":"Cellular Network Partnership LLC","27405":"Vodafone\/Tal hf","42604":"VIVA","311486":"Verizon Wireless","24701":"Latvian Mobile Phone","352110":"Cable & Wireless","33403":"Movistar\/Pegaso","24202":"Netcom","63719":"HorTel","312530":"Sprint Spectrum","302490":"WIND","26005":"Orange\/IDEA\/Centertel","22248":"Telecom Italia Mobile SpA","302500":"Videotron","26013":"Sferia","302220":"Telus Mobility","72437":"Unicel do Brasil Telecomunicacoes Ltda","41220":"Roshan\/TDCA ","24702":"Tele2","33404":"AT&T\/IUSACell","61925":"Mobitel","23801":"TDC Denmark","24203":"Teletopia","62199":"Starcomms","26006":"Play\/P4","26014":"Sferia","348570":"Caribbean Cellular","27407":"IceCell","311440":"Bluegrass Wireless LLC","72438":"Claro\/Albra\/America Movil","311487":"Verizon Wireless","24703":"TRIATEL\/Telekom Baltija","72454":"PORTO SEGURO TELECOMUNICACOES","63760":"Nationlink","24204":"Tele2","23802":"Telenor\/Sonofon","24212":"Telenor","26007":"Play\/P4","23810":"TDC Denmark","73000":"TESAM SA","24220":"Jernbaneverket (GSM-R)","26015":"Tele2","74401":"Hola\/VOX","27408":"Siminn","72439":"Nextel (Telet)","722010":"Compania De Radiocomunicaciones Moviles SA","310910":"Verizon Wireless","40177":"Tele2\/NEO\/MTS","41230":"Etisalat ","310350":"Mohave Cellular LP","310070":"AT&T Wireless Inc.","23803":"Mach Connectivity ApS","24205":"Network Norway AS","73001":"Entel Telefonia Mov","26008":"e-Telko","24221":"Jernbaneverket (GSM-R)","26016":"Mobyland","74402":"Claro\/Hutchison","27409":"Amitelo","302760":"Public Mobile","311488":"Verizon Wireless","52099":"True Move\/Orange","65201":"Mascom Wireless (Pty) Ltd.","24705":"Bite","24206":"ICE Nordisk Mobiltelefon AS","23804":"NextGen Mobile Ltd (CardBoardFish)","73002":"TELEFONICA","26009":"Lycamobile","23812":"Lycamobile Ltd","24214":"ICE Nordisk Mobiltelefon AS","65701":"Eritel","24222":"Network Norway AS","26017":"Aero2 SP","23820":"Telia","74403":"Compa","73010":"Entel Telefonia","20601":"Belgacom\/Proximus","24706":"SIA Rigatta","65202":"Orange","311710":"Northeast Wireless Networks LLC","311430":"RSA 1 Limited Partnership","41240":"Areeba\/MTN","23805":"ApS KBUS","24207":"Ventelo AS","64301":"mCel","63771":"Somtel","73003":"Claro","21890":"BH Mobile","24223":"Lycamobile Ltd","26018":"AMD Telecom.","74404":"Tigo\/Telecel","35099":"CellOne Ltd","63400":"Canar Telecom","311489":"Verizon Wireless","73011":"Celupago SA","20602":"SNCT\/NMBS","24707":"SIA Master Telecom","64801":"Net One","20610":"Mobistar\/Orange","33409":"NEXTEL","22277":"IPSE 2000","26034":"T-Mobile\/ERA","310890":"Verizon Wireless","64166":"i-Tel Ltd","41709":"Syriatel Holdings","71201":"ICE","24208":"TDC Mobil A\/S","23806":"H3G","310900":"Cable & Communications Corp.","262n\/a":"Talkline","71073":"Claro","73004":"Nextel SA","310620":"Coleman County Telco \/Trans TX","310340":"Westlink Communications, LLC","73012":"Telestar Movil SA","74405":"TIM\/Nucleo\/Personal","63401":"ZAIN\/Mobitel","342050":"Digicel","23830":"Telia","24708":"SIA IZZI","65204":"BeMOBILE","26035":"PKP Polskie Linie Kolejowe S.A.","71202":"ICE","24209":"Com4 AS","23807":"Mundio Mobile","64303":"Movitel","312230":"North Dakota Network Company","41250":"Etisalat ","73005":"Nextel SA","62001":"MTN","73013":"Tribe Mobile SPA","23823":"Banedanmark","20468":"Unify Mobile","63402":"MTN","362951":"UTS Wireless","24709":"SIA Camel Mobile","33450":"AT&T\/IUSACell","64803":"Telecel","54201":"Vodafone","26036":"Mundio Mobile Sp. z o.o.","62501":"CV Movel","20620":"Base\/KPN","71203":"Claro","64304":"Vodacom","63902":"Safaricom Ltd.","73006":"Blue Two Chile SA","62002":"Vodafone","63782":"Somtel","311420":"Northwest Missouri Cellular Limited Partnership","73014":"Netline Telefonica Movil Ltda","20469":"KPN Telecom B.V.","311140":"Cross Wireless Telephone Co.","316010":"Sprint Spectrum","61101":"Orange\/Sonatel\/Spacetel","45500":"Smartone Mobile","20605":"Telenet BidCo NV","64804":"Econet","54202":"DigiCell","62502":"T+ Telecom","71204":"Movistar","22288":"WIND (Blu) -","63903":"Airtel\/Zain\/Celtel Ltd.","732020":"UNE EPM Telecomunicaciones SA ESP","73007":"TELEFONICA","62003":"Milicom\/Tigo","61601":"Libercom","25999":"IDC\/Unite ","71220":"Virtualis","73015":"Cibeles Telecom SA","37201":"Comcel","45501":"C.T.M. TELEMOVEL+","61102":"SotelGui","20606":"Lycamobile Belgium","310610":"Elkhart TelCo. \/ Epic Touch Co.","342600":"LIME","26038":"CallFreedom Sp. z o.o.","310330":"T-Mobile","29401":"T-Mobile\/Mobimak","45002":"KT Freetel Co. Ltd.","60201":"Orange\/Mobinil","73008":"VTR Banda Ancha SA","62004":"Expresso Ghana Ltd","61602":"Etisalat\/MOOV","51000":"PT Pasifik Satelit Nusantara (PSN)","37202":"Digicel","63405":"Vivacell","312220":"Missouri RSA No 5 Partnership","316011":"Southern Communications Services Inc.","45502":"China Telecom","61103":"Intercel","60701":"Gamcel","28001":"Vodafone\/CyTa","23199":"Zeleznice Slovenskej republiky (ZSR)","36301":"Setar GSM","51500":"Fix Line","29402":"ONE\/Cosmofone","45003":"SK Telecom","60202":"Vodafone\/Mirsfone ","63905":"Econet Wireless","73009":"Nextel SA","61603":"MTN\/Spacetel","51001":"Indosat\/Satelindo\/M3","37203":"National Telecom SA (NatCom)","36801":"C-COM","63406":"ZAIN\/Mobitel","45503":"Hutchison Telephone Co. Ltd","61104":"MTN\/Areeba","60702":"Africel","54720":"Vini\/Tikiphone","311410":"Iowa RSA No. 2 Limited Partnership","36302":"Digicel","63422":"MTN","28010":"MTN\/Areeba","29403":"VIP Mobile","45004":"KT Freetel Co. Ltd.","51501":"Globe Telecom","60203":"ETISALAT","22299":"Hi3G","62006":"Airtel\/ZAIN","61604":"Bell Benin\/BBCOM","242017":"Ventelo AS","43701":"Beeline\/Bitel","23828":"CoolTEL ApS","51010":"Telkomsel","63407":"Sudani One","45504":"C.T.M. TELEMOVEL+","61105":"Celcom","63415":"Sudani One","60703":"Comium","27601":"AMC\/Cosmote","310870":"Kaplan Telephone Company Inc.","42800":"Skytel Co. Ltd","310590":"Verizon Wireless","51502":"Globe Telecom","330110":"Puerto Rico Telephone Company Inc. (PRTC)","45005":"SK Telecom Co. Ltd","34001":"Orange Caribe","310600":"New-Cell Inc.","63907":"Orange","310320":"Smith Bagley Inc.","62007":"GloMobile","61605":"GloMobile","310040":"Matanuska Tel. Assn. Inc.","73019":"Sociedad Falabella Movil SPA","51011":"PT. Excelcom","26201":"T-mobile\/Telekom","63408":"Vivacell","45505":"Hutchison Telephone Co. Ltd","60704":"Q-Cell","27602":"Vodafone ","41280":"Afghan Telecom Corp. (AT)","51503":"Smart","43211":"MCI\/TCI","45006":"LG Telecom","20498":"T-Mobile B.V.","34002":"Outremer Telecom","28020":"PrimeTel PLC","36320":"Digicel","43703":"AkTel LLC","26202":"Vodafone D2","41401":"Myanmar Post & Teleco.","54715":"Pacific Mobile Telecom (PMT)","45506":"Smartone Mobile","26210":"DB Netz AG","27603":"Eagle Mobile","311670":"Pine Belt Cellular, Inc.","34003":"TelCell GSM","311390":"Verizon Wireless","43220":"Rightel","34011":"TelCell GSM","40001":"Azercell Telekom B.M.","311120":"Choice Phone LLC","26203":"E-Plus","51021":"Indosat\/Satelindo\/M3","26211":"O2","27604":"PLUS Communication Sh.a","51505":"SUN\/Digitel","45008":"KT Freetel Co. Ltd.","310860":"Texas RSA 15B2 Limited Partnership","41902":"Zain","34012":"UTS Caraibe","40002":"J.V. Bakcell GSM 2000","310580":"PCS ONE","34020":"Bouygues\/DigiCel","43705":"MEGACOM","26204":"Vodafone D2","352050":"Digicel","310310":"T-Mobile","26212":"E-Plus","26220":"E-Plus","43214":"TKC\/KFZO","23001":"T-Mobile \/ RadioMobil","312190":"Sprint Spectrum","41903":"Wataniya","302720":"Rogers AT&T Wireless","51007":"Flexi (PT Telkom) (CDMA)","40003":"Caspian American Telecommunications LLC (CATEL)","24410":"TDC Oy Finland","26205":"E-Plus","26213":"Mobilcom","356110":"Cable & Wireless","732001":"TIGO\/Colombia Movil","23002":"O2","44140":"NTT Docomo","41904":"Viva","24403":"DNA\/Finnet","40004":"Azerfon.","51008":"Axis\/Natrindo","24411":"Mundio Mobile (Finland) Ltd","26206":"T-mobile\/Telekom","41405":"Oreedoo","26214":"Group 3G UMTS","23502":"Everyth. Ev.wh.","311110":"Verizon Wireless","23003":"Vodafone","22601":"Vodafone","44141":"NTT Docomo","24404":"DNA\/Finnet","43232":"Taliya","51009":"PT Smartfren Telecom Tbk","24412":"DNA\/Finnet","26207":"O2","362630":"Cingular Wireless","41406":"Telenor","310850":"Aeris Comm. Inc.","74601":"Telesur","310570":"MTPCS LLC","21201":"Monaco Telecom","310290":"NEP Cellcorp Inc.","40505":"Fascel Limited","732002":"Edatel S.A.","34008":"Dauphin Telecom SU (Guadeloupe Telecom)","23004":"Ufone","22602":"Romtelecom SA","44142":"NTT Docomo","310300":"T-Mobile","310020":"Union Telephone Co.","22610":"Orange","24405":"Elisa\/Saunalahti","43709":"O!\/NUR Telecom","24413":"DNA\/Finnet","26208":"O2","312180":"Keystone Wireless LLC","302710":"Globalstar Canada","26216":"Telogic\/ViStream","24421":"Elisa\/Saunalahti","310032":"IT&E OverSeas","74602":"Telecommunicatiebedrijf Suriname (TELESUR)","20800":"Tel\/Te","65401":"HURI - SNPT","21210":"Monaco Telecom","23005":"Travel Telekommunikation s.r.o.","22603":"Cosmote","44143":"NTT Docomo","51518":"RED Mobile\/Cure","22611":"Enigma Systems","24414":"Alands","26209":"Vodafone D2","51027":"PT Sampoerna Telekomunikasi Indonesia (STI)","26217":"E-Plus","74603":"Digicel","64001":"Tri Telecomm. Ltd.","41288":"Afghan Telecom Corp. (AT)","311650":"United Wireless Communications Inc.","20801":"Orange","311370":"GCI Communication Corp.","43219":"Mobile Telecommunications Company of Esfahan JV-PJS (MTCE)","22604":"Telemobil\/Zapp","44144":"NTT Docomo","43235":"MTN\/IranCell","23877":"Telenor\/Sonofon","64501":"Airtel\/Zain\/Celtel","65902":"MTN South Sudan (South Sudan","51028":"PT Smartfren Telecom Tbk","310033":"Guam Teleph. Auth","74604":"UNIQA","64002":"TIGO\/MIC","20802":"Orange","26098":"Play\/P4","20810":"S.F.R.","22605":"RCS&RDS Digi Mobile","44145":"NTT Docomo","310560":"AT&T Wireless Inc.","26242":"Vodafone D2","71401":"Cable & W.\/Mas Movil","310280":"T-Mobile","64502":"MTN\/Telecel","47001":"GrameenPhone","352030":"Digicel","44161":"SoftBank Mobile Corp","65903":"Gemtel Ltd (South Sudan","55301":"Tuvalu Telecommunication Corporation (TTC)","310010":"Verizon Wireless","64003":"Zantel\/Zanzibar Telecom","63601":"ETH\/MTN","20803":"MobiquiThings","64011":"Smile Communications Tanzania Ltd","23008":"Compatel s.r.o.","20811":"S.F.R.","63102":"Unitel","22606":"Telemobil\/Zapp","312170":"Iowa RSA No. 2 Limited Partnership","26243":"Lycamobile","71402":"Movistar","24409":"Nokia Oyj","64503":"Zamtel\/Cell Z\/MTS","47002":"Robi\/Aktel","44162":"SoftBank Mobile Corp","62201":"Airtel\/ZAIN\/Celtel","65904":"Network of The World Ltd (NOW) (South Sudan","44170":"KDDI Corporation","64004":"Vodacom Ltd","20804":"SISTEER","346050":"Digicel Cayman Ltd","311920":"Missouri RSA No 5 Partnership","348770":"Digicel","62701":"ORANGE\/GETESA","20820":"Bouygues Telecom","71403":"Claro","47003":"Orascom\/Banglalink","44163":"SoftBank Mobile Corp","62202":"Tchad Mobile","46601":"Far EasTone","310011":"Northstar","54901":"Telecom Samoa Cellular Ltd.","338180":"Cable & Wireless","24426":"Compatel Ltd","64005":"Airtel\/ZAIN\/Celtel","53001":"Vodafone","20805":"GlobalStar","61301":"TeleMob-OnaTel","43270":"MTCE","302701":"NB Tel Mobility","20813":"S.F.R.","63104":"MoviCel","20821":"Bouygues Telecom","71404":"Digicel","60400":"Medi Telecom","22616":"Lycamobile","45201":"Mobifone","47004":"TeleTalk","44164":"SoftBank Mobile Corp","62203":"Tigo\/Milicom\/Tchad Mobile","61801":"Lonestar","46602":"Far EasTone","342820":"Sunbeach","65906":"Zain South Sudan (South Sudan","46610":"Global Mobile Corp.","310830":"Caprock Cellular Ltd.","64006":"Dovetel (T) Ltd","53002":"Spark\/NZ Telecom","310270":"T-Mobile","45701":"Lao Tel","61302":"Airtel\/ZAIN\/CelTel","20806":"GlobalStar","20814":"Lliad\/FREE Mobile","62703":"HiTs-GE","54411":"Blue Sky Communications","20822":"Transatel SA","45202":"Vinaphone","60401":"IAM\/Itissallat","302680":"Sask Tel Mobility","47005":"Citycell","44165":"SoftBank Mobile Corp","62204":"Salam\/Sotel","61802":"Libercell","46603":"Far EasTone","310012":"Verizon Wireless","312160":"RSA 1 Limited Partnership","46611":"Chunghwa Telecom LDM","64007":"Tanzania Telecommunications Company Ltd (TTCL)","53003":"Walker Wireless Ltd.","45702":"ETL Mobile","61303":"TeleCel","20807":"GlobalStar","28201":"Geocell Ltd.","366110":"C & W","302702":"MT&T Mobility","20815":"Lliad\/FREE Mobile","60901":"Mattel","20823":"Virgin Mobile\/Omer","45203":"S-Fone\/Telecom","60402":"INWI\/WANA","20831":"Mundio Mobile (France) Ltd","47006":"Citycell","36010":"Cingular","64008":"Benson Informatics Ltd","53004":"Telstra","311350":"Sagebrush Cellular Inc.","45703":"UNITEL\/LAT","40553":"AirTel","60902":"Chinguitel SA","28202":"Magti GSM Ltd.","311070":"Wisconsin RSA #7 Limited Partnership","44190":"NTT Docomo","20816":"Lliad\/FREE Mobile","43401":"Buztel","60910":"Mauritel","20824":"MobiquiThings","29475":"ONE\/Cosmofone","45204":"Viettel Mobile","47007":"Airtel\/Warid","46605":"Asia Pacific Telecom Co. Ltd (APT)","310013":"Verizon Wireless","61804":"Comium BVI","64009":"Halotel\/Viettel Ltd","53005":"Spark\/NZ Telecom","42001":"STC\/Al Jawal","20809":"S.F.R.","61820":"LibTelco","37412":"Bmobile\/TSTT","28203":"Iberiatel Ltd.","27801":"Vodafone","302703":"New Tel Mobility","44191":"NTT Docomo","20817":"Legos - Local Exchange Global Operation Services SA","342810":"Cingular Wireless","310260":"T-Mobile","43402":"Uzmacom","20825":"Lycamobile SARL","45205":"VietnaMobile","42501":"Orange\/Partner Co. Ltd.","46606":"Far EasTone","302670":"CityWest Mobility","28204":"MobiTel\/Beeline","44192":"NTT Docomo","20826":"NRJ","45206":"Viettel Mobile","42502":"Cellcom ltd.","46607":"Far EasTone","25001":"MTS","42003":"Etihad\/Etisalat\/Mobily","41601":"ZAIN \/J.M.T.S","28205":"Silknet","44193":"NTT Docomo","43404":"Bee Line\/Unitel","25501":"UMC\/MTS","311340":"Illinois Valley Cellular RSA 2 Partnership","20827":"AFONE SA","365840":"Cable and Wireless","45207":"Beeline","42503":"Pelephone","25002":"Megafon","61807":"CELLCOM","25010":"DTC\/Don Telecom","42004":"Zain","365010":"Digicell \/ Wireless Vent. Ltd ","41602":"Xpress","310003":"Unknown","44194":"NTT Docomo","43405":"Ucell\/Coscom","53024":"Two Degrees Mobile Ltd","25502":"Beeline","20828":"Astrium","45208":"Viettel Mobile","42891":"Skytel Co. Ltd","46609":"VMAX Telecom Co. Ltd","25003":"NCC","24601":"Omnitel","310250":"T-Mobile","42512":"Pelephone","310530":"West Virginia Wireless","25011":"Orensot","42005":"Virgin Mobile","41603":"Umniah Mobile Co.","45708":"Beeline\/Tigo\/Millicom","25503":"KyivStar","302660":"MTS Mobility","20829":"Orange","302380":"DMTS Mobility","23201":"A1 MobilKom","27821":"GO Mobile","42505":"Jawwal","25004":"Sibchallenge","24602":"Bite","334090":"NEXTEL","25012":"Baykal Westcom","24482":"ID-Mobile","40211":"B-Mobile","26277":"E-Plus","42006":"Lebara Mobile","25020":"Tele2\/ECC\/Volgogr.","310004":"Verizon Wireless","43407":"MTS\/Uzdunrobita","25504":"Intertelecom Ltd (IT)","311880":"Sprint Spectrum","23202":"A1 MobilKom","42506":"Wataniya Mobile","310016":"Leap Wireless International Inc.","23210":"H3G","25005":"Yenisey Telecom","24603":"Tele2","311610":"North Dakota Network Company","42514":"Alon Cellular Ltd","311330":"Michigan Wireless LLC","25013":"Kuban GSM","311050":"Thumb Cellular Limited Partnership","42007":"Zain","24491":"TeliaSonera","54927":"Samoatel Mobile","25505":"Golden Telecom","23203":"T-Mobile\/Telering","22801":"Swisscom","51588":"Next Mobile","42507":"Hot Mobile\/Mirs","23211":"A1 MobilKom","25521":"Telesystems Of Ukraine CJSC (TSU)","42515":"Home Cellular Ltd","51089":"H3G CP","310800":"T-Mobile","310520":"VeriSign","74801":"Ancel\/Antel","310240":"T-Mobile","44198":"NTT Docomo","21401":"Vodafone","53028":"2degrees","25506":"Astelit\/LIFE","23204":"T-Mobile\/Telering","22802":"TDC Sunrise","42508":"Golan Telekom","23212":"3\/Orange\/One Connect","25007":"ZAO SMARTS","65101":"Vodacom Lesotho","42516":"Rami Levy Hashikma Marketing Communications Ltd","25015":"ZAO SMARTS","302370":"FIDO (Rogers AT&T\/ Microcell)","21901":"T-Mobile\/Cronet","312130":"East Kentucky Network LLC","73401":"DigiTel C.A.","334080":"Operadora Unefon SA de CV","44199":"NTT Docomo","25507":"TriMob LLC","74810":"Claro\/AM Wireless","42888":"Unitel","23205":"3\/Orange\/One Connect","22803":"Salt\/Orange","23213":"UPC Austria","65102":"Econet\/Ezi-cel","64700":"Orange","311870":"Sprint Spectrum","25016":"NTC","21902":"Tele2","311590":"California RSA No. 3 Limited Partnership","73402":"DigiTel C.A.","31006":"Consolidated Telcom","21910":"VIPnet d.o.o.","51099":"Esia (PT Bakrie Telecom) (CDMA)","64201":"Spacetel \/ Econet \/ Leo ","31014":"Testing","74803":"Ancel\/Antel","348170":"LIME","21403":"Orange","21411":"Orange","23206":"3\/Orange\/One Connect","35650":"Digicel","23214":"H3G","22812":"TDC Sunrise","302651":"Bell Mobility","25017":"UralTel","73403":"DigiTel C.A.","64202":"Africel \/ Safaris","310780":"Message Express Co. \/ Airlink PCS","31015":"Unknown","21404":"Yoigo","31023":"Unknown","55001":"FSM Telecom","23207":"T-Mobile\/Telering","22805":"Comfone AG","63301":"C&W","310510":"Airtel Wireless LLC","310230":"T-Mobile","42898":"G-Mobile Corporation Ltd","23215":"T-Mobile\/Telering","71601":"GlobalStar","21420":"fonYou Wireless SL","31031":"T-Mobile","42519":"Telzar\/AZI ","64702":"Outremer Telecom","47201":"Dhiraagu\/C&W","73404":"Movistar\/TelCel","40217":"Bhutan Telecom Ltd (BTL)","64710":"SFR","714020":"Movistar","55501":"Niue Telecom","64203":"Onatel \/ Telecel ","63801":"Djibouti Telecom SA (Evatis)","302640":"Latitude Wireless","21405":"Movistar","302360":"Clearnet","312120":"East Kentucky Network LLC","31024":"Unknown","23208":"A1 MobilKom","63302":"Smartcom","334070":"Operadora Unefon SA de CV","46656":"International Telecom Co. Ltd (FITEL)","42899":"Mobicom","21421":"Jazz Telecom SAU","71602":"GlobalStar","302652":"BC Tel Mobility","20891":"Orange","63310":"Airtel","54101":"SMILE","47202":"Ooredo\/Wataniya","71610":"Claro \/Amer.Mov.\/TIM","62401":"MTN","25019":"OJSC Altaysvyaz","36070":"Digicel","311860":"Uintah Basin Electronics Telecommunications Inc.","25035":"MOTIV\/LLC Ekaterinburg-2000","21406":"Vodafone Enabler Espana SL","25550":"UMC\/MTS","31025":"Unknown","54601":"OPT Mobilis","23209":"A1 MobilKom","708040":"Digicel","22807":"TDC Sunrise","62901":"Airtel SA","21422":"Digi Spain Telecom SL","23217":"Spusu\/Mass Response","61001":"Malitel","45400":"CSL Ltd.","20892":"Association Plate-forme Telecom","311310":"Lamar County Cellular","73406":"Movilnet C.A. ","62402":"Orange","25028":"BeeLine\/VimpelCom","360110":"C & W","74807":"MOVISTAR","21407":"Movistar","302361":"Clearnet","61501":"Togo Telecom\/TogoCELL","31026":"Unknown","44000":"Y-Mobile","25044":"StavTelesot","21415":"BT Espana SAU","22808":"TDC Sunrise","31034":"Nevada Wireless LLC","62902":"Azur SA (ETC)","310770":"Iowa Wireless Services LLC","21423":"Lycamobile SL","45401":"Citic Telecom Ltd.","61002":"Orange\/IKATEL","302653":"Telus Mobility","62910":"MTN\/Libertis","60600":"Libyana","53701":"Pacific Mobile","310490":"Triton PCS","310500":"Public Service Cellular Inc.","35670":"UTS Cariglobe","310220":"T-Mobile","71620":"Claro \/Amer.Mov.\/TIM","21408":"Euskaltel SA","61502":"Telecel\/MOOV","344930":"DigiCel\/Cing. Wireless","44001":"NTT Docomo","21416":"Telecable de Asturias SA","22809":"Comfone AG","311311":"Farmers","302630":"Bell Aliant","23219":"Tele2","45402":"CSL Ltd.","60601":"Al-Madar","53702":"GreenCom PNG Ltd","45410":"CSL\/New World PCS Ltd.","23099":"Vodafone","21432":"ION Mobile","62404":"Nextel","334060":"SAI PCS","366050":"Wireless Ventures (Dominica) Ltd (Digicel Dominica)","64207":"Smart Mobile \/ LACELL ","29310":"Slovenske zeleznice d.o.o.","52801":"Telekom Brunei Bhd (TelBru)","21409":"Orange","61503":"Telecel\/MOOV","28401":"MobilTel AD","44002":"NTT Docomo","21417":"R Cable y Telec. Galicia SA","44010":"NTT Docomo","21425":"Lycamobile SL","302654":"Sask Tel Mobility","71606":"Movistar","45403":"H3G\/Hutchinson","60602":"Al-Madar","46668":"ACeS Taiwan - ACeS Taiwan Telecommunications Co Ltd","53703":"Digicel","45411":"China-HongKong Telecom Ltd (CHKTL)","54105":"DigiCel","708030":"HonduTel","51401":"Telin\/ Telkomcel","311300":"Nexus Communications Inc.","31060":"Consolidated Telcom","64208":"Lumitel\/Viettel","27001":"P+T\/Post LUXGSM","52802":"b-mobile","25039":"UralTel","311020":"Missouri RSA No 5 Partnership","46692":"Chunghwa Telecom LDM","44003":"NTT Docomo","21418":"Cableuropa SAU (ONO)","43601":"Tcell\/JC Somoncom","20888":"Bouygues Telecom","360100":"Cingular","44011":"NTT Docomo","21426":"Lleida","45404":"H3G\/Hutchinson","71607":"Nextel","60603":"Libyana","43102":"Etisalat","45412":"China Mobile\/Peoples","71615":"Viettel Mobile","25539":"Golden Telecom","51402":"Timor Telecom","45420":"HKT\/PCCW","310760":"Panhandle Telephone Cooperative Inc.","342750":"Digicel","310480":"Choice Phone LLC","46693":"Mobitai","50501":"Telstra Corp. Ltd.","52811":"Datastream (DTSCom)","44004":"SoftBank Mobile Corp","28403":"BTC Mobile EOOD (vivatel)","21419":"Simyo\/KPN ","20889":"Virgin Mobile\/Omer","22851":"BebbiCell AG","43602":"CJSC Indigo Tajikistan","44012":"NTT Docomo","302655":"MTS Mobility","45405":"H3G\/Hutchinson","21427":"Truphone","31046":"SIMMETRY","310210":"T-Mobile","44020":"SoftBank Mobile Corp","344920":"C & W","45413":"China Mobile\/Peoples","42701":"Ooredoo\/Qtel","31038":"USA 3650 AT&T","312090":"Allied Wireless Communications Corporation","376350":"Cable & Wireless (TCI) Ltd","26601":"Gibtel GSM","42202":"Oman Mobile\/GTO","50502":"Singtel Optus","334050":"AT&T\/IUSACell","22852":"Mundio Mobile AG","43603":"MLT\/TT mobile","62907":"Warid","44013":"NTT Docomo","41301":"Mobitel Ltd.","45406":"Vodafone\/SmarTone","44021":"NTT Docomo","45414":"H3G\/Hutchinson","71617":"Nextel","42702":"Vodafone","42203":"Nawras","311280":"Verizon Wireless","50503":"Vodafone","28405":"Telenor\/Cosmo\/Globul","44006":"SoftBank Mobile Corp","22853":"upc cablecom GmbH","43604":"Babilon-M","50511":"Telstra Corp. Ltd.","25701":"Mobile Digital Communications","44014":"NTT Docomo","302656":"Tbay Mobility","45407":"China Unicom Ltd","41302":"MTN\/Dialog","60606":"Hatef","43612":"Tcell\/JC Somoncom","44022":"NTT Docomo","338110":"Cable & Wireless","45415":"Vodafone\/SmarTone","311010":"Missouri RSA No 5 Partnership","44030":"NTT Docomo","40401":"Aircel Digilink India","46688":"KG Telecom","50504":"Department of Defense","28406":"BTC Mobile EOOD (vivatel)","44007":"KDDI Corporation","22854":"Lycamobile AG","43605":"Bee Line","310750":"East Kentucky Network LLC","50512":"H3G Ltd.","310470":"Docomo","44015":"NTT Docomo","25702":"MTS","45408":"Truephone","33011":"Puerto Rico Telephone Company Inc. (PRTC)","41303":"Etisalat\/Tigo","310190":"Unknown","44023":"NTT Docomo","45416":"HKT\/PCCW","310200":"T-Mobile","44031":"NTT Docomo","24801":"EMT GSM","46689":"T-Star\/VIBO","40410":"Bharti Airtel Limited (Delhi)","311281":"Verizon Wireless","46697":"Taiwan Cellular","50505":"The Ozitel Network Pty.","45440":"shared by private TETRA systems","44008":"KDDI Corporation","27877":"Melita","302610":"Bell Mobility","25567":"KyivStar","50513":"Railcorp\/Vodafone","302657":"Quebectel Mobility","44016":"NTT Docomo","25703":"BelCel JV","45409":"China Motion","29340":"SI.Mobil","23401":"Mapesbury C. Ltd","44024":"NTT Docomo"} \ No newline at end of file diff --git a/Assets/Plugins/iOS/SensorsAnalyticsSDK.framework/SensorsAnalyticsSDK.bundle/sa_mcc_mnc_mini.json.meta b/Assets/Plugins/iOS/SensorsAnalyticsSDK.framework/SensorsAnalyticsSDK.bundle/sa_mcc_mnc_mini.json.meta new file mode 100644 index 0000000..609bfab --- /dev/null +++ b/Assets/Plugins/iOS/SensorsAnalyticsSDK.framework/SensorsAnalyticsSDK.bundle/sa_mcc_mnc_mini.json.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 845c6b86e1f80412c808a709fe69335d +timeCreated: 1606819380 +licenseType: Free +TextScriptImporter: + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Plugins/iOS/SensorsAnalyticsSDK.framework/SensorsAnalyticsSDK.bundle/sa_visualizedautotrack_path.json b/Assets/Plugins/iOS/SensorsAnalyticsSDK.framework/SensorsAnalyticsSDK.bundle/sa_visualizedautotrack_path.json new file mode 100644 index 0000000..fa074ac --- /dev/null +++ b/Assets/Plugins/iOS/SensorsAnalyticsSDK.framework/SensorsAnalyticsSDK.bundle/sa_visualizedautotrack_path.json @@ -0,0 +1,207 @@ +{ + "type": "snapshot_request", + "payload": { + "config": { + "classes": [ + { + "name": "NSObject", + "superclass": null, + "properties": [ + ] + }, + { + "name": "UIScreen", + "superclass": "NSObject", + "properties": [ + { + "name": "bounds", + "type": "CGRect", + "readonly": true + }, + { + "name": "applicationFrame", + "type": "CGRect", + "readonly": true + } + ] + }, + { + "name": "UIStoryboardSegueTemplate", + "superclass": "NSObject", + "properties": [ + { + "name": "identifier", + "type": "NSString", + "readonly": true + }, + { + "name": "performOnViewLoad", + "type": "BOOL" + } + ] + }, + { + "name": "UIView", + "superclass": "UIResponder", + "properties": [ + { + "name": "sensorsdata_enableAppClick", + "key": "enableAppClick", + "type": "BOOL", + "use_kvc": false + }, + { + "name": "sensorsdata_subElements", + "key": "subelements", + "type": "NSArray", + "use_kvc": false + }, + { + "name": "sensorsdata_elementValidContent", + "key": "element_content", + "type": "NSString", + "use_kvc": false + }, + { + "name": "sensorsdata_elementPath", + "key": "element_path", + "type": "NSString", + "use_kvc": false + }, + { + "name": "sensorsdata_elementPosition", + "key": "element_position", + "type": "NSString", + "use_kvc": false + }, + { + "name": "sensorsdata_frame", + "key": "frame", + "type": "CGRect", + "use_kvc": false + }, + { + "name": "jjf_fingerprintVersion", + "type": "NSString", + "use_kvc": false + }, + { + "name": "sensorsAnalyticsViewID", + "type": "NSString", + "use_kvc": false + }, + { + "name": "restorationIdentifier", + "type": "NSString" + }, + { + "name": "sensorsdata_screenName", + "key": "screen_name", + "type": "NSString", + "use_kvc": false + }, + { + "name": "sensorsdata_title", + "key": "title", + "type": "NSString", + "use_kvc": false + }, + { + "name": "sensorsdata_isFromWeb", + "key": "is_h5", + "type": "BOOL", + "use_kvc": false + } + ] + }, + { + "name": "SAJSTouchEventView", + "superclass": "UIView", + "properties": [ + { + "name": "url", + "type": "NSString" + }, + { + "name": "title", + "key": "h5_title", + "type": "NSString" + }, + { + "name": "sensorsdata_elementPath", + "key": "element_selector", + "type": "NSString", + "use_kvc": false + } + ] + }, + { + "name": "UIScrollView", + "superclass": "UIView", + "properties": [ + { + "name": "contentOffset", + "type": "CGPoint" + }, + { + "name": "contentSize", + "type": "CGSize" + } + ] + }, + { + "name": "UITableView", + "superclass": "UIScrollView", + "properties": [ + { + "name": "allowsSelection", + "type": "BOOL" + } + ] + }, + { + "name": "UICollectionView", + "superclass": "UIScrollView", + "properties": [ + { + "name": "allowsSelection", + "type": "BOOL" + } + ] + }, + { + "name": "UIWindow", + "superclass": "UIView", + "properties": [ + { + "name": "screen", + "type": "UIScreen", + "readonly": true + } + ] + }, + { + "name": "UIViewController", + "superclass": "UIResponder", + "properties": [ + { + "name": "isViewLoaded", + "type": "BOOL", + "readonly": true + }, + { + "name": "sensorsdata_subElements", + "key": "subelements", + "type": "NSArray", + "use_kvc": false + }, + { + "name": "restorationIdentifier", + "type": "NSString" + } + ] + } + ] + } + } +} diff --git a/Assets/Plugins/iOS/SensorsAnalyticsSDK.framework/SensorsAnalyticsSDK.bundle/sa_visualizedautotrack_path.json.meta b/Assets/Plugins/iOS/SensorsAnalyticsSDK.framework/SensorsAnalyticsSDK.bundle/sa_visualizedautotrack_path.json.meta new file mode 100644 index 0000000..59cbb9a --- /dev/null +++ b/Assets/Plugins/iOS/SensorsAnalyticsSDK.framework/SensorsAnalyticsSDK.bundle/sa_visualizedautotrack_path.json.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 7c94522bdec0043d8a79607f6ec15c82 +timeCreated: 1606819380 +licenseType: Free +TextScriptImporter: + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Plugins/iOS/SensorsAnalyticsSDK.framework/SensorsAnalyticsSDK.meta b/Assets/Plugins/iOS/SensorsAnalyticsSDK.framework/SensorsAnalyticsSDK.meta new file mode 100644 index 0000000..65a785b --- /dev/null +++ b/Assets/Plugins/iOS/SensorsAnalyticsSDK.framework/SensorsAnalyticsSDK.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: e09856cd6f07f4112b5d5ceab16ea5fa +timeCreated: 1606819380 +licenseType: Free +DefaultImporter: + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Plugins/iOS/SensorsAnalyticsSDKWrapper.m b/Assets/Plugins/iOS/SensorsAnalyticsSDKWrapper.m new file mode 100755 index 0000000..008efe0 --- /dev/null +++ b/Assets/Plugins/iOS/SensorsAnalyticsSDKWrapper.m @@ -0,0 +1,138 @@ +#import + +void convertToDictionary(const char *json, NSDictionary **properties_dict) { + NSString *json_string = json != NULL ? [NSString stringWithUTF8String:json] : nil; + if (json_string) { + *properties_dict = [NSJSONSerialization JSONObjectWithData:[json_string dataUsingEncoding:NSUTF8StringEncoding] options:kNilOptions error:nil]; + } +} + +void start(const char *url, bool enable_log, int eventType, int network_type) { + NSString *serverURL = [NSString stringWithCString:url encoding:NSUTF8StringEncoding]; + SAConfigOptions *options = [[SAConfigOptions alloc] initWithServerURL:serverURL launchOptions:nil]; + options.autoTrackEventType = eventType; + options.enableLog = enable_log; + [SensorsAnalyticsSDK startWithConfigOptions:options]; + [[SensorsAnalyticsSDK sharedInstance] setFlushNetworkPolicy:network_type]; +} + +void identify(const char *anonymous_id) { + NSString *anonymousId = [NSString stringWithCString:anonymous_id encoding:NSUTF8StringEncoding]; + [[SensorsAnalyticsSDK sharedInstance] identify:anonymousId]; +} + +void track(const char *eventName, const char *properties) { + NSString *event = [NSString stringWithCString:eventName encoding:NSUTF8StringEncoding]; + NSDictionary *eventProps = nil; + convertToDictionary(properties, &eventProps); + [[SensorsAnalyticsSDK sharedInstance] track:event withProperties:eventProps]; +} + +void login(const char *loginId) { + NSString *newLoginId = [NSString stringWithCString:loginId encoding:NSUTF8StringEncoding]; + [[SensorsAnalyticsSDK sharedInstance] login:newLoginId]; +} + +void logout() { + [[SensorsAnalyticsSDK sharedInstance] logout]; +} + +void profile_set(const char *properties) { + NSDictionary *profileProps = nil; + convertToDictionary(properties, &profileProps); + [[SensorsAnalyticsSDK sharedInstance] set:profileProps]; +} + +char* get_super_properties() { + NSDictionary *properties = [[SensorsAnalyticsSDK sharedInstance] currentSuperProperties]; + NSData *jsonData = [NSJSONSerialization dataWithJSONObject:properties options:NSJSONWritingPrettyPrinted error:nil]; + NSString *jsonStr = [[NSString alloc] initWithData:jsonData encoding:NSUTF8StringEncoding]; + return strdup([jsonStr UTF8String]);; +} + +void flush() { + [[SensorsAnalyticsSDK sharedInstance] flush]; +} + +char* track_timer_start(const char *eventName) { + NSString *newEventName = [NSString stringWithCString:eventName encoding:NSUTF8StringEncoding]; + NSString *timerId = [[SensorsAnalyticsSDK sharedInstance] trackTimerStart:newEventName]; + return strdup([timerId UTF8String]);; +} + +void track_timer_pause(const char *eventName) { + NSString *newEventName = [NSString stringWithCString:eventName encoding:NSUTF8StringEncoding]; + [[SensorsAnalyticsSDK sharedInstance] trackTimerPause:newEventName]; +} + +void track_timer_resume(const char *eventName) { + NSString *newEventName = [NSString stringWithCString:eventName encoding:NSUTF8StringEncoding]; + [[SensorsAnalyticsSDK sharedInstance] trackTimerResume:newEventName]; +} + +void track_timer_end(const char *eventName, const char *properties) { + NSString *newEventName = [NSString stringWithCString:eventName encoding:NSUTF8StringEncoding]; + NSDictionary *eventProps = nil; + convertToDictionary(properties, &eventProps); + [[SensorsAnalyticsSDK sharedInstance] trackTimerEnd:newEventName withProperties:eventProps]; +} + +void clear_track_timer() { + [[SensorsAnalyticsSDK sharedInstance] clearTrackTimer]; +} + +void register_super_properties(const char *properties) { + NSDictionary *eventProps = nil; + convertToDictionary(properties, &eventProps); + [[SensorsAnalyticsSDK sharedInstance] registerSuperProperties:eventProps]; +} + +void unregister_super_property(const char *superPropertyName) { + NSString *propertyName = [NSString stringWithCString:superPropertyName encoding:NSUTF8StringEncoding]; + [[SensorsAnalyticsSDK sharedInstance] unregisterSuperProperty:propertyName]; +} + +void clear_super_properties() { + [[SensorsAnalyticsSDK sharedInstance] clearSuperProperties]; +} + +#pragma mark - 二期接口 +void delete_all() { + [[SensorsAnalyticsSDK sharedInstance] deleteAll]; +} + +void set_flush_network_policy(int types) { + [[SensorsAnalyticsSDK sharedInstance] setFlushNetworkPolicy:types]; +} + +void profile_set_once(const char *properties) { + NSDictionary *profileProps = nil; + convertToDictionary(properties, &profileProps); + [[SensorsAnalyticsSDK sharedInstance] setOnce:profileProps]; +} + +void remove_timer(const char *eventName) { + NSString *newEventName = [NSString stringWithCString:eventName encoding:NSUTF8StringEncoding]; + [[SensorsAnalyticsSDK sharedInstance] removeTimer:newEventName]; +} + +void track_app_install(const char *properties, bool disableCallback) { + NSDictionary *props = nil; + convertToDictionary(properties, &props); + [[SensorsAnalyticsSDK sharedInstance] trackAppInstallWithProperties:props disableCallback:disableCallback]; +} + +#pragma clang diagnostic push +#pragma clang diagnostic ignored "-Wdeprecated-declarations" +void set_ios_max_cache_size(int count) { + [[SensorsAnalyticsSDK sharedInstance] setMaxCacheSize:count]; +} + +void set_flush_bulk_size(int flushBulkSize) { + [[SensorsAnalyticsSDK sharedInstance] setFlushBulkSize:flushBulkSize]; +} + +void set_flush_interval(int flushInteval) { + [[SensorsAnalyticsSDK sharedInstance] setFlushInterval:flushInteval]; +} +#pragma clang diagnostic pop \ No newline at end of file diff --git a/Assets/Plugins/iOS/SensorsAnalyticsSDKWrapper.m.meta b/Assets/Plugins/iOS/SensorsAnalyticsSDKWrapper.m.meta new file mode 100644 index 0000000..6809acc --- /dev/null +++ b/Assets/Plugins/iOS/SensorsAnalyticsSDKWrapper.m.meta @@ -0,0 +1,24 @@ +fileFormatVersion: 2 +guid: fd74f8fb75e879b40ae0453a46637447 +timeCreated: 1598326838 +licenseType: Free +PluginImporter: + serializedVersion: 1 + iconMap: {} + executionOrder: {} + isPreloaded: 0 + isOverridable: 0 + platformData: + Any: + enabled: 0 + settings: {} + Editor: + enabled: 0 + settings: + DefaultValueInitialized: true + iOS: + enabled: 1 + settings: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Sample.meta b/Assets/Sample.meta new file mode 100644 index 0000000..67d20ca --- /dev/null +++ b/Assets/Sample.meta @@ -0,0 +1,9 @@ +fileFormatVersion: 2 +guid: 348667888648dac41b99ec3e0f2c8632 +folderAsset: yes +timeCreated: 1598326833 +licenseType: Free +DefaultImporter: + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Sample/Assets.meta b/Assets/Sample/Assets.meta new file mode 100644 index 0000000..a789aef --- /dev/null +++ b/Assets/Sample/Assets.meta @@ -0,0 +1,9 @@ +fileFormatVersion: 2 +guid: 76c62c664deac9943bcce10c304a2f87 +folderAsset: yes +timeCreated: 1598326833 +licenseType: Free +DefaultImporter: + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Sample/Assets/sa_gui_skin.guiskin b/Assets/Sample/Assets/sa_gui_skin.guiskin new file mode 100644 index 0000000..a315d54 --- /dev/null +++ b/Assets/Sample/Assets/sa_gui_skin.guiskin @@ -0,0 +1,1560 @@ +%YAML 1.1 +%TAG !u! tag:unity3d.com,2011: +--- !u!114 &11400000 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 0} + m_Enabled: 1 + m_EditorHideFlags: 1 + m_Script: {fileID: 12001, guid: 0000000000000000e000000000000000, type: 0} + m_Name: sa_gui_skin + m_EditorClassIdentifier: + m_Font: {fileID: 10102, guid: 0000000000000000e000000000000000, type: 0} + m_box: + m_Name: box + m_Normal: + m_Background: {fileID: 11001, guid: 0000000000000000e000000000000000, type: 0} + m_ScaledBackgrounds: [] + m_TextColor: {r: 0.79999995, g: 0.79999995, b: 0.79999995, a: 1} + m_Hover: + m_Background: {fileID: 0} + m_ScaledBackgrounds: [] + m_TextColor: {r: 0, g: 0, b: 0, a: 1} + m_Active: + m_Background: {fileID: 0} + m_ScaledBackgrounds: [] + m_TextColor: {r: 0, g: 0, b: 0, a: 1} + m_Focused: + m_Background: {fileID: 0} + m_ScaledBackgrounds: [] + m_TextColor: {r: 0, g: 0, b: 0, a: 1} + m_OnNormal: + m_Background: {fileID: 0} + m_ScaledBackgrounds: [] + m_TextColor: {r: 0, g: 0, b: 0, a: 1} + m_OnHover: + m_Background: {fileID: 0} + m_ScaledBackgrounds: [] + m_TextColor: {r: 0, g: 0, b: 0, a: 1} + m_OnActive: + m_Background: {fileID: 0} + m_ScaledBackgrounds: [] + m_TextColor: {r: 0, g: 0, b: 0, a: 1} + m_OnFocused: + m_Background: {fileID: 0} + m_ScaledBackgrounds: [] + m_TextColor: {r: 0, g: 0, b: 0, a: 1} + m_Border: + m_Left: 6 + m_Right: 6 + m_Top: 6 + m_Bottom: 6 + m_Margin: + m_Left: 4 + m_Right: 4 + m_Top: 4 + m_Bottom: 4 + m_Padding: + m_Left: 4 + m_Right: 4 + m_Top: 4 + m_Bottom: 4 + m_Overflow: + m_Left: 0 + m_Right: 0 + m_Top: 0 + m_Bottom: 0 + m_Font: {fileID: 0} + m_FontSize: 0 + m_FontStyle: 0 + m_Alignment: 1 + m_WordWrap: 0 + m_RichText: 1 + m_TextClipping: 1 + m_ImagePosition: 0 + m_ContentOffset: {x: 0, y: 0} + m_FixedWidth: 0 + m_FixedHeight: 0 + m_StretchWidth: 1 + m_StretchHeight: 0 + m_button: + m_Name: button + m_Normal: + m_Background: {fileID: 11006, guid: 0000000000000000e000000000000000, type: 0} + m_ScaledBackgrounds: [] + m_TextColor: {r: 0.9, g: 0.9, b: 0.9, a: 1} + m_Hover: + m_Background: {fileID: 11003, guid: 0000000000000000e000000000000000, type: 0} + m_ScaledBackgrounds: [] + m_TextColor: {r: 1, g: 1, b: 1, a: 1} + m_Active: + m_Background: {fileID: 11002, guid: 0000000000000000e000000000000000, type: 0} + m_ScaledBackgrounds: [] + m_TextColor: {r: 0.9, g: 0.9, b: 0.9, a: 1} + m_Focused: + m_Background: {fileID: 0} + m_ScaledBackgrounds: [] + m_TextColor: {r: 1, g: 1, b: 1, a: 1} + m_OnNormal: + m_Background: {fileID: 11005, guid: 0000000000000000e000000000000000, type: 0} + m_ScaledBackgrounds: [] + m_TextColor: {r: 0.9019608, g: 0.9019608, b: 0.9019608, a: 1} + m_OnHover: + m_Background: {fileID: 11004, guid: 0000000000000000e000000000000000, type: 0} + m_ScaledBackgrounds: [] + m_TextColor: {r: 1, g: 1, b: 1, a: 1} + m_OnActive: + m_Background: {fileID: 11002, guid: 0000000000000000e000000000000000, type: 0} + m_ScaledBackgrounds: [] + m_TextColor: {r: 0.9, g: 0.9, b: 0.9, a: 1} + m_OnFocused: + m_Background: {fileID: 0} + m_ScaledBackgrounds: [] + m_TextColor: {r: 0, g: 0, b: 0, a: 1} + m_Border: + m_Left: 6 + m_Right: 6 + m_Top: 6 + m_Bottom: 4 + m_Margin: + m_Left: 4 + m_Right: 4 + m_Top: 4 + m_Bottom: 4 + m_Padding: + m_Left: 6 + m_Right: 6 + m_Top: 15 + m_Bottom: 15 + m_Overflow: + m_Left: 0 + m_Right: 0 + m_Top: 0 + m_Bottom: 0 + m_Font: {fileID: 0} + m_FontSize: 30 + m_FontStyle: 0 + m_Alignment: 4 + m_WordWrap: 0 + m_RichText: 1 + m_TextClipping: 1 + m_ImagePosition: 0 + m_ContentOffset: {x: 0, y: 0} + m_FixedWidth: 0 + m_FixedHeight: 0 + m_StretchWidth: 1 + m_StretchHeight: 0 + m_toggle: + m_Name: toggle + m_Normal: + m_Background: {fileID: 11018, guid: 0000000000000000e000000000000000, type: 0} + m_ScaledBackgrounds: [] + m_TextColor: {r: 0.89112896, g: 0.89112896, b: 0.89112896, a: 1} + m_Hover: + m_Background: {fileID: 11014, guid: 0000000000000000e000000000000000, type: 0} + m_ScaledBackgrounds: [] + m_TextColor: {r: 1, g: 1, b: 1, a: 1} + m_Active: + m_Background: {fileID: 11013, guid: 0000000000000000e000000000000000, type: 0} + m_ScaledBackgrounds: [] + m_TextColor: {r: 1, g: 1, b: 1, a: 1} + m_Focused: + m_Background: {fileID: 0} + m_ScaledBackgrounds: [] + m_TextColor: {r: 0, g: 0, b: 0, a: 1} + m_OnNormal: + m_Background: {fileID: 11016, guid: 0000000000000000e000000000000000, type: 0} + m_ScaledBackgrounds: [] + m_TextColor: {r: 0.8901961, g: 0.8901961, b: 0.8901961, a: 1} + m_OnHover: + m_Background: {fileID: 11015, guid: 0000000000000000e000000000000000, type: 0} + m_ScaledBackgrounds: [] + m_TextColor: {r: 1, g: 1, b: 1, a: 1} + m_OnActive: + m_Background: {fileID: 11017, guid: 0000000000000000e000000000000000, type: 0} + m_ScaledBackgrounds: [] + m_TextColor: {r: 1, g: 1, b: 1, a: 1} + m_OnFocused: + m_Background: {fileID: 0} + m_ScaledBackgrounds: [] + m_TextColor: {r: 0, g: 0, b: 0, a: 1} + m_Border: + m_Left: 14 + m_Right: 0 + m_Top: 14 + m_Bottom: 0 + m_Margin: + m_Left: 4 + m_Right: 4 + m_Top: 4 + m_Bottom: 4 + m_Padding: + m_Left: 15 + m_Right: 0 + m_Top: 3 + m_Bottom: 0 + m_Overflow: + m_Left: -1 + m_Right: 0 + m_Top: -4 + m_Bottom: 0 + m_Font: {fileID: 0} + m_FontSize: 0 + m_FontStyle: 0 + m_Alignment: 0 + m_WordWrap: 0 + m_RichText: 1 + m_TextClipping: 1 + m_ImagePosition: 0 + m_ContentOffset: {x: 0, y: 0} + m_FixedWidth: 0 + m_FixedHeight: 0 + m_StretchWidth: 1 + m_StretchHeight: 0 + m_label: + m_Name: label + m_Normal: + m_Background: {fileID: 0} + m_ScaledBackgrounds: [] + m_TextColor: {r: 0.9, g: 0.9, b: 0.9, a: 1} + m_Hover: + m_Background: {fileID: 0} + m_ScaledBackgrounds: [] + m_TextColor: {r: 0, g: 0, b: 0, a: 1} + m_Active: + m_Background: {fileID: 0} + m_ScaledBackgrounds: [] + m_TextColor: {r: 0, g: 0, b: 0, a: 1} + m_Focused: + m_Background: {fileID: 0} + m_ScaledBackgrounds: [] + m_TextColor: {r: 0, g: 0, b: 0, a: 1} + m_OnNormal: + m_Background: {fileID: 0} + m_ScaledBackgrounds: [] + m_TextColor: {r: 0, g: 0, b: 0, a: 1} + m_OnHover: + m_Background: {fileID: 0} + m_ScaledBackgrounds: [] + m_TextColor: {r: 0, g: 0, b: 0, a: 1} + m_OnActive: + m_Background: {fileID: 0} + m_ScaledBackgrounds: [] + m_TextColor: {r: 0, g: 0, b: 0, a: 1} + m_OnFocused: + m_Background: {fileID: 0} + m_ScaledBackgrounds: [] + m_TextColor: {r: 0, g: 0, b: 0, a: 1} + m_Border: + m_Left: 0 + m_Right: 0 + m_Top: 0 + m_Bottom: 0 + m_Margin: + m_Left: 4 + m_Right: 4 + m_Top: 4 + m_Bottom: 4 + m_Padding: + m_Left: 0 + m_Right: 0 + m_Top: 3 + m_Bottom: 3 + m_Overflow: + m_Left: 0 + m_Right: 0 + m_Top: 0 + m_Bottom: 0 + m_Font: {fileID: 0} + m_FontSize: 50 + m_FontStyle: 0 + m_Alignment: 0 + m_WordWrap: 1 + m_RichText: 1 + m_TextClipping: 1 + m_ImagePosition: 0 + m_ContentOffset: {x: 0, y: 0} + m_FixedWidth: 0 + m_FixedHeight: 0 + m_StretchWidth: 1 + m_StretchHeight: 0 + m_textField: + m_Name: textfield + m_Normal: + m_Background: {fileID: 11024, guid: 0000000000000000e000000000000000, type: 0} + m_ScaledBackgrounds: [] + m_TextColor: {r: 0.79999995, g: 0.79999995, b: 0.79999995, a: 1} + m_Hover: + m_Background: {fileID: 11026, guid: 0000000000000000e000000000000000, type: 0} + m_ScaledBackgrounds: [] + m_TextColor: {r: 0.9, g: 0.9, b: 0.9, a: 1} + m_Active: + m_Background: {fileID: 0} + m_ScaledBackgrounds: [] + m_TextColor: {r: 0, g: 0, b: 0, a: 1} + m_Focused: + m_Background: {fileID: 11026, guid: 0000000000000000e000000000000000, type: 0} + m_ScaledBackgrounds: [] + m_TextColor: {r: 1, g: 1, b: 1, a: 1} + m_OnNormal: + m_Background: {fileID: 11025, guid: 0000000000000000e000000000000000, type: 0} + m_ScaledBackgrounds: [] + m_TextColor: {r: 1, g: 1, b: 1, a: 1} + m_OnHover: + m_Background: {fileID: 0} + m_ScaledBackgrounds: [] + m_TextColor: {r: 0, g: 0, b: 0, a: 1} + m_OnActive: + m_Background: {fileID: 0} + m_ScaledBackgrounds: [] + m_TextColor: {r: 0, g: 0, b: 0, a: 1} + m_OnFocused: + m_Background: {fileID: 0} + m_ScaledBackgrounds: [] + m_TextColor: {r: 0, g: 0, b: 0, a: 1} + m_Border: + m_Left: 4 + m_Right: 4 + m_Top: 4 + m_Bottom: 4 + m_Margin: + m_Left: 4 + m_Right: 4 + m_Top: 4 + m_Bottom: 4 + m_Padding: + m_Left: 3 + m_Right: 3 + m_Top: 3 + m_Bottom: 3 + m_Overflow: + m_Left: 0 + m_Right: 0 + m_Top: 0 + m_Bottom: 0 + m_Font: {fileID: 0} + m_FontSize: 0 + m_FontStyle: 0 + m_Alignment: 0 + m_WordWrap: 0 + m_RichText: 0 + m_TextClipping: 1 + m_ImagePosition: 3 + m_ContentOffset: {x: 0, y: 0} + m_FixedWidth: 0 + m_FixedHeight: 0 + m_StretchWidth: 1 + m_StretchHeight: 0 + m_textArea: + m_Name: textarea + m_Normal: + m_Background: {fileID: 11024, guid: 0000000000000000e000000000000000, type: 0} + m_ScaledBackgrounds: [] + m_TextColor: {r: 0.9019608, g: 0.9019608, b: 0.9019608, a: 1} + m_Hover: + m_Background: {fileID: 11026, guid: 0000000000000000e000000000000000, type: 0} + m_ScaledBackgrounds: [] + m_TextColor: {r: 0.79999995, g: 0.79999995, b: 0.79999995, a: 1} + m_Active: + m_Background: {fileID: 0} + m_ScaledBackgrounds: [] + m_TextColor: {r: 0, g: 0, b: 0, a: 1} + m_Focused: + m_Background: {fileID: 0} + m_ScaledBackgrounds: [] + m_TextColor: {r: 0, g: 0, b: 0, a: 1} + m_OnNormal: + m_Background: {fileID: 11025, guid: 0000000000000000e000000000000000, type: 0} + m_ScaledBackgrounds: [] + m_TextColor: {r: 1, g: 1, b: 1, a: 1} + m_OnHover: + m_Background: {fileID: 0} + m_ScaledBackgrounds: [] + m_TextColor: {r: 0, g: 0, b: 0, a: 1} + m_OnActive: + m_Background: {fileID: 0} + m_ScaledBackgrounds: [] + m_TextColor: {r: 0, g: 0, b: 0, a: 1} + m_OnFocused: + m_Background: {fileID: 0} + m_ScaledBackgrounds: [] + m_TextColor: {r: 0, g: 0, b: 0, a: 1} + m_Border: + m_Left: 4 + m_Right: 4 + m_Top: 4 + m_Bottom: 4 + m_Margin: + m_Left: 4 + m_Right: 4 + m_Top: 4 + m_Bottom: 4 + m_Padding: + m_Left: 3 + m_Right: 3 + m_Top: 3 + m_Bottom: 3 + m_Overflow: + m_Left: 0 + m_Right: 0 + m_Top: 0 + m_Bottom: 0 + m_Font: {fileID: 0} + m_FontSize: 0 + m_FontStyle: 0 + m_Alignment: 0 + m_WordWrap: 1 + m_RichText: 0 + m_TextClipping: 1 + m_ImagePosition: 0 + m_ContentOffset: {x: 0, y: 0} + m_FixedWidth: 0 + m_FixedHeight: 0 + m_StretchWidth: 1 + m_StretchHeight: 0 + m_window: + m_Name: window + m_Normal: + m_Background: {fileID: 11023, guid: 0000000000000000e000000000000000, type: 0} + m_ScaledBackgrounds: [] + m_TextColor: {r: 1, g: 1, b: 1, a: 1} + m_Hover: + m_Background: {fileID: 0} + m_ScaledBackgrounds: [] + m_TextColor: {r: 0, g: 0, b: 0, a: 1} + m_Active: + m_Background: {fileID: 0} + m_ScaledBackgrounds: [] + m_TextColor: {r: 0, g: 0, b: 0, a: 1} + m_Focused: + m_Background: {fileID: 0} + m_ScaledBackgrounds: [] + m_TextColor: {r: 0, g: 0, b: 0, a: 1} + m_OnNormal: + m_Background: {fileID: 11022, guid: 0000000000000000e000000000000000, type: 0} + m_ScaledBackgrounds: [] + m_TextColor: {r: 1, g: 1, b: 1, a: 1} + m_OnHover: + m_Background: {fileID: 0} + m_ScaledBackgrounds: [] + m_TextColor: {r: 0, g: 0, b: 0, a: 1} + m_OnActive: + m_Background: {fileID: 0} + m_ScaledBackgrounds: [] + m_TextColor: {r: 0, g: 0, b: 0, a: 1} + m_OnFocused: + m_Background: {fileID: 0} + m_ScaledBackgrounds: [] + m_TextColor: {r: 0, g: 0, b: 0, a: 1} + m_Border: + m_Left: 8 + m_Right: 8 + m_Top: 18 + m_Bottom: 8 + m_Margin: + m_Left: 0 + m_Right: 0 + m_Top: 0 + m_Bottom: 0 + m_Padding: + m_Left: 10 + m_Right: 10 + m_Top: 20 + m_Bottom: 10 + m_Overflow: + m_Left: 0 + m_Right: 0 + m_Top: 0 + m_Bottom: 0 + m_Font: {fileID: 0} + m_FontSize: 0 + m_FontStyle: 0 + m_Alignment: 1 + m_WordWrap: 0 + m_RichText: 1 + m_TextClipping: 1 + m_ImagePosition: 0 + m_ContentOffset: {x: 0, y: -18} + m_FixedWidth: 0 + m_FixedHeight: 0 + m_StretchWidth: 1 + m_StretchHeight: 0 + m_horizontalSlider: + m_Name: horizontalslider + m_Normal: + m_Background: {fileID: 11009, guid: 0000000000000000e000000000000000, type: 0} + m_ScaledBackgrounds: [] + m_TextColor: {r: 0, g: 0, b: 0, a: 1} + m_Hover: + m_Background: {fileID: 0} + m_ScaledBackgrounds: [] + m_TextColor: {r: 0, g: 0, b: 0, a: 1} + m_Active: + m_Background: {fileID: 0} + m_ScaledBackgrounds: [] + m_TextColor: {r: 0, g: 0, b: 0, a: 1} + m_Focused: + m_Background: {fileID: 0} + m_ScaledBackgrounds: [] + m_TextColor: {r: 0, g: 0, b: 0, a: 1} + m_OnNormal: + m_Background: {fileID: 0} + m_ScaledBackgrounds: [] + m_TextColor: {r: 0, g: 0, b: 0, a: 1} + m_OnHover: + m_Background: {fileID: 0} + m_ScaledBackgrounds: [] + m_TextColor: {r: 0, g: 0, b: 0, a: 1} + m_OnActive: + m_Background: {fileID: 0} + m_ScaledBackgrounds: [] + m_TextColor: {r: 0, g: 0, b: 0, a: 1} + m_OnFocused: + m_Background: {fileID: 0} + m_ScaledBackgrounds: [] + m_TextColor: {r: 0, g: 0, b: 0, a: 1} + m_Border: + m_Left: 3 + m_Right: 3 + m_Top: 0 + m_Bottom: 0 + m_Margin: + m_Left: 4 + m_Right: 4 + m_Top: 4 + m_Bottom: 4 + m_Padding: + m_Left: -1 + m_Right: -1 + m_Top: 0 + m_Bottom: 0 + m_Overflow: + m_Left: 0 + m_Right: 0 + m_Top: -2 + m_Bottom: -3 + m_Font: {fileID: 0} + m_FontSize: 0 + m_FontStyle: 0 + m_Alignment: 0 + m_WordWrap: 0 + m_RichText: 1 + m_TextClipping: 1 + m_ImagePosition: 2 + m_ContentOffset: {x: 0, y: 0} + m_FixedWidth: 0 + m_FixedHeight: 12 + m_StretchWidth: 1 + m_StretchHeight: 0 + m_horizontalSliderThumb: + m_Name: horizontalsliderthumb + m_Normal: + m_Background: {fileID: 11011, guid: 0000000000000000e000000000000000, type: 0} + m_ScaledBackgrounds: [] + m_TextColor: {r: 0, g: 0, b: 0, a: 1} + m_Hover: + m_Background: {fileID: 11012, guid: 0000000000000000e000000000000000, type: 0} + m_ScaledBackgrounds: [] + m_TextColor: {r: 0, g: 0, b: 0, a: 1} + m_Active: + m_Background: {fileID: 11010, guid: 0000000000000000e000000000000000, type: 0} + m_ScaledBackgrounds: [] + m_TextColor: {r: 0, g: 0, b: 0, a: 1} + m_Focused: + m_Background: {fileID: 0} + m_ScaledBackgrounds: [] + m_TextColor: {r: 0, g: 0, b: 0, a: 1} + m_OnNormal: + m_Background: {fileID: 0} + m_ScaledBackgrounds: [] + m_TextColor: {r: 0, g: 0, b: 0, a: 1} + m_OnHover: + m_Background: {fileID: 0} + m_ScaledBackgrounds: [] + m_TextColor: {r: 0, g: 0, b: 0, a: 1} + m_OnActive: + m_Background: {fileID: 0} + m_ScaledBackgrounds: [] + m_TextColor: {r: 0, g: 0, b: 0, a: 1} + m_OnFocused: + m_Background: {fileID: 0} + m_ScaledBackgrounds: [] + m_TextColor: {r: 0, g: 0, b: 0, a: 1} + m_Border: + m_Left: 4 + m_Right: 4 + m_Top: 0 + m_Bottom: 0 + m_Margin: + m_Left: 0 + m_Right: 0 + m_Top: 0 + m_Bottom: 0 + m_Padding: + m_Left: 7 + m_Right: 7 + m_Top: 0 + m_Bottom: 0 + m_Overflow: + m_Left: -1 + m_Right: -1 + m_Top: 0 + m_Bottom: 0 + m_Font: {fileID: 0} + m_FontSize: 0 + m_FontStyle: 0 + m_Alignment: 0 + m_WordWrap: 0 + m_RichText: 1 + m_TextClipping: 1 + m_ImagePosition: 2 + m_ContentOffset: {x: 0, y: 0} + m_FixedWidth: 0 + m_FixedHeight: 12 + m_StretchWidth: 1 + m_StretchHeight: 0 + m_verticalSlider: + m_Name: verticalslider + m_Normal: + m_Background: {fileID: 11021, guid: 0000000000000000e000000000000000, type: 0} + m_ScaledBackgrounds: [] + m_TextColor: {r: 0, g: 0, b: 0, a: 1} + m_Hover: + m_Background: {fileID: 0} + m_ScaledBackgrounds: [] + m_TextColor: {r: 0, g: 0, b: 0, a: 1} + m_Active: + m_Background: {fileID: 0} + m_ScaledBackgrounds: [] + m_TextColor: {r: 0, g: 0, b: 0, a: 1} + m_Focused: + m_Background: {fileID: 0} + m_ScaledBackgrounds: [] + m_TextColor: {r: 0, g: 0, b: 0, a: 1} + m_OnNormal: + m_Background: {fileID: 0} + m_ScaledBackgrounds: [] + m_TextColor: {r: 0, g: 0, b: 0, a: 1} + m_OnHover: + m_Background: {fileID: 0} + m_ScaledBackgrounds: [] + m_TextColor: {r: 0, g: 0, b: 0, a: 1} + m_OnActive: + m_Background: {fileID: 0} + m_ScaledBackgrounds: [] + m_TextColor: {r: 0, g: 0, b: 0, a: 1} + m_OnFocused: + m_Background: {fileID: 0} + m_ScaledBackgrounds: [] + m_TextColor: {r: 0, g: 0, b: 0, a: 1} + m_Border: + m_Left: 0 + m_Right: 0 + m_Top: 3 + m_Bottom: 3 + m_Margin: + m_Left: 4 + m_Right: 4 + m_Top: 4 + m_Bottom: 4 + m_Padding: + m_Left: 0 + m_Right: 0 + m_Top: -1 + m_Bottom: -1 + m_Overflow: + m_Left: -2 + m_Right: -3 + m_Top: 0 + m_Bottom: 0 + m_Font: {fileID: 0} + m_FontSize: 0 + m_FontStyle: 0 + m_Alignment: 0 + m_WordWrap: 0 + m_RichText: 1 + m_TextClipping: 0 + m_ImagePosition: 0 + m_ContentOffset: {x: 0, y: 0} + m_FixedWidth: 12 + m_FixedHeight: 0 + m_StretchWidth: 0 + m_StretchHeight: 1 + m_verticalSliderThumb: + m_Name: verticalsliderthumb + m_Normal: + m_Background: {fileID: 11011, guid: 0000000000000000e000000000000000, type: 0} + m_ScaledBackgrounds: [] + m_TextColor: {r: 0, g: 0, b: 0, a: 1} + m_Hover: + m_Background: {fileID: 11012, guid: 0000000000000000e000000000000000, type: 0} + m_ScaledBackgrounds: [] + m_TextColor: {r: 0, g: 0, b: 0, a: 1} + m_Active: + m_Background: {fileID: 11010, guid: 0000000000000000e000000000000000, type: 0} + m_ScaledBackgrounds: [] + m_TextColor: {r: 0, g: 0, b: 0, a: 1} + m_Focused: + m_Background: {fileID: 0} + m_ScaledBackgrounds: [] + m_TextColor: {r: 0, g: 0, b: 0, a: 1} + m_OnNormal: + m_Background: {fileID: 0} + m_ScaledBackgrounds: [] + m_TextColor: {r: 0, g: 0, b: 0, a: 1} + m_OnHover: + m_Background: {fileID: 0} + m_ScaledBackgrounds: [] + m_TextColor: {r: 0, g: 0, b: 0, a: 1} + m_OnActive: + m_Background: {fileID: 0} + m_ScaledBackgrounds: [] + m_TextColor: {r: 0, g: 0, b: 0, a: 1} + m_OnFocused: + m_Background: {fileID: 0} + m_ScaledBackgrounds: [] + m_TextColor: {r: 0, g: 0, b: 0, a: 1} + m_Border: + m_Left: 0 + m_Right: 0 + m_Top: 0 + m_Bottom: 0 + m_Margin: + m_Left: 0 + m_Right: 0 + m_Top: 0 + m_Bottom: 0 + m_Padding: + m_Left: 0 + m_Right: 0 + m_Top: 7 + m_Bottom: 7 + m_Overflow: + m_Left: 0 + m_Right: 0 + m_Top: -1 + m_Bottom: -1 + m_Font: {fileID: 0} + m_FontSize: 0 + m_FontStyle: 0 + m_Alignment: 0 + m_WordWrap: 0 + m_RichText: 1 + m_TextClipping: 1 + m_ImagePosition: 0 + m_ContentOffset: {x: 0, y: 0} + m_FixedWidth: 12 + m_FixedHeight: 0 + m_StretchWidth: 0 + m_StretchHeight: 1 + m_horizontalScrollbar: + m_Name: horizontalscrollbar + m_Normal: + m_Background: {fileID: 11008, guid: 0000000000000000e000000000000000, type: 0} + m_ScaledBackgrounds: [] + m_TextColor: {r: 0, g: 0, b: 0, a: 1} + m_Hover: + m_Background: {fileID: 0} + m_ScaledBackgrounds: [] + m_TextColor: {r: 0, g: 0, b: 0, a: 1} + m_Active: + m_Background: {fileID: 0} + m_ScaledBackgrounds: [] + m_TextColor: {r: 0, g: 0, b: 0, a: 1} + m_Focused: + m_Background: {fileID: 0} + m_ScaledBackgrounds: [] + m_TextColor: {r: 0, g: 0, b: 0, a: 1} + m_OnNormal: + m_Background: {fileID: 0} + m_ScaledBackgrounds: [] + m_TextColor: {r: 0, g: 0, b: 0, a: 1} + m_OnHover: + m_Background: {fileID: 0} + m_ScaledBackgrounds: [] + m_TextColor: {r: 0, g: 0, b: 0, a: 1} + m_OnActive: + m_Background: {fileID: 0} + m_ScaledBackgrounds: [] + m_TextColor: {r: 0, g: 0, b: 0, a: 1} + m_OnFocused: + m_Background: {fileID: 0} + m_ScaledBackgrounds: [] + m_TextColor: {r: 0, g: 0, b: 0, a: 1} + m_Border: + m_Left: 9 + m_Right: 9 + m_Top: 0 + m_Bottom: 0 + m_Margin: + m_Left: 4 + m_Right: 4 + m_Top: 1 + m_Bottom: 4 + m_Padding: + m_Left: 0 + m_Right: 0 + m_Top: 0 + m_Bottom: 0 + m_Overflow: + m_Left: 0 + m_Right: 0 + m_Top: 0 + m_Bottom: 0 + m_Font: {fileID: 0} + m_FontSize: 0 + m_FontStyle: 0 + m_Alignment: 0 + m_WordWrap: 0 + m_RichText: 1 + m_TextClipping: 1 + m_ImagePosition: 2 + m_ContentOffset: {x: 0, y: 0} + m_FixedWidth: 0 + m_FixedHeight: 15 + m_StretchWidth: 1 + m_StretchHeight: 0 + m_horizontalScrollbarThumb: + m_Name: horizontalscrollbarthumb + m_Normal: + m_Background: {fileID: 11007, guid: 0000000000000000e000000000000000, type: 0} + m_ScaledBackgrounds: [] + m_TextColor: {r: 0, g: 0, b: 0, a: 1} + m_Hover: + m_Background: {fileID: 0} + m_ScaledBackgrounds: [] + m_TextColor: {r: 0, g: 0, b: 0, a: 1} + m_Active: + m_Background: {fileID: 0} + m_ScaledBackgrounds: [] + m_TextColor: {r: 0, g: 0, b: 0, a: 1} + m_Focused: + m_Background: {fileID: 0} + m_ScaledBackgrounds: [] + m_TextColor: {r: 0, g: 0, b: 0, a: 1} + m_OnNormal: + m_Background: {fileID: 0} + m_ScaledBackgrounds: [] + m_TextColor: {r: 0, g: 0, b: 0, a: 1} + m_OnHover: + m_Background: {fileID: 0} + m_ScaledBackgrounds: [] + m_TextColor: {r: 0, g: 0, b: 0, a: 1} + m_OnActive: + m_Background: {fileID: 0} + m_ScaledBackgrounds: [] + m_TextColor: {r: 0, g: 0, b: 0, a: 1} + m_OnFocused: + m_Background: {fileID: 0} + m_ScaledBackgrounds: [] + m_TextColor: {r: 0, g: 0, b: 0, a: 1} + m_Border: + m_Left: 6 + m_Right: 6 + m_Top: 6 + m_Bottom: 6 + m_Margin: + m_Left: 0 + m_Right: 0 + m_Top: 0 + m_Bottom: 0 + m_Padding: + m_Left: 6 + m_Right: 6 + m_Top: 0 + m_Bottom: 0 + m_Overflow: + m_Left: 0 + m_Right: 0 + m_Top: -1 + m_Bottom: 1 + m_Font: {fileID: 0} + m_FontSize: 0 + m_FontStyle: 0 + m_Alignment: 0 + m_WordWrap: 0 + m_RichText: 1 + m_TextClipping: 1 + m_ImagePosition: 0 + m_ContentOffset: {x: 0, y: 0} + m_FixedWidth: 0 + m_FixedHeight: 13 + m_StretchWidth: 1 + m_StretchHeight: 0 + m_horizontalScrollbarLeftButton: + m_Name: horizontalscrollbarleftbutton + m_Normal: + m_Background: {fileID: 0} + m_ScaledBackgrounds: [] + m_TextColor: {r: 0, g: 0, b: 0, a: 1} + m_Hover: + m_Background: {fileID: 0} + m_ScaledBackgrounds: [] + m_TextColor: {r: 0, g: 0, b: 0, a: 1} + m_Active: + m_Background: {fileID: 0} + m_ScaledBackgrounds: [] + m_TextColor: {r: 0, g: 0, b: 0, a: 1} + m_Focused: + m_Background: {fileID: 0} + m_ScaledBackgrounds: [] + m_TextColor: {r: 0, g: 0, b: 0, a: 1} + m_OnNormal: + m_Background: {fileID: 0} + m_ScaledBackgrounds: [] + m_TextColor: {r: 0, g: 0, b: 0, a: 1} + m_OnHover: + m_Background: {fileID: 0} + m_ScaledBackgrounds: [] + m_TextColor: {r: 0, g: 0, b: 0, a: 1} + m_OnActive: + m_Background: {fileID: 0} + m_ScaledBackgrounds: [] + m_TextColor: {r: 0, g: 0, b: 0, a: 1} + m_OnFocused: + m_Background: {fileID: 0} + m_ScaledBackgrounds: [] + m_TextColor: {r: 0, g: 0, b: 0, a: 1} + m_Border: + m_Left: 0 + m_Right: 0 + m_Top: 0 + m_Bottom: 0 + m_Margin: + m_Left: 0 + m_Right: 0 + m_Top: 0 + m_Bottom: 0 + m_Padding: + m_Left: 0 + m_Right: 0 + m_Top: 0 + m_Bottom: 0 + m_Overflow: + m_Left: 0 + m_Right: 0 + m_Top: 0 + m_Bottom: 0 + m_Font: {fileID: 0} + m_FontSize: 0 + m_FontStyle: 0 + m_Alignment: 0 + m_WordWrap: 0 + m_RichText: 1 + m_TextClipping: 1 + m_ImagePosition: 0 + m_ContentOffset: {x: 0, y: 0} + m_FixedWidth: 0 + m_FixedHeight: 0 + m_StretchWidth: 1 + m_StretchHeight: 0 + m_horizontalScrollbarRightButton: + m_Name: horizontalscrollbarrightbutton + m_Normal: + m_Background: {fileID: 0} + m_ScaledBackgrounds: [] + m_TextColor: {r: 0, g: 0, b: 0, a: 1} + m_Hover: + m_Background: {fileID: 0} + m_ScaledBackgrounds: [] + m_TextColor: {r: 0, g: 0, b: 0, a: 1} + m_Active: + m_Background: {fileID: 0} + m_ScaledBackgrounds: [] + m_TextColor: {r: 0, g: 0, b: 0, a: 1} + m_Focused: + m_Background: {fileID: 0} + m_ScaledBackgrounds: [] + m_TextColor: {r: 0, g: 0, b: 0, a: 1} + m_OnNormal: + m_Background: {fileID: 0} + m_ScaledBackgrounds: [] + m_TextColor: {r: 0, g: 0, b: 0, a: 1} + m_OnHover: + m_Background: {fileID: 0} + m_ScaledBackgrounds: [] + m_TextColor: {r: 0, g: 0, b: 0, a: 1} + m_OnActive: + m_Background: {fileID: 0} + m_ScaledBackgrounds: [] + m_TextColor: {r: 0, g: 0, b: 0, a: 1} + m_OnFocused: + m_Background: {fileID: 0} + m_ScaledBackgrounds: [] + m_TextColor: {r: 0, g: 0, b: 0, a: 1} + m_Border: + m_Left: 0 + m_Right: 0 + m_Top: 0 + m_Bottom: 0 + m_Margin: + m_Left: 0 + m_Right: 0 + m_Top: 0 + m_Bottom: 0 + m_Padding: + m_Left: 0 + m_Right: 0 + m_Top: 0 + m_Bottom: 0 + m_Overflow: + m_Left: 0 + m_Right: 0 + m_Top: 0 + m_Bottom: 0 + m_Font: {fileID: 0} + m_FontSize: 0 + m_FontStyle: 0 + m_Alignment: 0 + m_WordWrap: 0 + m_RichText: 1 + m_TextClipping: 1 + m_ImagePosition: 0 + m_ContentOffset: {x: 0, y: 0} + m_FixedWidth: 0 + m_FixedHeight: 0 + m_StretchWidth: 1 + m_StretchHeight: 0 + m_verticalScrollbar: + m_Name: verticalscrollbar + m_Normal: + m_Background: {fileID: 11020, guid: 0000000000000000e000000000000000, type: 0} + m_ScaledBackgrounds: [] + m_TextColor: {r: 0, g: 0, b: 0, a: 1} + m_Hover: + m_Background: {fileID: 0} + m_ScaledBackgrounds: [] + m_TextColor: {r: 0, g: 0, b: 0, a: 1} + m_Active: + m_Background: {fileID: 0} + m_ScaledBackgrounds: [] + m_TextColor: {r: 0, g: 0, b: 0, a: 1} + m_Focused: + m_Background: {fileID: 0} + m_ScaledBackgrounds: [] + m_TextColor: {r: 0, g: 0, b: 0, a: 1} + m_OnNormal: + m_Background: {fileID: 0} + m_ScaledBackgrounds: [] + m_TextColor: {r: 0, g: 0, b: 0, a: 1} + m_OnHover: + m_Background: {fileID: 0} + m_ScaledBackgrounds: [] + m_TextColor: {r: 0, g: 0, b: 0, a: 1} + m_OnActive: + m_Background: {fileID: 0} + m_ScaledBackgrounds: [] + m_TextColor: {r: 0, g: 0, b: 0, a: 1} + m_OnFocused: + m_Background: {fileID: 0} + m_ScaledBackgrounds: [] + m_TextColor: {r: 0, g: 0, b: 0, a: 1} + m_Border: + m_Left: 0 + m_Right: 0 + m_Top: 9 + m_Bottom: 9 + m_Margin: + m_Left: 1 + m_Right: 4 + m_Top: 4 + m_Bottom: 4 + m_Padding: + m_Left: 0 + m_Right: 0 + m_Top: 1 + m_Bottom: 1 + m_Overflow: + m_Left: 0 + m_Right: 0 + m_Top: 0 + m_Bottom: 0 + m_Font: {fileID: 0} + m_FontSize: 0 + m_FontStyle: 0 + m_Alignment: 0 + m_WordWrap: 0 + m_RichText: 1 + m_TextClipping: 1 + m_ImagePosition: 0 + m_ContentOffset: {x: 0, y: 0} + m_FixedWidth: 15 + m_FixedHeight: 0 + m_StretchWidth: 1 + m_StretchHeight: 0 + m_verticalScrollbarThumb: + m_Name: verticalscrollbarthumb + m_Normal: + m_Background: {fileID: 11019, guid: 0000000000000000e000000000000000, type: 0} + m_ScaledBackgrounds: [] + m_TextColor: {r: 0, g: 0, b: 0, a: 1} + m_Hover: + m_Background: {fileID: 0} + m_ScaledBackgrounds: [] + m_TextColor: {r: 0, g: 0, b: 0, a: 1} + m_Active: + m_Background: {fileID: 0} + m_ScaledBackgrounds: [] + m_TextColor: {r: 0, g: 0, b: 0, a: 1} + m_Focused: + m_Background: {fileID: 0} + m_ScaledBackgrounds: [] + m_TextColor: {r: 0, g: 0, b: 0, a: 1} + m_OnNormal: + m_Background: {fileID: 0} + m_ScaledBackgrounds: [] + m_TextColor: {r: 0, g: 0, b: 0, a: 1} + m_OnHover: + m_Background: {fileID: 0} + m_ScaledBackgrounds: [] + m_TextColor: {r: 0, g: 0, b: 0, a: 1} + m_OnActive: + m_Background: {fileID: 0} + m_ScaledBackgrounds: [] + m_TextColor: {r: 0, g: 0, b: 0, a: 1} + m_OnFocused: + m_Background: {fileID: 0} + m_ScaledBackgrounds: [] + m_TextColor: {r: 0, g: 0, b: 0, a: 1} + m_Border: + m_Left: 6 + m_Right: 6 + m_Top: 6 + m_Bottom: 6 + m_Margin: + m_Left: 0 + m_Right: 0 + m_Top: 0 + m_Bottom: 0 + m_Padding: + m_Left: 0 + m_Right: 0 + m_Top: 6 + m_Bottom: 6 + m_Overflow: + m_Left: -1 + m_Right: -1 + m_Top: 0 + m_Bottom: 0 + m_Font: {fileID: 0} + m_FontSize: 0 + m_FontStyle: 0 + m_Alignment: 0 + m_WordWrap: 0 + m_RichText: 1 + m_TextClipping: 1 + m_ImagePosition: 2 + m_ContentOffset: {x: 0, y: 0} + m_FixedWidth: 15 + m_FixedHeight: 0 + m_StretchWidth: 0 + m_StretchHeight: 1 + m_verticalScrollbarUpButton: + m_Name: verticalscrollbarupbutton + m_Normal: + m_Background: {fileID: 0} + m_ScaledBackgrounds: [] + m_TextColor: {r: 0, g: 0, b: 0, a: 1} + m_Hover: + m_Background: {fileID: 0} + m_ScaledBackgrounds: [] + m_TextColor: {r: 0, g: 0, b: 0, a: 1} + m_Active: + m_Background: {fileID: 0} + m_ScaledBackgrounds: [] + m_TextColor: {r: 0, g: 0, b: 0, a: 1} + m_Focused: + m_Background: {fileID: 0} + m_ScaledBackgrounds: [] + m_TextColor: {r: 0, g: 0, b: 0, a: 1} + m_OnNormal: + m_Background: {fileID: 0} + m_ScaledBackgrounds: [] + m_TextColor: {r: 0, g: 0, b: 0, a: 1} + m_OnHover: + m_Background: {fileID: 0} + m_ScaledBackgrounds: [] + m_TextColor: {r: 0, g: 0, b: 0, a: 1} + m_OnActive: + m_Background: {fileID: 0} + m_ScaledBackgrounds: [] + m_TextColor: {r: 0, g: 0, b: 0, a: 1} + m_OnFocused: + m_Background: {fileID: 0} + m_ScaledBackgrounds: [] + m_TextColor: {r: 0, g: 0, b: 0, a: 1} + m_Border: + m_Left: 0 + m_Right: 0 + m_Top: 0 + m_Bottom: 0 + m_Margin: + m_Left: 0 + m_Right: 0 + m_Top: 0 + m_Bottom: 0 + m_Padding: + m_Left: 0 + m_Right: 0 + m_Top: 0 + m_Bottom: 0 + m_Overflow: + m_Left: 0 + m_Right: 0 + m_Top: 0 + m_Bottom: 0 + m_Font: {fileID: 0} + m_FontSize: 0 + m_FontStyle: 0 + m_Alignment: 0 + m_WordWrap: 0 + m_RichText: 1 + m_TextClipping: 1 + m_ImagePosition: 0 + m_ContentOffset: {x: 0, y: 0} + m_FixedWidth: 0 + m_FixedHeight: 0 + m_StretchWidth: 1 + m_StretchHeight: 0 + m_verticalScrollbarDownButton: + m_Name: verticalscrollbardownbutton + m_Normal: + m_Background: {fileID: 0} + m_ScaledBackgrounds: [] + m_TextColor: {r: 0, g: 0, b: 0, a: 1} + m_Hover: + m_Background: {fileID: 0} + m_ScaledBackgrounds: [] + m_TextColor: {r: 0, g: 0, b: 0, a: 1} + m_Active: + m_Background: {fileID: 0} + m_ScaledBackgrounds: [] + m_TextColor: {r: 0, g: 0, b: 0, a: 1} + m_Focused: + m_Background: {fileID: 0} + m_ScaledBackgrounds: [] + m_TextColor: {r: 0, g: 0, b: 0, a: 1} + m_OnNormal: + m_Background: {fileID: 0} + m_ScaledBackgrounds: [] + m_TextColor: {r: 0, g: 0, b: 0, a: 1} + m_OnHover: + m_Background: {fileID: 0} + m_ScaledBackgrounds: [] + m_TextColor: {r: 0, g: 0, b: 0, a: 1} + m_OnActive: + m_Background: {fileID: 0} + m_ScaledBackgrounds: [] + m_TextColor: {r: 0, g: 0, b: 0, a: 1} + m_OnFocused: + m_Background: {fileID: 0} + m_ScaledBackgrounds: [] + m_TextColor: {r: 0, g: 0, b: 0, a: 1} + m_Border: + m_Left: 0 + m_Right: 0 + m_Top: 0 + m_Bottom: 0 + m_Margin: + m_Left: 0 + m_Right: 0 + m_Top: 0 + m_Bottom: 0 + m_Padding: + m_Left: 0 + m_Right: 0 + m_Top: 0 + m_Bottom: 0 + m_Overflow: + m_Left: 0 + m_Right: 0 + m_Top: 0 + m_Bottom: 0 + m_Font: {fileID: 0} + m_FontSize: 0 + m_FontStyle: 0 + m_Alignment: 0 + m_WordWrap: 0 + m_RichText: 1 + m_TextClipping: 1 + m_ImagePosition: 0 + m_ContentOffset: {x: 0, y: 0} + m_FixedWidth: 0 + m_FixedHeight: 0 + m_StretchWidth: 1 + m_StretchHeight: 0 + m_ScrollView: + m_Name: scrollview + m_Normal: + m_Background: {fileID: 0} + m_ScaledBackgrounds: [] + m_TextColor: {r: 0, g: 0, b: 0, a: 1} + m_Hover: + m_Background: {fileID: 0} + m_ScaledBackgrounds: [] + m_TextColor: {r: 0, g: 0, b: 0, a: 1} + m_Active: + m_Background: {fileID: 0} + m_ScaledBackgrounds: [] + m_TextColor: {r: 0, g: 0, b: 0, a: 1} + m_Focused: + m_Background: {fileID: 0} + m_ScaledBackgrounds: [] + m_TextColor: {r: 0, g: 0, b: 0, a: 1} + m_OnNormal: + m_Background: {fileID: 0} + m_ScaledBackgrounds: [] + m_TextColor: {r: 0, g: 0, b: 0, a: 1} + m_OnHover: + m_Background: {fileID: 0} + m_ScaledBackgrounds: [] + m_TextColor: {r: 0, g: 0, b: 0, a: 1} + m_OnActive: + m_Background: {fileID: 0} + m_ScaledBackgrounds: [] + m_TextColor: {r: 0, g: 0, b: 0, a: 1} + m_OnFocused: + m_Background: {fileID: 0} + m_ScaledBackgrounds: [] + m_TextColor: {r: 0, g: 0, b: 0, a: 1} + m_Border: + m_Left: 0 + m_Right: 0 + m_Top: 0 + m_Bottom: 0 + m_Margin: + m_Left: 0 + m_Right: 0 + m_Top: 0 + m_Bottom: 0 + m_Padding: + m_Left: 0 + m_Right: 0 + m_Top: 0 + m_Bottom: 0 + m_Overflow: + m_Left: 0 + m_Right: 0 + m_Top: 0 + m_Bottom: 0 + m_Font: {fileID: 0} + m_FontSize: 0 + m_FontStyle: 0 + m_Alignment: 0 + m_WordWrap: 0 + m_RichText: 1 + m_TextClipping: 1 + m_ImagePosition: 0 + m_ContentOffset: {x: 0, y: 0} + m_FixedWidth: 0 + m_FixedHeight: 0 + m_StretchWidth: 1 + m_StretchHeight: 0 + m_CustomStyles: + - m_Name: thumb + m_Normal: + m_Background: {fileID: 0} + m_ScaledBackgrounds: [] + m_TextColor: {r: 0, g: 0, b: 0, a: 1} + m_Hover: + m_Background: {fileID: 0} + m_ScaledBackgrounds: [] + m_TextColor: {r: 0, g: 0, b: 0, a: 1} + m_Active: + m_Background: {fileID: 0} + m_ScaledBackgrounds: [] + m_TextColor: {r: 0, g: 0, b: 0, a: 1} + m_Focused: + m_Background: {fileID: 0} + m_ScaledBackgrounds: [] + m_TextColor: {r: 0, g: 0, b: 0, a: 1} + m_OnNormal: + m_Background: {fileID: 0} + m_ScaledBackgrounds: [] + m_TextColor: {r: 0, g: 0, b: 0, a: 1} + m_OnHover: + m_Background: {fileID: 0} + m_ScaledBackgrounds: [] + m_TextColor: {r: 0, g: 0, b: 0, a: 1} + m_OnActive: + m_Background: {fileID: 0} + m_ScaledBackgrounds: [] + m_TextColor: {r: 0, g: 0, b: 0, a: 1} + m_OnFocused: + m_Background: {fileID: 0} + m_ScaledBackgrounds: [] + m_TextColor: {r: 0, g: 0, b: 0, a: 1} + m_Border: + m_Left: 0 + m_Right: 0 + m_Top: 0 + m_Bottom: 0 + m_Margin: + m_Left: 0 + m_Right: 0 + m_Top: 0 + m_Bottom: 0 + m_Padding: + m_Left: 0 + m_Right: 0 + m_Top: 0 + m_Bottom: 0 + m_Overflow: + m_Left: 0 + m_Right: 0 + m_Top: 0 + m_Bottom: 0 + m_Font: {fileID: 0} + m_FontSize: 0 + m_FontStyle: 0 + m_Alignment: 0 + m_WordWrap: 0 + m_RichText: 1 + m_TextClipping: 0 + m_ImagePosition: 0 + m_ContentOffset: {x: 0, y: 0} + m_FixedWidth: 0 + m_FixedHeight: 0 + m_StretchWidth: 1 + m_StretchHeight: 0 + - m_Name: leftbutton + m_Normal: + m_Background: {fileID: 0} + m_ScaledBackgrounds: [] + m_TextColor: {r: 0, g: 0, b: 0, a: 1} + m_Hover: + m_Background: {fileID: 0} + m_ScaledBackgrounds: [] + m_TextColor: {r: 0, g: 0, b: 0, a: 1} + m_Active: + m_Background: {fileID: 0} + m_ScaledBackgrounds: [] + m_TextColor: {r: 0, g: 0, b: 0, a: 1} + m_Focused: + m_Background: {fileID: 0} + m_ScaledBackgrounds: [] + m_TextColor: {r: 0, g: 0, b: 0, a: 1} + m_OnNormal: + m_Background: {fileID: 0} + m_ScaledBackgrounds: [] + m_TextColor: {r: 0, g: 0, b: 0, a: 1} + m_OnHover: + m_Background: {fileID: 0} + m_ScaledBackgrounds: [] + m_TextColor: {r: 0, g: 0, b: 0, a: 1} + m_OnActive: + m_Background: {fileID: 0} + m_ScaledBackgrounds: [] + m_TextColor: {r: 0, g: 0, b: 0, a: 1} + m_OnFocused: + m_Background: {fileID: 0} + m_ScaledBackgrounds: [] + m_TextColor: {r: 0, g: 0, b: 0, a: 1} + m_Border: + m_Left: 0 + m_Right: 0 + m_Top: 0 + m_Bottom: 0 + m_Margin: + m_Left: 0 + m_Right: 0 + m_Top: 0 + m_Bottom: 0 + m_Padding: + m_Left: 0 + m_Right: 0 + m_Top: 0 + m_Bottom: 0 + m_Overflow: + m_Left: 0 + m_Right: 0 + m_Top: 0 + m_Bottom: 0 + m_Font: {fileID: 0} + m_FontSize: 0 + m_FontStyle: 0 + m_Alignment: 0 + m_WordWrap: 0 + m_RichText: 1 + m_TextClipping: 0 + m_ImagePosition: 0 + m_ContentOffset: {x: 0, y: 0} + m_FixedWidth: 0 + m_FixedHeight: 0 + m_StretchWidth: 1 + m_StretchHeight: 0 + - m_Name: rightbutton + m_Normal: + m_Background: {fileID: 0} + m_ScaledBackgrounds: [] + m_TextColor: {r: 0, g: 0, b: 0, a: 1} + m_Hover: + m_Background: {fileID: 0} + m_ScaledBackgrounds: [] + m_TextColor: {r: 0, g: 0, b: 0, a: 1} + m_Active: + m_Background: {fileID: 0} + m_ScaledBackgrounds: [] + m_TextColor: {r: 0, g: 0, b: 0, a: 1} + m_Focused: + m_Background: {fileID: 0} + m_ScaledBackgrounds: [] + m_TextColor: {r: 0, g: 0, b: 0, a: 1} + m_OnNormal: + m_Background: {fileID: 0} + m_ScaledBackgrounds: [] + m_TextColor: {r: 0, g: 0, b: 0, a: 1} + m_OnHover: + m_Background: {fileID: 0} + m_ScaledBackgrounds: [] + m_TextColor: {r: 0, g: 0, b: 0, a: 1} + m_OnActive: + m_Background: {fileID: 0} + m_ScaledBackgrounds: [] + m_TextColor: {r: 0, g: 0, b: 0, a: 1} + m_OnFocused: + m_Background: {fileID: 0} + m_ScaledBackgrounds: [] + m_TextColor: {r: 0, g: 0, b: 0, a: 1} + m_Border: + m_Left: 0 + m_Right: 0 + m_Top: 0 + m_Bottom: 0 + m_Margin: + m_Left: 0 + m_Right: 0 + m_Top: 0 + m_Bottom: 0 + m_Padding: + m_Left: 0 + m_Right: 0 + m_Top: 0 + m_Bottom: 0 + m_Overflow: + m_Left: 0 + m_Right: 0 + m_Top: 0 + m_Bottom: 0 + m_Font: {fileID: 0} + m_FontSize: 0 + m_FontStyle: 0 + m_Alignment: 0 + m_WordWrap: 0 + m_RichText: 1 + m_TextClipping: 0 + m_ImagePosition: 0 + m_ContentOffset: {x: 0, y: 0} + m_FixedWidth: 0 + m_FixedHeight: 0 + m_StretchWidth: 1 + m_StretchHeight: 0 + m_Settings: + m_DoubleClickSelectsWord: 1 + m_TripleClickSelectsLine: 1 + m_CursorColor: {r: 1, g: 1, b: 1, a: 1} + m_CursorFlashSpeed: -1 + m_SelectionColor: {r: 1, g: 0.38403907, b: 0, a: 0.7} diff --git a/Assets/Sample/Assets/sa_gui_skin.guiskin.meta b/Assets/Sample/Assets/sa_gui_skin.guiskin.meta new file mode 100644 index 0000000..c71f43f --- /dev/null +++ b/Assets/Sample/Assets/sa_gui_skin.guiskin.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 1d23be6d45b23ff4bbcbdd2d1bb42cdd +timeCreated: 1598326838 +licenseType: Free +NativeFormatImporter: + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Sample/Sample.cs b/Assets/Sample/Sample.cs new file mode 100644 index 0000000..5636f63 --- /dev/null +++ b/Assets/Sample/Sample.cs @@ -0,0 +1,266 @@ +using System; +using System.Collections.Generic; +using SensorDataAnalytics.Utils; +using SensorsAnalytics; +using UnityEngine; +using UnityEngine.SceneManagement; +using UnityEngine.UI; +using SensorsAnalytics.Wrapper; + +public class Sample : MonoBehaviour,IDynamicSuperProperties +{ + private const string Name = "profileSet"; + public GUIStyle guiStyle; + public GUISkin guiSkin; + private Vector2 scrollVector2; + private bool finalResult = false; + + // Start is called before the first frame update + void Awake() + { + print("sample awake===="); + + + } + + + private void OnGUI() + { + //print("ongui===="); + int screenWidth = Screen.width; + int screenHeight = Screen.height; + GUI.skin = guiSkin; + guiStyle.fontSize = 30; + GUILayout.BeginArea(new Rect(screenWidth * 0.1f, screenHeight * 0.15f, screenWidth * 0.8f, screenHeight * 0.7f)); + scrollVector2 = GUILayout.BeginScrollView(scrollVector2); + + GUILayout.Label("SensorsData Unity SDK"); + + + if (GUILayout.Button("Track 事件")) + { + DateTime dateTime = DateTime.Now; + + Dictionary dictionary = new Dictionary(); + dictionary.Add("country", "中国"); + dictionary.Add("address", dateTime); + //dictionary.Add("test_array", new int[] { 1, 2, 3, 4, 5 }); + + print("Track an Event."); + SensorsDataAPI.Track("Jjcheng112", dictionary); + } + + + GUILayout.Space(20); + + Scene scene = SceneManager.GetActiveScene(); + if (scene.name == "Second") + { + if (GUILayout.Button("Load Sample Scence")) + { + SceneManager.LoadScene("Sample"); + } + + GUILayout.Space(20); + if (GUILayout.Button("set android max cache size")) + { + print("set android max cache size."); + SensorsDataAPI.SetAndroidMaxCacheSize(20 * 1024 * 1024); + } + GUILayout.Space(20); + if (GUILayout.Button("set ios max cache size")) + { + print("set ios max cache size."); + SensorsDataAPI.SetiOSMaxCacheSize(20); + } + GUILayout.Space(20); + if (GUILayout.Button("delete all")) + { + print("delete all."); + SensorsDataAPI.DeleteAll(); + } + GUILayout.Space(20); + if (GUILayout.Button("set flush bulk size")) + { + print("set flush bulk size."); + SensorsDataAPI.SetFlushBulkSize(90); + } + GUILayout.Space(20); + if (GUILayout.Button("set flush interval")) + { + print("set flush inteval."); + SensorsDataAPI.SetFlushInterval(10 * 1000); + } + GUILayout.Space(20); + if (GUILayout.Button("set flush network type")) + { + print("set flush network type."); + SensorsDataAPI.SetFlushNetworkPolicy((int)NetworkType.TYPE_ALL); + } + + GUILayout.Space(20); + if (GUILayout.Button("profile set once")) + { + print("profile set once."); + Dictionary dictionary = new Dictionary(); + dictionary.Add("age", "9999"); + SensorsDataAPI.ProfileSetOnce(dictionary); + } + GUILayout.Space(20); + if (GUILayout.Button("track installation")) + { + print("track installation."); + Dictionary dictionary = new Dictionary(); + dictionary.Add("testinstall", "9999"); + SensorsDataAPI.TrackAppInstall(dictionary, true); + } + } + else + { + if (GUILayout.Button("Load Second Scence")) + { + SceneManager.LoadScene("Second"); + } + //场景一中定义的测试按钮 + GUILayout.Space(20); + if (GUILayout.Button("Identiy")) + { + print("identity test."); + SensorsDataAPI.Identify("identify_custom_123"); + } + GUILayout.Space(20); + if (GUILayout.Button("Login")) + { + print("Login test."); + SensorsDataAPI.Login("zhangwei_login"); + } + GUILayout.Space(20); + if (GUILayout.Button("Logout")) + { + print("logout test."); + SensorsDataAPI.Logout(); + } + GUILayout.Space(20); + if (GUILayout.Button("Profile Set")) + { + print("profile set test."); + Dictionary dictionary = new Dictionary(); + dictionary.Add("age", "18888888888888"); + SensorsDataAPI.ProfileSet(dictionary); + } + GUILayout.Space(20); + if (GUILayout.Button("register super properties")) + { + print("register super properties test."); + Dictionary dictionary = new Dictionary(); + dictionary.Add("super_test1", "tttt"); + dictionary.Add("super_test2", "ssss"); + + SensorsDataAPI.RegisterSuperProperties(dictionary); + } + GUILayout.Space(20); + if (GUILayout.Button("get supper properties")) + { + print("get super properties test."); + Dictionary superProperties = SensorsDataAPI.GetSuperProperties(); + print("result is: " + SAUtils.Parse2JsonStr(superProperties)); + } + GUILayout.Space(20); + if (GUILayout.Button("unregister super properties")) + { + print("unregister super properties."); + SensorsDataAPI.UnregisterSuperProperty("super_test1"); + } + GUILayout.Space(20); + if (GUILayout.Button("clear super properties")) + { + print("clear super properties."); + SensorsDataAPI.ClearSuperProperties(); + } + GUILayout.Space(20); + if (GUILayout.Button("start timer")) + { + print("start timer."); + SensorsDataAPI.TrackTimerStart("BuyGoods"); + } + GUILayout.Space(20); + if (GUILayout.Button("pause timer")) + { + print("pause timer."); + SensorsDataAPI.TrackTimerPause("BuyGoods"); + } + GUILayout.Space(20); + if (GUILayout.Button("resume timer")) + { + print("resume timer."); + SensorsDataAPI.TrackTimerResume("BuyGoods"); + } + GUILayout.Space(20); + if (GUILayout.Button("end timer")) + { + print("end timer."); + SensorsDataAPI.TrackTimerEnd("BuyGoods"); + } + GUILayout.Space(20); + if (GUILayout.Button("clear timer")) + { + print("clear timer."); + SensorsDataAPI.ClearTrackTimer(); + } + GUILayout.Space(20); + if (GUILayout.Button("remove timer")) + { + print("remove timer."); + SensorsDataAPI.RemoveTimer("BuyGoods"); + } + GUILayout.Space(20); + if (GUILayout.Button("flush")) + { + print("flush test."); + SensorsDataAPI.Flush(); + } + + } + + GUILayout.EndScrollView(); + GUILayout.EndArea(); + + + //GUI.Label(new Rect(padding, height, maxWidth, 80), "Sensors Data", guiStyle); + //height += 80 + padding; + + //if (GUI.Button(new Rect(padding, height, maxWidth, 100), "Track 一条事件")) + //{ + // print("Track an Event."); + // Dictionary dictionary = new Dictionary(); + // dictionary.Add("country", "中国"); + // dictionary.Add("address", "中国2222"); + // SensorsDataAPI.Track("ViewProduct", dictionary); + //} + } + + void Start() + { + + } + + private void setButtonText(Button button, string text) + { + button.GetComponentInChildren().text = text; + } + + // Update is called once per frame + void Update() + { + + } + + Dictionary IDynamicSuperProperties.getProperties() + { + print("======12312312"); + Dictionary dic = new Dictionary(); + dic.Add("isGirl", finalResult); + finalResult = !finalResult; + return dic; + } +} diff --git a/Assets/Sample/Sample.cs.meta b/Assets/Sample/Sample.cs.meta new file mode 100644 index 0000000..1e683ad --- /dev/null +++ b/Assets/Sample/Sample.cs.meta @@ -0,0 +1,12 @@ +fileFormatVersion: 2 +guid: 9f4f12095d343794aae7f797c93fad22 +timeCreated: 1598326835 +licenseType: Free +MonoImporter: + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Sample/Sample.unity b/Assets/Sample/Sample.unity new file mode 100644 index 0000000..d1330e1 Binary files /dev/null and b/Assets/Sample/Sample.unity differ diff --git a/Assets/Sample/Sample.unity.meta b/Assets/Sample/Sample.unity.meta new file mode 100644 index 0000000..14a7754 --- /dev/null +++ b/Assets/Sample/Sample.unity.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: c02ed8ebff8b97a49b242a8057c9ada3 +timeCreated: 1598326833 +licenseType: Free +DefaultImporter: + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Sample/Second.cs b/Assets/Sample/Second.cs new file mode 100644 index 0000000..857aa45 --- /dev/null +++ b/Assets/Sample/Second.cs @@ -0,0 +1,19 @@ +using System.Collections; +using System.Collections.Generic; +using SensorsAnalytics; +using UnityEngine; + +public class Second : MonoBehaviour +{ + // Start is called before the first frame update + void Start() + { + SensorsDataAPI.Track("View_Second_Scene"); + } + + // Update is called once per frame + void Update() + { + + } +} diff --git a/Assets/Sample/Second.cs.meta b/Assets/Sample/Second.cs.meta new file mode 100644 index 0000000..2ace50f --- /dev/null +++ b/Assets/Sample/Second.cs.meta @@ -0,0 +1,12 @@ +fileFormatVersion: 2 +guid: 4f0df741f96ec84478871e0110d1f684 +timeCreated: 1598326834 +licenseType: Free +MonoImporter: + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Sample/Second.unity b/Assets/Sample/Second.unity new file mode 100644 index 0000000..ad44e8c Binary files /dev/null and b/Assets/Sample/Second.unity differ diff --git a/Assets/Sample/Second.unity.meta b/Assets/Sample/Second.unity.meta new file mode 100644 index 0000000..052b001 --- /dev/null +++ b/Assets/Sample/Second.unity.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: bf4a3f95f7aa9f04b9ccf4546b763801 +timeCreated: 1598326833 +licenseType: Free +DefaultImporter: + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Scenes.meta b/Assets/Scenes.meta new file mode 100644 index 0000000..6fd6824 --- /dev/null +++ b/Assets/Scenes.meta @@ -0,0 +1,9 @@ +fileFormatVersion: 2 +guid: 707e034c83b1fa84aaef40be68809b5b +folderAsset: yes +timeCreated: 1598326833 +licenseType: Free +DefaultImporter: + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Scenes/SampleScene.unity b/Assets/Scenes/SampleScene.unity new file mode 100644 index 0000000..f69cd40 --- /dev/null +++ b/Assets/Scenes/SampleScene.unity @@ -0,0 +1,313 @@ +%YAML 1.1 +%TAG !u! tag:unity3d.com,2011: +--- !u!29 &1 +OcclusionCullingSettings: + m_ObjectHideFlags: 0 + serializedVersion: 2 + m_OcclusionBakeSettings: + smallestOccluder: 5 + smallestHole: 0.25 + backfaceThreshold: 100 + m_SceneGUID: 00000000000000000000000000000000 + m_OcclusionCullingData: {fileID: 0} +--- !u!104 &2 +RenderSettings: + m_ObjectHideFlags: 0 + serializedVersion: 9 + m_Fog: 0 + m_FogColor: {r: 0.5, g: 0.5, b: 0.5, a: 1} + m_FogMode: 3 + m_FogDensity: 0.01 + m_LinearFogStart: 0 + m_LinearFogEnd: 300 + m_AmbientSkyColor: {r: 0.212, g: 0.227, b: 0.259, a: 1} + m_AmbientEquatorColor: {r: 0.114, g: 0.125, b: 0.133, a: 1} + m_AmbientGroundColor: {r: 0.047, g: 0.043, b: 0.035, a: 1} + m_AmbientIntensity: 1 + m_AmbientMode: 0 + m_SubtractiveShadowColor: {r: 0.42, g: 0.478, b: 0.627, a: 1} + m_SkyboxMaterial: {fileID: 10304, guid: 0000000000000000f000000000000000, type: 0} + m_HaloStrength: 0.5 + m_FlareStrength: 1 + m_FlareFadeSpeed: 3 + m_HaloTexture: {fileID: 0} + m_SpotCookie: {fileID: 10001, guid: 0000000000000000e000000000000000, type: 0} + m_DefaultReflectionMode: 0 + m_DefaultReflectionResolution: 128 + m_ReflectionBounces: 1 + m_ReflectionIntensity: 1 + m_CustomReflection: {fileID: 0} + m_Sun: {fileID: 705507994} + m_IndirectSpecularColor: {r: 0, g: 0, b: 0, a: 1} + m_UseRadianceAmbientProbe: 0 +--- !u!157 &3 +LightmapSettings: + m_ObjectHideFlags: 0 + serializedVersion: 11 + m_GIWorkflowMode: 1 + m_GISettings: + serializedVersion: 2 + m_BounceScale: 1 + m_IndirectOutputScale: 1 + m_AlbedoBoost: 1 + m_EnvironmentLightingMode: 0 + m_EnableBakedLightmaps: 1 + m_EnableRealtimeLightmaps: 0 + m_LightmapEditorSettings: + serializedVersion: 12 + m_Resolution: 2 + m_BakeResolution: 40 + m_AtlasSize: 1024 + m_AO: 0 + m_AOMaxDistance: 1 + m_CompAOExponent: 1 + m_CompAOExponentDirect: 0 + m_ExtractAmbientOcclusion: 0 + m_Padding: 2 + m_LightmapParameters: {fileID: 0} + m_LightmapsBakeMode: 1 + m_TextureCompression: 1 + m_FinalGather: 0 + m_FinalGatherFiltering: 1 + m_FinalGatherRayCount: 256 + m_ReflectionCompression: 2 + m_MixedBakeMode: 2 + m_BakeBackend: 1 + m_PVRSampling: 1 + m_PVRDirectSampleCount: 32 + m_PVRSampleCount: 500 + m_PVRBounces: 2 + m_PVREnvironmentSampleCount: 500 + m_PVREnvironmentReferencePointCount: 2048 + m_PVRFilteringMode: 2 + m_PVRDenoiserTypeDirect: 0 + m_PVRDenoiserTypeIndirect: 0 + m_PVRDenoiserTypeAO: 0 + m_PVRFilterTypeDirect: 0 + m_PVRFilterTypeIndirect: 0 + m_PVRFilterTypeAO: 0 + m_PVREnvironmentMIS: 0 + m_PVRCulling: 1 + m_PVRFilteringGaussRadiusDirect: 1 + m_PVRFilteringGaussRadiusIndirect: 5 + m_PVRFilteringGaussRadiusAO: 2 + m_PVRFilteringAtrousPositionSigmaDirect: 0.5 + m_PVRFilteringAtrousPositionSigmaIndirect: 2 + m_PVRFilteringAtrousPositionSigmaAO: 1 + m_ExportTrainingData: 0 + m_TrainingDataDestination: TrainingData + m_LightProbeSampleCountMultiplier: 4 + m_LightingDataAsset: {fileID: 0} + m_UseShadowmask: 1 +--- !u!196 &4 +NavMeshSettings: + serializedVersion: 2 + m_ObjectHideFlags: 0 + m_BuildSettings: + serializedVersion: 2 + agentTypeID: 0 + agentRadius: 0.5 + agentHeight: 2 + agentSlope: 45 + agentClimb: 0.4 + ledgeDropHeight: 0 + maxJumpAcrossDistance: 0 + minRegionArea: 2 + manualCellSize: 0 + cellSize: 0.16666667 + manualTileSize: 0 + tileSize: 256 + accuratePlacement: 0 + debug: + m_Flags: 0 + m_NavMeshData: {fileID: 0} +--- !u!1 &705507993 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 705507995} + - component: {fileID: 705507994} + m_Layer: 0 + m_Name: Directional Light + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!108 &705507994 +Light: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 705507993} + m_Enabled: 1 + serializedVersion: 10 + m_Type: 1 + m_Shape: 0 + m_Color: {r: 1, g: 0.95686275, b: 0.8392157, a: 1} + m_Intensity: 1 + m_Range: 10 + m_SpotAngle: 30 + m_InnerSpotAngle: 21.802082 + m_CookieSize: 10 + m_Shadows: + m_Type: 2 + m_Resolution: -1 + m_CustomResolution: -1 + m_Strength: 1 + m_Bias: 0.05 + m_NormalBias: 0.4 + m_NearPlane: 0.2 + m_CullingMatrixOverride: + e00: 1 + e01: 0 + e02: 0 + e03: 0 + e10: 0 + e11: 1 + e12: 0 + e13: 0 + e20: 0 + e21: 0 + e22: 1 + e23: 0 + e30: 0 + e31: 0 + e32: 0 + e33: 1 + m_UseCullingMatrixOverride: 0 + m_Cookie: {fileID: 0} + m_DrawHalo: 0 + m_Flare: {fileID: 0} + m_RenderMode: 0 + m_CullingMask: + serializedVersion: 2 + m_Bits: 4294967295 + m_RenderingLayerMask: 1 + m_Lightmapping: 1 + m_LightShadowCasterMode: 0 + m_AreaSize: {x: 1, y: 1} + m_BounceIntensity: 1 + m_ColorTemperature: 6570 + m_UseColorTemperature: 0 + m_BoundingSphereOverride: {x: 0, y: 0, z: 0, w: 0} + m_UseBoundingSphereOverride: 0 + m_ShadowRadius: 0 + m_ShadowAngle: 0 +--- !u!4 &705507995 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 705507993} + m_LocalRotation: {x: 0.40821788, y: -0.23456968, z: 0.10938163, w: 0.8754261} + m_LocalPosition: {x: 0, y: 3, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: [] + m_Father: {fileID: 0} + m_RootOrder: 1 + m_LocalEulerAnglesHint: {x: 50, y: -30, z: 0} +--- !u!1 &963194225 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 963194228} + - component: {fileID: 963194227} + - component: {fileID: 963194226} + - component: {fileID: 963194229} + m_Layer: 0 + m_Name: Main Camera + m_TagString: MainCamera + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!81 &963194226 +AudioListener: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 963194225} + m_Enabled: 1 +--- !u!20 &963194227 +Camera: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 963194225} + m_Enabled: 1 + serializedVersion: 2 + m_ClearFlags: 1 + m_BackGroundColor: {r: 0.19215687, g: 0.3019608, b: 0.4745098, a: 0} + m_projectionMatrixMode: 1 + m_GateFitMode: 2 + m_FOVAxisMode: 0 + m_SensorSize: {x: 36, y: 24} + m_LensShift: {x: 0, y: 0} + m_FocalLength: 50 + m_NormalizedViewPortRect: + serializedVersion: 2 + x: 0 + y: 0 + width: 1 + height: 1 + near clip plane: 0.3 + far clip plane: 1000 + field of view: 60 + orthographic: 0 + orthographic size: 5 + m_Depth: -1 + m_CullingMask: + serializedVersion: 2 + m_Bits: 4294967295 + m_RenderingPath: -1 + m_TargetTexture: {fileID: 0} + m_TargetDisplay: 0 + m_TargetEye: 3 + m_HDR: 1 + m_AllowMSAA: 1 + m_AllowDynamicResolution: 0 + m_ForceIntoRT: 0 + m_OcclusionCulling: 1 + m_StereoConvergence: 10 + m_StereoSeparation: 0.022 +--- !u!4 &963194228 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 963194225} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 0, y: 1, z: -10} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: [] + m_Father: {fileID: 0} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!114 &963194229 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 963194225} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 56d66485e688b4a35bd6c5c073681437, type: 3} + m_Name: + m_EditorClassIdentifier: + serverUrl: https://newsdktest.datasink.sensorsdata.cn/sa?project=zhangwei&token=5a394d2405c147ca + isEnableLog: 1 diff --git a/Assets/Scenes/SampleScene.unity.meta b/Assets/Scenes/SampleScene.unity.meta new file mode 100644 index 0000000..4d6c6a9 --- /dev/null +++ b/Assets/Scenes/SampleScene.unity.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 516c4b7b9e3941c4bbef8ab8a7bd3586 +timeCreated: 1598326833 +licenseType: Free +DefaultImporter: + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/SensorsAnalytics.meta b/Assets/SensorsAnalytics.meta new file mode 100644 index 0000000..a9149c2 --- /dev/null +++ b/Assets/SensorsAnalytics.meta @@ -0,0 +1,9 @@ +fileFormatVersion: 2 +guid: f9cba42c71265454abd71e6270ba4bed +folderAsset: yes +timeCreated: 1598326833 +licenseType: Free +DefaultImporter: + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/SensorsAnalytics/Editor.meta b/Assets/SensorsAnalytics/Editor.meta new file mode 100644 index 0000000..84e6766 --- /dev/null +++ b/Assets/SensorsAnalytics/Editor.meta @@ -0,0 +1,9 @@ +fileFormatVersion: 2 +guid: 3015b40debe39dd48b2d45b90c8f9724 +folderAsset: yes +timeCreated: 1598326833 +licenseType: Free +DefaultImporter: + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/SensorsAnalytics/Editor/SAInspector.cs b/Assets/SensorsAnalytics/Editor/SAInspector.cs new file mode 100644 index 0000000..44abfb3 --- /dev/null +++ b/Assets/SensorsAnalytics/Editor/SAInspector.cs @@ -0,0 +1,100 @@ +using SensorsAnalytics; +using UnityEditor; +using UnityEngine; + +[CustomEditor(typeof(SensorsDataAPI))] +public class SA_Inspector : Editor +{ + + bool isEnalbeLog = true; + string serverUrl = ""; + GUIStyle titleStyle; + GUIStyle labelStyle; + + private void OnEnable() + { + isEnalbeLog = this.serializedObject.FindProperty("isEnableLog").boolValue; + serverUrl = this.serializedObject.FindProperty("serverUrl").stringValue; + //finalResult = this.serializedObject.FindProperty("autoTrackType").intValue; + finalNetworkType = this.serializedObject.FindProperty("networkType").intValue; + titleStyle = new GUIStyle(); + titleStyle.fontSize = 15; + titleStyle.fontStyle = FontStyle.Bold; + titleStyle.normal.textColor = Color.white; + + labelStyle = new GUIStyle(); + labelStyle.fontStyle = FontStyle.Bold; + } + + public override void OnInspectorGUI() + { + base.DrawDefaultInspector(); + this.serializedObject.Update(); + EditorGUILayout.LabelField("SensorsData Unity SDK Config", titleStyle); + EditorGUILayout.Space(); + EditorGUILayout.LabelField("Version", SensorsDataAPI.SDK_VERSION); + serverUrl = EditorGUILayout.TextField("Server Url", serverUrl); + + SensorsDataAPI sensorsDataAPI = (SensorsDataAPI)target; + isEnalbeLog = EditorGUILayout.Toggle("Enable Log", isEnalbeLog); + //autoTrackTypes(); + networkTypes(); + this.serializedObject.FindProperty("isEnableLog").boolValue = isEnalbeLog; + this.serializedObject.FindProperty("serverUrl").stringValue = serverUrl; + this.serializedObject.ApplyModifiedProperties(); + } + + private void OnValidate() + { + } + + /* + //全埋点相关的配置,暂时不需要 + int finalResult = 0; + private void autoTrackTypes() + { + int tmpResult = 0; + EditorGUILayout.LabelField("AutoTrackTypes", labelStyle); + if (EditorGUILayout.Toggle("AppStart", (finalResult & 1) != 0)) + { + tmpResult = 1; + } + if (EditorGUILayout.Toggle("AppEnd", (finalResult & 1 << 1) != 0)) + { + tmpResult |= 1 << 1; + } + finalResult = tmpResult; + this.serializedObject.FindProperty("autoTrackType").intValue = finalResult; + }*/ + + //网络类型配置 + int finalNetworkType = 0; + private void networkTypes() + { + int tmpResult = 0; + EditorGUILayout.LabelField("NetworkTypes", labelStyle); + if (EditorGUILayout.Toggle("2G", (finalNetworkType & 1) != 0)) + { + tmpResult = 1; + } + if (EditorGUILayout.Toggle("3G", (finalNetworkType & 1 << 1) != 0)) + { + tmpResult |= 1 << 1; + } + if (EditorGUILayout.Toggle("4G", (finalNetworkType & 1 << 2) != 0)) + { + tmpResult |= 1 << 2; + } + if (EditorGUILayout.Toggle("5G", (finalNetworkType & 1 << 4) != 0)) + { + tmpResult |= 1 << 4; + } + if (EditorGUILayout.Toggle("Wifi", (finalNetworkType & 1 << 3) != 0)) + { + tmpResult |= 1 << 3; + } + + finalNetworkType = tmpResult; + this.serializedObject.FindProperty("networkType").intValue = finalNetworkType; + } +} \ No newline at end of file diff --git a/Assets/SensorsAnalytics/Editor/SAInspector.cs.meta b/Assets/SensorsAnalytics/Editor/SAInspector.cs.meta new file mode 100644 index 0000000..f35196b --- /dev/null +++ b/Assets/SensorsAnalytics/Editor/SAInspector.cs.meta @@ -0,0 +1,12 @@ +fileFormatVersion: 2 +guid: 5adbecfb35a13474986e1f0439aeff3d +timeCreated: 1598326835 +licenseType: Free +MonoImporter: + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/SensorsAnalytics/SensorsAnalytics.prefab b/Assets/SensorsAnalytics/SensorsAnalytics.prefab new file mode 100644 index 0000000..5169316 Binary files /dev/null and b/Assets/SensorsAnalytics/SensorsAnalytics.prefab differ diff --git a/Assets/SensorsAnalytics/SensorsAnalytics.prefab.meta b/Assets/SensorsAnalytics/SensorsAnalytics.prefab.meta new file mode 100644 index 0000000..3be9a27 --- /dev/null +++ b/Assets/SensorsAnalytics/SensorsAnalytics.prefab.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: d7749d4b70bc4b64d947b38a47d7ce1a +timeCreated: 1604717200 +licenseType: Free +NativeFormatImporter: + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/SensorsAnalytics/SensorsDataAPI.cs b/Assets/SensorsAnalytics/SensorsDataAPI.cs new file mode 100644 index 0000000..b36a057 --- /dev/null +++ b/Assets/SensorsAnalytics/SensorsDataAPI.cs @@ -0,0 +1,337 @@ +/* + * Created by zhangwei on 2020/8/6. + * Copyright 2015-2020 Sensors Data Inc. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +using SensorDataAnalytics.Utils; +using SensorsAnalytics.Wrapper; +using System.Collections.Generic; +using System.Threading; +using UnityEngine; + +namespace SensorsAnalytics +{ + + public enum NetworkType + { + TYPE_NONE = 0, + TYPE_2G = 1, + TYPE_3G = 1 << 1, + TYPE_4G = 1 << 2, + TYPE_WIFI = 1 << 3, + TYPE_5G = 1 << 4, + TYPE_ALL = 0xff + } + + public class SensorsDataAPI : MonoBehaviour + { + public readonly static string ANDROID_VERSION = "4.4.3"; + public readonly static string IOS_VERSION = "2.1.17"; + public readonly static string UNITY_VERSION = "1.0.1"; + /// + /// 当前 Unity SDK 版本 + /// + public readonly static string SDK_VERSION = UNITY_VERSION + "_" + ANDROID_VERSION + "_" + IOS_VERSION; + [Header("SensorsData Unity SDK Config")] + [HideInInspector] + public string serverUrl = "请输入数据接收地址..."; + [HideInInspector] + public bool isEnableLog = false; + + [HideInInspector] + public int autoTrackType = 1 | 1 << 1; + [HideInInspector] + public int networkType = 1 | 1 << 1 | 1 << 2 | 1 << 3 | 1 << 4; + + + #region internal use + + private static SensorsDataAPI saInstance; + private static ReaderWriterLockSlim lockObj = new ReaderWriterLockSlim(); + private static SensorsAnalyticsWrapper analyticsWrapper; + private static volatile bool isFirstEvent = true; + + void Awake() + { + SALog.Debug("sensorsdataapi awake."); + if (saInstance == null) + { + DontDestroyOnLoad(gameObject); + saInstance = this; + } + else + { + Destroy(gameObject); + return; + } + analyticsWrapper = new SensorsAnalyticsWrapper(serverUrl, isEnableLog, autoTrackType, networkType); + } + #endregion + + + // Start is called before the first frame update + void Start() + { + + } + + // Update is called once per frame + void Update() + { + + } + + /// + /// 上报一条事件 + /// + /// 事件名 + /// 事件属性 + public static void Track(string eventName, Dictionary properties = null) + { + if (isFirstEvent) + { + isFirstEvent = false; + if(properties == null) + { + properties = new Dictionary(); + } + List list = new List(); + list.Add("unity:" + SDK_VERSION); + properties.Add("$lib_plugin_version", list); + } + analyticsWrapper.Track(eventName, properties); + } + + /// + /// 触发一次数据上报逻辑,会将缓存中的数据发往服务端 + /// + public static void Flush() + { + analyticsWrapper.Flush(); + } + + /// + /// 设置当前用户的 loginId + /// + /// 登录 ID + public static void Login(string loginId) + { + analyticsWrapper.Login(loginId); + } + + /// + /// 清空当前用户的 login + /// + public static void Logout() + { + analyticsWrapper.Logout(); + } + + /// + /// 设置用户的一个或多个 profile,profile 如果存在,则覆盖,否则就新创建 + /// + /// 属性列表 + public static void ProfileSet(Dictionary properties) + { + analyticsWrapper.ProfileSet(properties); + } + + /// + /// 首次设置用户的一个或多个 Profile,与 ProfileSet 不同的是,如果之前存在,则忽略,否则新创建 + /// + /// 属性列表 + public static void ProfileSetOnce(Dictionary properties) + { + analyticsWrapper.ProfileSetOnce(properties); + } + + /// + /// 开始事件计时器,计时单位为秒 + /// + /// 事件的名称 + /// 如果需要 track 同一个事件名多次,对于后面的暂停、恢复、停止等操作使用此方法的返回值。 + public static string TrackTimerStart(string eventName) + { + return analyticsWrapper.TrackTimerStart(eventName); + } + + /// + /// 停止事件计时器,并记录此事件信息 + /// + /// 事件名称 + /// 事件属性 + public static void TrackTimerEnd(string eventName, Dictionary properties = null) + { + analyticsWrapper.TrackTimerEnd(eventName, properties); + } + + /// + /// 暂停事件计时器 + /// + /// 事件名称 + public static void TrackTimerPause(string eventName) + { + analyticsWrapper.TrackTimerPause(eventName); + } + + /// + /// 恢复事件计时器 + /// + /// 事件名称 + public static void TrackTimerResume(string eventName) + { + analyticsWrapper.TrackTimerResume(eventName); + } + + /// + /// 清楚所有的计时器 + /// + public static void ClearTrackTimer() + { + analyticsWrapper.ClearTrackTimer(); + } + + /// + /// 注册所有事件都有的公共属性 + /// + /// 事件公共属性 + public static void RegisterSuperProperties(Dictionary properties) + { + analyticsWrapper.RegisterSuperProperties(properties); + } + + /// + /// 删除指定属性名的信息 + /// + /// 属性名 + public static void UnregisterSuperProperty(string superPropertyName) + { + analyticsWrapper.UnregisterSuperProperty(superPropertyName); + } + + /// + /// 获取注册的公共属性信息 + /// + /// + public static Dictionary GetSuperProperties() + { + return analyticsWrapper.GetSuperProperties(); + } + + /// + /// 清除所有的公共属性 + /// + public static void ClearSuperProperties() + { + analyticsWrapper.ClearSuperProperties(); + } + + /// + /// 设置匿名 ID + /// + /// 匿名 ID + public static void Identify(string distinctId) + { + analyticsWrapper.Identify(distinctId); + } + + /// + /// 用于 App 首次启动时追踪渠道来源并设置渠道事件的属性 + /// + /// 事件的属性 + /// 是否关闭此次渠道匹配的回调请求 + public static void TrackAppInstall(Dictionary properties = null, bool disableCallback = false) + { + analyticsWrapper.TrackInstallation(properties, disableCallback); + } + + /// + /// 删除事件计时器 + /// + /// 事件名称 + public static void RemoveTimer(string eventName) + { + analyticsWrapper.RemoveTimer(eventName); + } + + /// + /// 设置本地缓存上限值,单位是 byte,默认是 32MB:32 * 1024 * 1024,最小 16MB:16 * 1024 * 1024,若小于 16MB,则按 16MB 处理 + /// + /// 单位 byte + public static void SetAndroidMaxCacheSize(long maxCacheSize) + { + #if UNITY_ANDROID + analyticsWrapper.SetAndroidMaxCacheSize(maxCacheSize); + #endif + } + + /// + /// 设置本地缓存上限值,默认和最小值都是 10000 条 + /// + /// 最大缓存条数 + public static void SetiOSMaxCacheSize(int maxCount) + { + #if UNITY_IOS + analyticsWrapper.SetiOSMaxCacheSize(maxCount); + #endif + } + + /// + /// 删除缓存的所有事件 + /// + public static void DeleteAll() + { + analyticsWrapper.DeleteAll(); + } + + /// + /// 设置本地缓存日志的最大条目数,最小 50 条 + /// + /// 缓存数目 + public static void SetFlushBulkSize(int flushBulkSize) + { + analyticsWrapper.SetFlushBulkSize(flushBulkSize); + } + + /// + /// 设置两次数据发送的最小时间间隔,最小 5 秒钟 + /// + /// 单位毫秒 + public static void SetFlushInterval(int flushInteval) + { + analyticsWrapper.SetFlushInterval(flushInteval); + } + + /// + /// 设置 flush 时网络发送策略 + /// + /// 类似:NetworkType.Type_2G + NetworkType.Type_3G + public static void SetFlushNetworkPolicy(int types) + { + analyticsWrapper.SetFlushNetworkPolicy(types); + } + + + /* /// + /// 注册动态公共属性 + /// + /// 动态公共属性需要实现的接口 + public static void RegisterDynamciSuperProperties(IDynamicSuperProperties superProperties) + { + analyticsWrapper.RegisterDynamciSuperProperties(superProperties); + }*/ + } + +} + diff --git a/Assets/SensorsAnalytics/SensorsDataAPI.cs.meta b/Assets/SensorsAnalytics/SensorsDataAPI.cs.meta new file mode 100644 index 0000000..ead009c --- /dev/null +++ b/Assets/SensorsAnalytics/SensorsDataAPI.cs.meta @@ -0,0 +1,12 @@ +fileFormatVersion: 2 +guid: 56cd4725108e5da43b56d9fd24ca7689 +timeCreated: 1598326834 +licenseType: Free +MonoImporter: + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/SensorsAnalytics/Utils.meta b/Assets/SensorsAnalytics/Utils.meta new file mode 100644 index 0000000..6709911 --- /dev/null +++ b/Assets/SensorsAnalytics/Utils.meta @@ -0,0 +1,9 @@ +fileFormatVersion: 2 +guid: 28a850c796d75a94c95f9f1f0d719633 +folderAsset: yes +timeCreated: 1598326833 +licenseType: Free +DefaultImporter: + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/SensorsAnalytics/Utils/MiniJSON.cs b/Assets/SensorsAnalytics/Utils/MiniJSON.cs new file mode 100644 index 0000000..dc0d35c --- /dev/null +++ b/Assets/SensorsAnalytics/Utils/MiniJSON.cs @@ -0,0 +1,632 @@ +/* + * Copyright (c) 2013 Calvin Rien + * + * Based on the JSON parser by Patrick van Bergen + * http://techblog.procurios.nl/k/618/news/view/14605/14863/How-do-I-write-my-own-parser-for-JSON.html + * + * Simplified it so that it doesn't throw exceptions + * and can be used in Unity iPhone with maximum code stripping. + * + * Permission is hereby granted, free of charge, to any person obtaining + * a copy of this software and associated documentation files (the + * "Software"), to deal in the Software without restriction, including + * without limitation the rights to use, copy, modify, merge, publish, + * distribute, sublicense, and/or sell copies of the Software, and to + * permit persons to whom the Software is furnished to do so, subject to + * the following conditions: + * + * The above copyright notice and this permission notice shall be + * included in all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, + * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF + * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. + * IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY + * CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, + * TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE + * SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + */ +using System; +using System.Collections; +using System.Collections.Generic; +using System.IO; +using System.Text; + +namespace MiniJSON +{ + // Example usage: + // + // using UnityEngine; + // using System.Collections; + // using System.Collections.Generic; + // using MiniJSON; + // + // public class MiniJSONTest : MonoBehaviour { + // void Start () { + // var jsonString = "{ \"array\": [1.44,2,3], " + + // "\"object\": {\"key1\":\"value1\", \"key2\":256}, " + + // "\"string\": \"The quick brown fox \\\"jumps\\\" over the lazy dog \", " + + // "\"unicode\": \"\\u3041 Men\u00fa sesi\u00f3n\", " + + // "\"int\": 65536, " + + // "\"float\": 3.1415926, " + + // "\"bool\": true, " + + // "\"null\": null }"; + // + // var dict = Json.Deserialize(jsonString) as Dictionary; + // + // Debug.Log("deserialized: " + dict.GetType()); + // Debug.Log("dict['array'][0]: " + ((List) dict["array"])[0]); + // Debug.Log("dict['string']: " + (string) dict["string"]); + // Debug.Log("dict['float']: " + (double) dict["float"]); // floats come out as doubles + // Debug.Log("dict['int']: " + (long) dict["int"]); // ints come out as longs + // Debug.Log("dict['unicode']: " + (string) dict["unicode"]); + // + // var str = Json.Serialize(dict); + // + // Debug.Log("serialized: " + str); + // } + // } + + /// + /// This class encodes and decodes JSON strings. + /// Spec. details, see http://www.json.org/ + /// + /// JSON uses Arrays and Objects. These correspond here to the datatypes IList and IDictionary. + /// All numbers are parsed to doubles. + /// + public static class Json + { + /// + /// Parses the string json into a value + /// + /// A JSON string. + /// An List<object>, a Dictionary<string, object>, a double, an integer,a string, null, true, or false + public static object Deserialize(string json) + { + // save the string for debug information + if (json == null) + { + return null; + } + + return Parser.Parse(json); + } + + sealed class Parser : IDisposable + { + const string WORD_BREAK = "{}[],:\""; + + public static bool IsWordBreak(char c) + { + return Char.IsWhiteSpace(c) || WORD_BREAK.IndexOf(c) != -1; + } + + enum TOKEN + { + NONE, + CURLY_OPEN, + CURLY_CLOSE, + SQUARED_OPEN, + SQUARED_CLOSE, + COLON, + COMMA, + STRING, + NUMBER, + TRUE, + FALSE, + NULL + }; + + StringReader json; + + Parser(string jsonString) + { + json = new StringReader(jsonString); + } + + public static object Parse(string jsonString) + { + using (var instance = new Parser(jsonString)) + { + return instance.ParseValue(); + } + } + + public void Dispose() + { + json.Dispose(); + json = null; + } + + Dictionary ParseObject() + { + Dictionary table = new Dictionary(); + + // ditch opening brace + json.Read(); + + // { + while (true) + { + switch (NextToken) + { + case TOKEN.NONE: + return null; + case TOKEN.COMMA: + continue; + case TOKEN.CURLY_CLOSE: + return table; + default: + // name + string name = ParseString(); + if (name == null) + { + return null; + } + + // : + if (NextToken != TOKEN.COLON) + { + return null; + } + // ditch the colon + json.Read(); + + // value + table[name] = ParseValue(); + break; + } + } + } + + List ParseArray() + { + List array = new List(); + + // ditch opening bracket + json.Read(); + + // [ + var parsing = true; + while (parsing) + { + TOKEN nextToken = NextToken; + + switch (nextToken) + { + case TOKEN.NONE: + return null; + case TOKEN.COMMA: + continue; + case TOKEN.SQUARED_CLOSE: + parsing = false; + break; + default: + object value = ParseByToken(nextToken); + + array.Add(value); + break; + } + } + + return array; + } + + object ParseValue() + { + TOKEN nextToken = NextToken; + return ParseByToken(nextToken); + } + + object ParseByToken(TOKEN token) + { + switch (token) + { + case TOKEN.STRING: + return ParseString(); + case TOKEN.NUMBER: + return ParseNumber(); + case TOKEN.CURLY_OPEN: + return ParseObject(); + case TOKEN.SQUARED_OPEN: + return ParseArray(); + case TOKEN.TRUE: + return true; + case TOKEN.FALSE: + return false; + case TOKEN.NULL: + return null; + default: + return null; + } + } + + string ParseString() + { + StringBuilder s = new StringBuilder(); + char c; + + // ditch opening quote + json.Read(); + + bool parsing = true; + while (parsing) + { + + if (json.Peek() == -1) + { + parsing = false; + break; + } + + c = NextChar; + switch (c) + { + case '"': + parsing = false; + break; + case '\\': + if (json.Peek() == -1) + { + parsing = false; + break; + } + + c = NextChar; + switch (c) + { + case '"': + case '\\': + case '/': + s.Append(c); + break; + case 'b': + s.Append('\b'); + break; + case 'f': + s.Append('\f'); + break; + case 'n': + s.Append('\n'); + break; + case 'r': + s.Append('\r'); + break; + case 't': + s.Append('\t'); + break; + case 'u': + var hex = new char[4]; + + for (int i = 0; i < 4; i++) + { + hex[i] = NextChar; + } + + s.Append((char)Convert.ToInt32(new string(hex), 16)); + break; + } + break; + default: + s.Append(c); + break; + } + } + + return s.ToString(); + } + + object ParseNumber() + { + string number = NextWord; + + if (number.IndexOf('.') == -1) + { + long parsedInt; + Int64.TryParse(number, out parsedInt); + return parsedInt; + } + + double parsedDouble; + Double.TryParse(number, out parsedDouble); + return parsedDouble; + } + + void EatWhitespace() + { + while (Char.IsWhiteSpace(PeekChar)) + { + json.Read(); + + if (json.Peek() == -1) + { + break; + } + } + } + + char PeekChar + { + get + { + return Convert.ToChar(json.Peek()); + } + } + + char NextChar + { + get + { + return Convert.ToChar(json.Read()); + } + } + + string NextWord + { + get + { + StringBuilder word = new StringBuilder(); + + while (!IsWordBreak(PeekChar)) + { + word.Append(NextChar); + + if (json.Peek() == -1) + { + break; + } + } + + return word.ToString(); + } + } + + TOKEN NextToken + { + get + { + EatWhitespace(); + + if (json.Peek() == -1) + { + return TOKEN.NONE; + } + + switch (PeekChar) + { + case '{': + return TOKEN.CURLY_OPEN; + case '}': + json.Read(); + return TOKEN.CURLY_CLOSE; + case '[': + return TOKEN.SQUARED_OPEN; + case ']': + json.Read(); + return TOKEN.SQUARED_CLOSE; + case ',': + json.Read(); + return TOKEN.COMMA; + case '"': + return TOKEN.STRING; + case ':': + return TOKEN.COLON; + case '0': + case '1': + case '2': + case '3': + case '4': + case '5': + case '6': + case '7': + case '8': + case '9': + case '-': + return TOKEN.NUMBER; + } + + switch (NextWord) + { + case "false": + return TOKEN.FALSE; + case "true": + return TOKEN.TRUE; + case "null": + return TOKEN.NULL; + } + + return TOKEN.NONE; + } + } + } + + /// + /// Converts a IDictionary / IList object or a simple type (string, int, etc.) into a JSON string + /// + /// A Dictionary<string, object> / List<object> + /// A JSON encoded string, or null if object 'json' is not serializable + public static string Serialize(object obj) + { + return Serializer.Serialize(obj); + } + + sealed class Serializer + { + StringBuilder builder; + + Serializer() + { + builder = new StringBuilder(); + } + + public static string Serialize(object obj) + { + var instance = new Serializer(); + + instance.SerializeValue(obj); + + return instance.builder.ToString(); + } + + void SerializeValue(object value) + { + IList asList; + IDictionary asDict; + string asStr; + + if (value == null) + { + builder.Append("null"); + } + else if ((asStr = value as string) != null) + { + SerializeString(asStr); + } + else if (value is bool) + { + builder.Append((bool)value ? "true" : "false"); + } + else if ((asList = value as IList) != null) + { + SerializeArray(asList); + } + else if ((asDict = value as IDictionary) != null) + { + SerializeObject(asDict); + } + else if (value is char) + { + SerializeString(new string((char)value, 1)); + } + else + { + SerializeOther(value); + } + } + + void SerializeObject(IDictionary obj) + { + bool first = true; + + builder.Append('{'); + + foreach (object e in obj.Keys) + { + if (!first) + { + builder.Append(','); + } + + SerializeString(e.ToString()); + builder.Append(':'); + + SerializeValue(obj[e]); + + first = false; + } + + builder.Append('}'); + } + + void SerializeArray(IList anArray) + { + builder.Append('['); + + bool first = true; + + foreach (object obj in anArray) + { + if (!first) + { + builder.Append(','); + } + + SerializeValue(obj); + + first = false; + } + + builder.Append(']'); + } + + void SerializeString(string str) + { + builder.Append('\"'); + + char[] charArray = str.ToCharArray(); + foreach (var c in charArray) + { + switch (c) + { + case '"': + builder.Append("\\\""); + break; + case '\\': + builder.Append("\\\\"); + break; + case '\b': + builder.Append("\\b"); + break; + case '\f': + builder.Append("\\f"); + break; + case '\n': + builder.Append("\\n"); + break; + case '\r': + builder.Append("\\r"); + break; + case '\t': + builder.Append("\\t"); + break; + default: + int codepoint = Convert.ToInt32(c); + if ((codepoint >= 32) && (codepoint <= 126)) + { + builder.Append(c); + } + else + { + builder.Append("\\u"); + builder.Append(codepoint.ToString("x4")); + } + break; + } + } + + builder.Append('\"'); + } + + void SerializeOther(object value) + { + // NOTE: decimals lose precision during serialization. + // They always have, I'm just letting you know. + // Previously floats and doubles lost precision too. + if (value is float) + { + builder.Append(((float)value).ToString("R")); + } + else if (value is int + || value is uint + || value is long + || value is sbyte + || value is byte + || value is short + || value is ushort + || value is ulong) + { + builder.Append(value); + } + else if (value is double + || value is decimal) + { + builder.Append(Convert.ToDouble(value).ToString("R")); + } + else + { + SerializeString(value.ToString()); + } + } + } + } +} \ No newline at end of file diff --git a/Assets/SensorsAnalytics/Utils/MiniJSON.cs.meta b/Assets/SensorsAnalytics/Utils/MiniJSON.cs.meta new file mode 100644 index 0000000..677a508 --- /dev/null +++ b/Assets/SensorsAnalytics/Utils/MiniJSON.cs.meta @@ -0,0 +1,12 @@ +fileFormatVersion: 2 +guid: 1049af3ed8fc4b547a943baae7836150 +timeCreated: 1598326834 +licenseType: Free +MonoImporter: + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/SensorsAnalytics/Utils/SALog.cs b/Assets/SensorsAnalytics/Utils/SALog.cs new file mode 100644 index 0000000..48d735d --- /dev/null +++ b/Assets/SensorsAnalytics/Utils/SALog.cs @@ -0,0 +1,54 @@ +/* + * Created by zhangwei on 2020/8/6. + * Copyright 2015-2020 Sensors Data Inc. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +using System; + +namespace SensorDataAnalytics.Utils +{ + /// + /// SensorsData Log Class + /// + public class SALog + { + private static bool isLogEnable = false; + public static void IsLogEnalbe(bool isEnable) + { + isLogEnable = isEnable; + } + + public static void Debug(string logMessage) + { + if (isLogEnable) UnityEngine.Debug.Log(logMessage); + } + + public static void Warn(string logMessage) + { + if (isLogEnable) UnityEngine.Debug.LogWarning(logMessage); + } + + public static void Error(string logMessage) + { + if (isLogEnable) UnityEngine.Debug.LogError(logMessage); + } + + public static void Exception(Exception exception) + { + if (isLogEnable) UnityEngine.Debug.LogException(exception); + } + + } + +} diff --git a/Assets/SensorsAnalytics/Utils/SALog.cs.meta b/Assets/SensorsAnalytics/Utils/SALog.cs.meta new file mode 100644 index 0000000..e2e61af --- /dev/null +++ b/Assets/SensorsAnalytics/Utils/SALog.cs.meta @@ -0,0 +1,12 @@ +fileFormatVersion: 2 +guid: 6fc59f8dfca81cf418855b61e3ac9932 +timeCreated: 1598326835 +licenseType: Free +MonoImporter: + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/SensorsAnalytics/Utils/SAUtils.cs b/Assets/SensorsAnalytics/Utils/SAUtils.cs new file mode 100644 index 0000000..f3b8f8f --- /dev/null +++ b/Assets/SensorsAnalytics/Utils/SAUtils.cs @@ -0,0 +1,178 @@ +/* + * Created by zhangwei on 2020/8/6. + * Copyright 2015-2020 Sensors Data Inc. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +using System; +using System.Collections.Generic; +using System.Text; +using System.Text.RegularExpressions; +using UnityEngine; + +namespace SensorDataAnalytics.Utils +{ + public class SAUtils + { + private static readonly Regex KEY_PATTERN = new Regex(@"^((?!^distinct_id$|^original_id$|^time$|^properties$|^id$|^first_id$|^second_id$|^users$|^events$|^event$|^user_id$|^date$|^datetime$)[a-zA-Z_$][a-zA-Z\\d_$]{0,99})$"); + + /// + /// 将字符串转换成 Java JSONObject 对象 + /// + /// json 字符串 + /// AndroidJavaObject,如果不能成功转换则会返回 null + public static AndroidJavaObject Parse2JavaJSONObject(string jsonStr) + { + if (jsonStr == null || "null".Equals(jsonStr)) + { + return null; + } + try + { + return new AndroidJavaObject("org.json.JSONObject", jsonStr); + } + catch (Exception e) + { + SALog.Error("Can not parse " + jsonStr + "to JSONObject: " + e); + } + return null; + } + + /// + /// 将字典转换成 Json 字符串 + /// + /// 字典 + /// json 字符串,如果字典不能转换成字符串那么会返回 null。 + public static string Parse2JsonStr(Dictionary dictionary) + { + if (dictionary == null) + { + return null; + } + try + { + return MiniJSON.Json.Serialize(dictionary); + } + catch (Exception e) + { + SALog.Error(e.Message); + } + return null; + } + + /// + /// 将 json 字符串转换成字典 + /// + /// + /// 字典对象,如果不能转换则返回 null。 + public static Dictionary Parse2Dictionary(string jsonStr) + { + if (jsonStr == null) + { + return null; + } + try + { + return MiniJSON.Json.Deserialize(jsonStr) as Dictionary; + } + catch (Exception ex) + { + SALog.Error(ex.Message); + } + return null; + } + + /// + /// 判断事件的 key 值是否合规 + /// + /// event key + /// 合规就返回 true,否则返回 false + public static bool AssertKey(string key) + { + if (key == null || key.Length == 0) + { + SALog.Error("The key is empty."); + return false; + } + if (key.Length > 255) + { + SALog.Error("The key [" + key + "] is too long, max length is 255."); + return false; + } + + if (KEY_PATTERN.IsMatch(key)) + { + return true; + } + else + { + SALog.Error("The key [" + key + "] is invalid."); + return false; + } + } + + /// + /// 判断字典的 value 是否为支持的类型,当前支持 string,number,DateTime + /// + /// event properties dictionary + /// 合规就返回 true,否则返回 false + public static bool AssertValue(Dictionary dic) + { + if (dic == null) + { + return true; + } + foreach (var value in dic.Values) + { + if (!(value is string || IsNumeric(value) || value is DateTime))//TODO 此处校验不全 + { + SALog.Error("The property values must be an instance of string, number or DateTime"); + return false; + } + } + return true; + } + + public static string ToDebugString(Dictionary dictionary) + { + if (dictionary == null) + { + return null; + } + StringBuilder sb = new StringBuilder(); + sb.Append("["); + foreach (var item in dictionary) + { + sb.Append("").Append(item.Key).Append(",").Append(item.Value).Append("),"); + } + sb.Append("]"); + return sb.ToString(); + } + + + public static bool IsNumeric(object obj) + { + return obj is sbyte + || obj is byte + || obj is short + || obj is ushort + || obj is int + || obj is uint + || obj is long + || obj is ulong + || obj is double + || obj is decimal + || obj is float; + } + } +} \ No newline at end of file diff --git a/Assets/SensorsAnalytics/Utils/SAUtils.cs.meta b/Assets/SensorsAnalytics/Utils/SAUtils.cs.meta new file mode 100644 index 0000000..ae4bfd4 --- /dev/null +++ b/Assets/SensorsAnalytics/Utils/SAUtils.cs.meta @@ -0,0 +1,12 @@ +fileFormatVersion: 2 +guid: 6fe68120eca757a48b372f820f5a3cf6 +timeCreated: 1598326835 +licenseType: Free +MonoImporter: + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/SensorsAnalytics/Wrapper.meta b/Assets/SensorsAnalytics/Wrapper.meta new file mode 100644 index 0000000..db2acbc --- /dev/null +++ b/Assets/SensorsAnalytics/Wrapper.meta @@ -0,0 +1,9 @@ +fileFormatVersion: 2 +guid: 54514c88ad423a9478f4d5a5fdf2ade1 +folderAsset: yes +timeCreated: 1598326833 +licenseType: Free +DefaultImporter: + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/SensorsAnalytics/Wrapper/SAAndroidWrapper.cs b/Assets/SensorsAnalytics/Wrapper/SAAndroidWrapper.cs new file mode 100644 index 0000000..fa57852 --- /dev/null +++ b/Assets/SensorsAnalytics/Wrapper/SAAndroidWrapper.cs @@ -0,0 +1,247 @@ +/* + * Created by zhangwei on 2020/8/6. + * Copyright 2015-2020 Sensors Data Inc. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +using System.Collections.Generic; +using SensorDataAnalytics.Utils; +using UnityEngine; + +namespace SensorsAnalytics.Wrapper +{ + public partial class SensorsAnalyticsWrapper + { +#if UNITY_ANDROID + + private static readonly AndroidJavaClass sensorsDataAPIClass = new AndroidJavaClass("com.sensorsdata.analytics.android.sdk.SensorsDataAPI"); + private AndroidJavaObject apiInstance; + + private void _init() + { + AndroidJavaObject currentContext = new AndroidJavaClass("com.unity3d.player.UnityPlayer").GetStatic("currentActivity"); + AndroidJavaObject configObj = new AndroidJavaObject("com.sensorsdata.analytics.android.sdk.SAConfigOptions", serverUrl); + configObj.Call("setAutoTrackEventType", autoTrackType); + if (enableLog) + { + configObj.Call("enableLog", true); + } + configObj.Call("setNetworkTypePolicy", networkType); + //configObj.Call("appendColdStart", currentContext); + sensorsDataAPIClass.CallStatic("startWithConfigOptions", currentContext, configObj); + apiInstance = sensorsDataAPIClass.CallStatic("sharedInstance"); + } + + private void _flush() + { + apiInstance.Call("flush"); + } + + private void _identify(string distinctId) + { + apiInstance.Call("identify", distinctId); + } + + private void _resetAnonymousId() + { + apiInstance.Call("resetAnonymousId"); + } + + private void _login(string loginId) + { + apiInstance.Call("login", loginId); + } + + private void _logout() + { + apiInstance.Call("logout"); + } + + private void _track(string eventName, Dictionary dic = null) + { + + AndroidJavaObject jsonObject = null; + if (dic != null) + { + string jsonStr = SAUtils.Parse2JsonStr(dic); + jsonObject = SAUtils.Parse2JavaJSONObject(jsonStr); + } + apiInstance.Call("track", eventName, jsonObject); + } + + private void _profileSet(Dictionary dic) + { + if (dic == null) + { + return; + } + string jsonStr = SAUtils.Parse2JsonStr(dic); + AndroidJavaObject jsonObject = SAUtils.Parse2JavaJSONObject(jsonStr); + apiInstance.Call("profileSet", jsonObject); + } + + private void _profileSetOnce(Dictionary dic) + { + if (dic == null) + { + return; + } + string jsonStr = SAUtils.Parse2JsonStr(dic); + AndroidJavaObject jsonObject = SAUtils.Parse2JavaJSONObject(jsonStr); + apiInstance.Call("profileSetOnce", jsonObject); + } + + #region track timer + private string _trackTimerStart(string eventName) + { + + return apiInstance.Call("trackTimerStart", eventName); + } + + private void _trackTimerEnd(string eventName, Dictionary properties) + { + AndroidJavaObject jsonObject = null; + if (properties != null) + { + string jsonStr = SAUtils.Parse2JsonStr(properties); + jsonObject = SAUtils.Parse2JavaJSONObject(jsonStr); + } + apiInstance.Call("trackTimerEnd", eventName, jsonObject); + } + + private void _trackTimerPause(string eventName) + { + apiInstance.Call("trackTimerPause", eventName); + } + + private void _trackTimerResume(string eventName) + { + apiInstance.Call("trackTimerResume", eventName); + } + + private void _clearTrackTimer() + { + apiInstance.Call("clearTrackTimer"); + } + #endregion + + #region super property + private void _registerSuperProperties(Dictionary properties) + { + AndroidJavaObject jsonObject = null; + if (properties != null) + { + string jsonStr = SAUtils.Parse2JsonStr(properties); + jsonObject = SAUtils.Parse2JavaJSONObject(jsonStr); + } + apiInstance.Call("registerSuperProperties", jsonObject); + } + + private void _unregisterSuperProperty(string superPropertyName) + { + apiInstance.Call("unregisterSuperProperty", superPropertyName); + } + + private Dictionary _getSuperProperties() + { + AndroidJavaObject jsonObj = apiInstance.Call("getSuperProperties"); + string jsonStr = jsonObj.Call("toString"); + if (jsonStr == null || jsonStr.Length == 0) + { + return null; + } + return SAUtils.Parse2Dictionary(jsonStr); + } + + private void _clearSuperProperties() + { + apiInstance.Call("clearSuperProperties"); + } + #endregion + + //二期内容 + + private void _trackInstallation(Dictionary properties = null, bool disableCallback = false) + { + AndroidJavaObject jsonObject = null; + if (properties != null) + { + string jsonStr = SAUtils.Parse2JsonStr(properties); + jsonObject = SAUtils.Parse2JavaJSONObject(jsonStr); + } + apiInstance.Call("trackAppInstall", jsonObject, disableCallback); + } + + private void _removeTimer(string eventName) + { + apiInstance.Call("removeTimer", eventName); + } + + private void _setAndroidMaxCacheSize(long maxCacheSize) + { + apiInstance.Call("setMaxCacheSize", maxCacheSize); + } + + private void _deleteAll() + { + apiInstance.Call("deleteAll"); + } + + private void _setFlushBulkSize(int flushBulkSize) + { + apiInstance.Call("setFlushBulkSize", flushBulkSize); + } + + private void _setFlushInterval(int flushInteval) + { + apiInstance.Call("setFlushInterval", flushInteval); + } + + private void _setFlushNetworkPolicy(int types) + { + apiInstance.Call("setFlushNetworkPolicy", types); + } + + /* private class AndroidSuperDynamicCallback : AndroidJavaProxy + { + private IDynamicSuperProperties superProperties; + public AndroidSuperDynamicCallback(IDynamicSuperProperties superProperties) : base("com.sensorsdata.analytics.android.sdk.SensorsDataDynamicSuperProperties") + { + this.superProperties = superProperties; + } + + AndroidJavaObject getDynamicSuperProperties() + { + if (this.superProperties != null) + { + Dictionary dic = superProperties.getProperties(); + string jsonStr = SAUtils.Parse2JsonStr(dic); + AndroidJavaObject jsonObject = SAUtils.Parse2JavaJSONObject(jsonStr); + return jsonObject; + } + return null; + } + } + + private void _registerDynamciSuperProperties(IDynamicSuperProperties superProperties) + { + AndroidSuperDynamicCallback callback = new AndroidSuperDynamicCallback(superProperties); + apiInstance.Call("registerDynamicSuperProperties", callback); + }*/ + + +#endif + + + } +} diff --git a/Assets/SensorsAnalytics/Wrapper/SAAndroidWrapper.cs.meta b/Assets/SensorsAnalytics/Wrapper/SAAndroidWrapper.cs.meta new file mode 100644 index 0000000..1e50e2a --- /dev/null +++ b/Assets/SensorsAnalytics/Wrapper/SAAndroidWrapper.cs.meta @@ -0,0 +1,12 @@ +fileFormatVersion: 2 +guid: 4af9924d67b5c1145a801142bc63f1d3 +timeCreated: 1598326834 +licenseType: Free +MonoImporter: + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/SensorsAnalytics/Wrapper/SAEditor.cs b/Assets/SensorsAnalytics/Wrapper/SAEditor.cs new file mode 100644 index 0000000..a209913 --- /dev/null +++ b/Assets/SensorsAnalytics/Wrapper/SAEditor.cs @@ -0,0 +1,167 @@ +/* + * Created by zhangwei on 2020/8/6. + * Copyright 2015-2020 Sensors Data Inc. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +using System.Collections.Generic; +using SensorDataAnalytics.Utils; +using UnityEngine; + +namespace SensorsAnalytics.Wrapper +{ + public partial class SensorsAnalyticsWrapper + { + +#if (UNITY_EDITOR && !(UNITY_ANDROID || UNITY_IOS)) + private void _init() + { + SALog.Debug("Editor Log: calling init."); + } + + private void _flush() + { + SALog.Debug("Editor Log: calling flush."); + } + + private void _identify(string distinctId) + { + SALog.Debug("Editor Log: calling identity: distinctId=" + distinctId + "."); + } + + private void _resetAnonymousId() + { + SALog.Debug("Editor Log: calling resetAnonymousId."); + } + + private void _login(string loginId) + { + SALog.Debug("Editor Log: calling login: loginId=" + loginId + "."); + } + + private void _logout() + { + SALog.Debug("Editor Log: calling logout."); + } + + private void _track(string eventName, Dictionary properties = null) + { + SALog.Debug("Editor Log: calling track: eventName=" + eventName + ", properties=" + SAUtils.ToDebugString(properties)); + } + + private void _profileSet(Dictionary properties) + { + SALog.Debug("Editor Log: calling profileSet: properties=" + SAUtils.ToDebugString(properties)); + } + + private void _profileSetOnce(Dictionary properties) + { + SALog.Debug("Editor Log: calling profileSetOnce: properties=" + SAUtils.ToDebugString(properties)); + } + + private string _trackTimerStart(string eventName) + { + SALog.Debug("Editor Log: calling trackTimerStart: eventName=" + eventName); + return ""; + } + + private void _trackTimerEnd(string eventName, Dictionary properties) + { + SALog.Debug("Editor Log: calling trackTimerEnd: eventName=" + eventName + ", properties=" + SAUtils.ToDebugString(properties)); + } + + private void _trackTimerPause(string eventName) + { + SALog.Debug("Editor Log: calling trackTimerPause: eventName=" + eventName); + } + + private void _trackTimerResume(string eventName) + { + SALog.Debug("Editor Log: calling trackTimerResume: eventName=" + eventName); + } + + private void _clearTrackTimer() + { + SALog.Debug("Editor Log: calling clearTrackTimer."); + } + + private void _registerSuperProperties(Dictionary properties) + { + SALog.Debug("Editor Log: calling registerSuperProperties: properties=" + SAUtils.ToDebugString(properties)); + } + + private void _unregisterSuperProperty(string superPropertyName) + { + SALog.Debug("Editor Log: calling unregisterSuperProperty: superPropertyName=" + superPropertyName); + } + + private Dictionary _getSuperProperties() + { + SALog.Debug("Editor Log: calling getSuperProperties."); + return new Dictionary(); + } + + private void _clearSuperProperties() + { + SALog.Debug("Editor Log: calling clearSuperProperties."); + } + + //二期内容 + private void _trackInstallation(Dictionary properties = null, bool disableCallback = false) + { + SALog.Debug("Editor Log: calling TrackInstallation: properties=" + SAUtils.ToDebugString(properties)+", " + disableCallback); + } + + private void _removeTimer(string eventName) + { + SALog.Debug("Editor Log: calling RemoveTimer: eventName=" + eventName); + } + + private void _setAndroidMaxCacheSize(long maxCacheSize) + { + SALog.Debug("Editor Log: calling SetAndroidMaxCacheSize: maxCacheSize=" + maxCacheSize); + } + + private void _setiOSMaxCacheSize(long maxCount) + { + SALog.Debug("Editor Log: calling SetiOSMaxCacheSize: maxCacheSize=" + maxCount); + } + + private void _deleteAll() + { + SALog.Debug("Editor Log: calling DeleteAll"); + } + + private void _setFlushBulkSize(int flushBulkSize) + { + SALog.Debug("Editor Log: calling SetFlushBulkSize: flushBulkSize=" + flushBulkSize); + } + + private void _setFlushInterval(int flushInteval) + { + SALog.Debug("Editor Log: calling SetFlushInterval: flushInteval=" + flushInteval); + } + + private void _setFlushNetworkPolicy(int types) + { + SALog.Debug("Editor Log: calling SetFlushNetworkPolicy: types=" + types); + } + + /*public void _registerDynamciSuperProperties(IDynamicSuperProperties superProperties) + { + SALog.Debug("Editor Log: calling RegisterDynamciSuperProperties: superProperties=" + superProperties); + }*/ + +#endif + } +} \ No newline at end of file diff --git a/Assets/SensorsAnalytics/Wrapper/SAEditor.cs.meta b/Assets/SensorsAnalytics/Wrapper/SAEditor.cs.meta new file mode 100644 index 0000000..5cf317f --- /dev/null +++ b/Assets/SensorsAnalytics/Wrapper/SAEditor.cs.meta @@ -0,0 +1,12 @@ +fileFormatVersion: 2 +guid: 442c6a6ebd12c5b4bbd4d0b3dd2b4439 +timeCreated: 1598326834 +licenseType: Free +MonoImporter: + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/SensorsAnalytics/Wrapper/SAIOSWrapper.cs b/Assets/SensorsAnalytics/Wrapper/SAIOSWrapper.cs new file mode 100644 index 0000000..cbedcff --- /dev/null +++ b/Assets/SensorsAnalytics/Wrapper/SAIOSWrapper.cs @@ -0,0 +1,216 @@ +/* + * Created by zhangwei on 2020/8/12. + * Copyright 2015-2020 Sensors Data Inc. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +using System.Collections.Generic; +using SensorDataAnalytics.Utils; +using UnityEngine; +using System.Runtime.InteropServices; + +namespace SensorsAnalytics.Wrapper +{ + public partial class SensorsAnalyticsWrapper + { +#if UNITY_IOS + [DllImport("__Internal")] + private static extern void start(string server_url, bool enableLog, int eventType, int networkType); + [DllImport("__Internal")] + private static extern void track(string event_name, string propertiesJson); + [DllImport("__Internal")] + private static extern void login(string loginId); + [DllImport("__Internal")] + private static extern void logout(); + [DllImport("__Internal")] + private static extern string track_timer_start(string eventName); + [DllImport("__Internal")] + private static extern void track_timer_pause(string eventName); + [DllImport("__Internal")] + private static extern void track_timer_resume(string eventName); + [DllImport("__Internal")] + private static extern void track_timer_end(string eventName, string propertiesJson); + [DllImport("__Internal")] + private static extern void clear_track_timer(); + + [DllImport("__Internal")] + private static extern void register_super_properties(string propertiesJson); + [DllImport("__Internal")] + private static extern void unregister_super_property(string superPropertyName); + [DllImport("__Internal")] + private static extern void clear_super_properties(); + [DllImport("__Internal")] + private static extern void flush(); + [DllImport("__Internal")] + private static extern void profile_set(string propertiesJson); + [DllImport("__Internal")] + private static extern void profile_set_once(string propertiesJson); + [DllImport("__Internal")] + private static extern string get_super_properties(); + [DllImport("__Internal")] + private static extern void identify(string anonymousId); + + [DllImport("__Internal")] + private static extern void delete_all(); + [DllImport("__Internal")] + private static extern void set_flush_network_policy(int types); + [DllImport("__Internal")] + private static extern void remove_timer(string eventname); + [DllImport("__Internal")] + private static extern void set_ios_max_cache_size(int count); + [DllImport("__Internal")] + private static extern void set_flush_bulk_size(int flushBulkSize); + [DllImport("__Internal")] + private static extern void set_flush_interval(int flushInteval); + [DllImport("__Internal")] + private static extern void track_app_install(string properties, bool disableCallback); + + private void _init() + { + start(serverUrl, enableLog, autoTrackType, networkType); + } + + private void _trackInstallation(Dictionary properties, bool disableCallback) + { + track_app_install(SAUtils.Parse2JsonStr(properties), disableCallback); + } + + private void _removeTimer(string eventName) + { + remove_timer(eventName); + } + + private void _setiOSMaxCacheSize(int count) + { + set_ios_max_cache_size(count); + } + + private void _deleteAll() + { + delete_all(); + } + + private void _setFlushBulkSize(int flushBulkSize) + { + set_flush_bulk_size(flushBulkSize); + } + + private void _setFlushInterval(int flushInteval) + { + set_flush_interval(flushInteval); + } + + private void _setFlushNetworkPolicy(int types) + { + set_flush_network_policy(types); + } + + private void _track(string eventName, Dictionary dic = null) + { + track(eventName, SAUtils.Parse2JsonStr(dic)); + } + + private void _flush() + { + flush(); + } + + private void _identify(string distinctId) + { + identify(distinctId); + } + + private void _resetAnonymousId() + { + } + + private void _login(string loginId) + { + login(loginId); + } + + private void _logout() + { + logout(); + } + + private void _profileSet(Dictionary dic) + { + profile_set(SAUtils.Parse2JsonStr(dic)); + } + + private void _profileSetOnce(Dictionary dic) + { + profile_set_once(SAUtils.Parse2JsonStr(dic)); + } + + #region track timer + private string _trackTimerStart(string eventName) + { + return track_timer_start(eventName); + } + + private void _trackTimerEnd(string eventName, Dictionary properties) + { + track_timer_end(eventName, SAUtils.Parse2JsonStr(properties)); + } + + private void _trackTimerPause(string eventName) + { + track_timer_pause(eventName); + } + + private void _trackTimerResume(string eventName) + { + track_timer_resume(eventName); + } + + private void _clearTrackTimer() + { + clear_track_timer(); + } + #endregion + + #region super property + private void _registerSuperProperties(Dictionary properties) + { + register_super_properties(SAUtils.Parse2JsonStr(properties)); + } + + private void _unregisterSuperProperty(string superPropertyName) + { + unregister_super_property(superPropertyName); + } + + private Dictionary _getSuperProperties() + { + string propertiesJson = get_super_properties(); + if (propertiesJson == null || propertiesJson.Length == 0) + { + return null; + } + return SAUtils.Parse2Dictionary(propertiesJson); + } + + private void _clearSuperProperties() + { + clear_super_properties(); + } + #endregion + +#endif + + + + } +} diff --git a/Assets/SensorsAnalytics/Wrapper/SAIOSWrapper.cs.meta b/Assets/SensorsAnalytics/Wrapper/SAIOSWrapper.cs.meta new file mode 100644 index 0000000..7f24429 --- /dev/null +++ b/Assets/SensorsAnalytics/Wrapper/SAIOSWrapper.cs.meta @@ -0,0 +1,12 @@ +fileFormatVersion: 2 +guid: b7e441be3f5c18e41948543257640bad +timeCreated: 1598326835 +licenseType: Free +MonoImporter: + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/SensorsAnalytics/Wrapper/SAWrapper.cs b/Assets/SensorsAnalytics/Wrapper/SAWrapper.cs new file mode 100644 index 0000000..8f50465 --- /dev/null +++ b/Assets/SensorsAnalytics/Wrapper/SAWrapper.cs @@ -0,0 +1,183 @@ +/* + * Created by zhangwei on 2020/8/6. + * Copyright 2015-2020 Sensors Data Inc. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +using System.Collections.Generic; +using SensorDataAnalytics.Utils; +using UnityEngine; +namespace SensorsAnalytics.Wrapper +{ + public interface IDynamicSuperProperties + { + Dictionary getProperties(); + } + + public partial class SensorsAnalyticsWrapper + { + private string serverUrl = ""; + private bool enableLog = false; + private int autoTrackType = 0; + private int networkType = 0; + + public SensorsAnalyticsWrapper(string serverUrl, bool enableLog, int autoTrackType, int networkType) + { + this.serverUrl = serverUrl; + this.enableLog = enableLog; + this.autoTrackType = 0; + this.networkType = networkType; + SALog.IsLogEnalbe(enableLog); + SALog.Debug("Unity Config=======init serverUrl:" + serverUrl + ", enableLog:" + enableLog + + ", networkType:" + networkType); + _init(); + } + + + public void Flush() + { + _flush(); + } + + public void Identify(string distinctId) + { + _identify(distinctId); + } + + public void ResetAnonymousId() + { + _resetAnonymousId(); + } + + public void Login(string loginId) + { + _login(loginId); + } + + public void Logout() + { + _logout(); + } + + public void Track(string eventName, Dictionary properties = null) + { + _track(eventName, properties); + } + + public void ProfileSet(Dictionary properties) + { + _profileSet(properties); + } + + public void ProfileSetOnce(Dictionary properties) + { + _profileSetOnce(properties); + } + + public string TrackTimerStart(string eventName) + { + return _trackTimerStart(eventName); + } + + public void TrackTimerEnd(string eventName, Dictionary properties) + { + _trackTimerEnd(eventName, properties); + } + + public void TrackTimerPause(string eventName) + { + _trackTimerPause(eventName); + } + + public void TrackTimerResume(string eventName) + { + _trackTimerResume(eventName); + } + + public void ClearTrackTimer() + { + _clearTrackTimer(); + } + + public void RegisterSuperProperties(Dictionary properties) + { + _registerSuperProperties(properties); + } + + public void UnregisterSuperProperty(string superPropertyName) + { + _unregisterSuperProperty(superPropertyName); + } + + public Dictionary GetSuperProperties() + { + return _getSuperProperties(); + } + + public void ClearSuperProperties() + { + _clearSuperProperties(); + } + + //二期内容 + public void TrackInstallation(Dictionary properties = null, bool disableCallback = false) + { + _trackInstallation(properties, disableCallback); + } + + public void RemoveTimer(string eventName) + { + _removeTimer(eventName); + } + + public void SetAndroidMaxCacheSize(long maxCacheSize) + { + #if UNITY_ANDROID + _setAndroidMaxCacheSize(maxCacheSize); + #endif + } + + public void SetiOSMaxCacheSize(int maxCount) + { + #if UNITY_IOS + _setiOSMaxCacheSize(maxCount); + #endif + } + + public void DeleteAll() + { + _deleteAll(); + } + + public void SetFlushBulkSize(int flushBulkSize) + { + _setFlushBulkSize(flushBulkSize); + } + + public void SetFlushInterval(int flushInteval) + { + _setFlushInterval(flushInteval); + } + + public void SetFlushNetworkPolicy(int types) + { + _setFlushNetworkPolicy(types); + } + + /* public void RegisterDynamciSuperProperties(IDynamicSuperProperties superProperties) + { + _registerDynamciSuperProperties(superProperties); + }*/ + + } +} \ No newline at end of file diff --git a/Assets/SensorsAnalytics/Wrapper/SAWrapper.cs.meta b/Assets/SensorsAnalytics/Wrapper/SAWrapper.cs.meta new file mode 100644 index 0000000..cd40e6b --- /dev/null +++ b/Assets/SensorsAnalytics/Wrapper/SAWrapper.cs.meta @@ -0,0 +1,12 @@ +fileFormatVersion: 2 +guid: 3f0172878c1c0ed46a87fbf8ec174ce8 +timeCreated: 1598326834 +licenseType: Free +MonoImporter: + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/README.md b/README.md index 355c1c0..8b539aa 100644 --- a/README.md +++ b/README.md @@ -1,2 +1,51 @@ -# sa-sdk-unity -Unity SDK 是一款用于 Android、iOS 平台 Unity App 埋点的 SDK +![logo](https://opensource.sensorsdata.cn/wp-content/uploads/logo.png) + +## 神策简介 + +[**神策数据**](https://www.sensorsdata.cn/) +(Sensors Data),隶属于神策网络科技(北京)有限公司,是一家专业的大数据分析服务公司,大数据分析行业开拓者,为客户提供深度用户行为分析平台、以及专业的咨询服务和行业解决方案,致力于帮助客户实现数据驱动。神策数据立足大数据及用户行为分析的技术与实践前沿,业务现已覆盖以互联网、金融、零售快消、高科技、制造等为代表的十多个主要行业、并可支持企业多个职能部门。公司总部在北京,并在上海、深圳、合肥、武汉等地拥有本地化的服务团队,覆盖东区及南区市场;公司拥有专业的服务团队,为客户提供一对一的客户服务。公司在大数据领域积累的核心关键技术,包括在海量数据采集、存储、清洗、分析挖掘、可视化、智能应用、安全与隐私保护等领域。 [**More**](https://www.sensorsdata.cn/about/aboutus.html) + + +## SDK 简介 + +Unity SDK 是一款用于 Android、iOS 平台 Unity App 埋点的 SDK。 + +## 集成文档 + +请参考神策官网 [集成文档]( https://manual.sensorsdata.cn/sa/latest/tech_sdk_client_unity-17566432.html)。 + +## 讨论 + +| 扫码加入神策数据开源社区 QQ 群
群号:785122381 | 扫码加入神策数据开源社区微信群 | +| ------ | ------ | +|![ QQ 讨论群](https://opensource.sensorsdata.cn/wp-content/uploads/ContentCommonPic_1.png) | ![ 微信讨论群 ](https://opensource.sensorsdata.cn/wp-content/uploads/ContentCommonPic_2.png) | + +## 公众号 + +| 扫码关注
神策数据开源社区 | 扫码关注
神策数据开源社区服务号 | +| ------ | ------ | +|![ 微信订阅号 ](https://opensource.sensorsdata.cn/wp-content/uploads/ContentCommonPic_3.png) | ![ 微信服务号 ](https://opensource.sensorsdata.cn/wp-content/uploads/ContentCommonPic_4.png) | + + +## 新书推荐 + +| 《数据驱动:从方法到实践》 | 《Android 全埋点解决方案》 | 《iOS 全埋点解决方案》 +| ------ | ------ | ------ | +| [![《数据驱动:从方法到实践》](https://opensource.sensorsdata.cn/wp-content/uploads/data_driven_book_1.jpg)](https://item.jd.com/12322322.html) | [![《Android 全埋点解决方案》](https://opensource.sensorsdata.cn/wp-content/uploads/Android-全埋点thumbnail_1.png)](https://item.jd.com/12574672.html) | [![《iOS 全埋点解决方案》](https://opensource.sensorsdata.cn/wp-content/uploads/iOS-全埋点thumbnail_1.png)](https://item.jd.com/12867068.html) + + +## License + +Copyright 2015-2020 Sensors Data Inc. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + +http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License.