# iOS 快速使用

> ### *在使用前，请先阅读*[*数据模型*](https://54td.gitbook.io/shence/technical_guide/data_import/data_model)*的介绍。*
>
> ### *更多参数接口信息介绍可前往* [*iOS SDK 使用说明*](https://54td.gitbook.io/shence/technical_guide/detailed_guide/ios_sdk)*。*

[1、事件设计表（示例）](https://github.com/hxxiaolong/wendang/tree/32bdd85c96b118df803b5923753b4f1908489069/fast_access_ios.html#1-%E4%BA%8B%E4%BB%B6%E8%AE%BE%E8%AE%A1%E8%A1%A8%EF%BC%88%E7%A4%BA%E4%BE%8B%EF%BC%89)

[2、集成 SDK](https://github.com/hxxiaolong/wendang/tree/32bdd85c96b118df803b5923753b4f1908489069/fast_access_ios.html#2-%E9%9B%86%E6%88%90-sdk)

[3、埋点示例](https://github.com/hxxiaolong/wendang/tree/32bdd85c96b118df803b5923753b4f1908489069/fast_access_ios.html#3-%E5%9F%8B%E7%82%B9%E7%A4%BA%E4%BE%8B)

## 1. 事件设计表（示例）

事件设计表一般是由神策分析师和你们对接的同事，针对具体业务需求一起梳理的需要做埋点的 Excel 表。 神策分析系统宏观上有两张表，事件表（events）用于记录用户的行为事件，比如 App 启动，App 浏览页面；用户表（users）用于保存用户相关的一些信息，比如个人资料。

| 事件和用户属性设计                     |                        |             |
| ----------------------------- | ---------------------- | ----------- |
| 事件表（events）                   | 用户表（users）             |             |
| 事件名（带 $ 符号的为神策预置事件，开启全埋点自动采集） | 事件属性                   | 用户属性        |
| App 启动事件( $AppStart )         | 预置事件属性                 | 邮箱( email ) |
| App 退出事件( $AppEnd )           | 预置事件属性                 |             |
| App 浏览页面事件( $AppViewScreen )  | 预置事件属性                 |             |
| App 元素点击事件( $AppClick )       | 预置事件属性                 |             |
| 搜索事件( search )                | 搜索关键词( searchKeyWord ) |             |

## 2. 集成 SDK

神策 SDK 提供了 [全埋点](https://www.sensorsdata.cn/manual/android_sdk.html#31-auto-track) 的功能，可以帮您采集四类事件：

| 事件显示名      | 事件名            | 事件描述                          |
| ---------- | -------------- | ----------------------------- |
| App 启动事件   | $AppStart      | App 启动时触发                     |
| App 退出事件   | $AppEnd        | App 退到后台时触发                   |
| App 浏览页面事件 | $AppViewScreen | Controller viewViewAppear 时触发 |
| App 元素点击事件 | $AppClick      | 控件被点击时触发                      |

在程序的入口 AppDelegate.m 中引入 `SensorsAnalyticsSDK.h`，并在 `- application:didFinishLaunchingWithOptions:launchOptions` 中调用 `sharedInstanceWithConfig:` 初始化 SDK。

```objectivec
#import "SensorsAnalyticsSDK.h"

#ifdef DEBUG
#define SA_SERVER_URL @"<#【测试项目】数据接收地址#>"
#else
#define SA_SERVER_URL @"<#【正式项目】数据接收地址#>"
#endif

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {

    [self initSensorsAnalyticsWithLaunchOptions:launchOptions];
    return YES;
}

- (void)initSensorsAnalyticsWithLaunchOptions:(NSDictionary *)launchOptions {
    // 初始化 SDK
    SAConfigOptions *options = [[SAConfigOptions alloc] initWithServerURL:SA_SERVER_URL launchOptions:launchOptions];
    [SensorsAnalyticsSDK sharedInstanceWithConfig:options];

    // 设置公共属性
    [[SensorsAnalyticsSDK sharedInstance] registerSuperProperties:@{@"appName": @"HelloSensorsAnalytics"}];
    // 追踪激活事件，详见：https://sensorsdata.cn/manual/app_channel_tracking.html
    [[SensorsAnalyticsSDK sharedInstance] trackInstallation:@"AppInstall"];
    // 打开自动采集, 并指定追踪哪些 AutoTrack 事件
    [[SensorsAnalyticsSDK sharedInstance] enableAutoTrack:SensorsAnalyticsEventTypeAppStart|
     SensorsAnalyticsEventTypeAppEnd|
     SensorsAnalyticsEventTypeAppViewScreen|
     SensorsAnalyticsEventTypeAppClick];
    // 打通 App 与 H5，详见：https://sensorsdata.cn/manual/app_h5.html
    [[SensorsAnalyticsSDK sharedInstance] addWebViewUserAgentSensorsDataFlag];
}
```

**数据接收地址 server\_url 获取方式**

![](https://github.com/hxxiaolong/wendang/tree/32bdd85c96b118df803b5923753b4f1908489069/img/multi_project_data_api.png?t=1)

## 3. 埋点示例

### 3.1 追踪事件

初始化 SDK 之后，可以在相应业务逻辑处通过 track: 方法追踪用户行为事件，并为事件添加自定义属性（触发的事件会存储到神策分析系统的 events 表中）。

```objectivec
    // 记录搜索（search ）事件
    [[SensorsAnalyticsSDK sharedInstance] track:@"ViewProduct"
                                 withProperties:@{@"searchKeyWord" : @"神策数据"}];
```

### 3.2 设置用户属性

为了更准确地提供针对人群的分析服务，可以使用神策分析 SDK 的 set: 等方法设置用户属性，如年龄、性别等。用户可以在留存分析、分布分析等功能中，使用用户属性作为过滤条件，精确分析特定人群的指标。 （设置的用户属性会存储到神策分析系统的 users 表中）

```objectivec
// 设置用户的 email
[[SensorsAnalyticsSDK sharedInstance] set:@{@"email": @"xxx@xxx.xx"}];
```

### 3.3 匿名 ID 和登录 ID 关联

[如何准确的标识用户](https://54td.gitbook.io/shence/technical_guide/data_import/user_identify)

成功关联**设备 ID** 和**登录 ID** 之后，用户在该**设备 ID** 上或该**登录 ID** 下的行为就会贯通，被认为是一个**神策 ID** 发生的。在进行事件、漏斗、留存等用户相关分析时也会算作一个用户。

关联**设备 ID** 和**登录 ID** 的方法虽然实现了更准确的用户追踪，但是也会增加埋点接入的复杂度。所以一般来说，我们建议只有当同时满足以下条件时，才考虑进行 ID 关联：

1. 需要贯通一个用户在一个设备上注册前后的行为。
2. 需要贯通一个注册用户在不同设备上登录之后的行为

用户在登录前 ，SDK 会分配一个匿名 ID 来标识游客。当用户注册成功或登录成功时调用 login 方法，传入对应的登录 ID ；匿名 ID 会与对应的登录 ID 进行关联，关联成功之后视为同一个用户。 调用时机：注册成功、登录成功 、初始化 SDK（如果能获取到登录 ID）都需要调用 login 方法传入登录 ID。

**注意：**&#x767B;录 ID 是指可以唯一标识一个用户的 ID，通常是业务数据库里的主键或其它唯一标识

```objectivec
//注册成功、登录成功、初始化SDK后  调用 login 传入登录 ID
[[SensorsAnalyticsSDK sharedInstance] login:@"你们服务端分配给用户具体的登录 ID"];
```

注意: 如果服务端做了埋点，需在用户注册/登录的时候将匿名 ID 传给服务端做用户 ID 关联。 可以通过 `anonymousId` 方法可获取神策分析 iOS SDK 分配的 **匿名 ID**

```objectivec
  //在用户注册或登录时，获取当前用户的匿名 ID 传给服务端
  NSString *anonymousId = [[SensorsAnalyticsSDK sharedInstance] anonymousId];
```

### 3.4 调试查看埋点数据

[1.10.23](https://github.com/sensorsdata/sa-sdk-ios/releases/tag/v1.10.23)及以后的版本， SDK 调试模式默认为关闭状态，需在代码中配置 scheme 后，通过扫描神策分析「设置调试模式」的二维码开启调试模式； 开启调试模式只针对当前扫码打开的 App 有效，如果 App 被强杀，下次打开 App， SDK 的调试模式恢复为关闭状态.

#### 3.4.1 获取并配置 scheme

**获取 scheme**

使用 admin 账号，登录到神策分析相应的项目，点击右上角的账号，从「数据接入」页面获取 scheme 的值。

![](https://3928609189-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-Levm4x0IpHBx6dxiaCM%2F-LeydYULqjq7WfRLX0IT%2F-Leyde1DYx1bdq83guRj%2Fapp_debug_mode_data_0.jpg?generation=1557976759765611\&alt=media)

**配置 scheme**

点击项目 target 选择选项卡 Info，添加 URL Types，将第一步获取到的 scheme 配置到 URL Scheme 中。 ![](https://www.sensorsdata.cn/attachment/jpg/473w/07edbbd0a9eb16f2bf4a864ca8af1385cc062897.jpg)

#### 3.4.2 处理 URL

在 AppDelegate.m 中的 - (BOOL)application:(UIApplication *)app openURL:(NSURL* )url options:(NSDictionary \*)options 方法中 调用 handleSchemeUrl: 函数接收 URL

```objectivec
- (BOOL)application:(UIApplication *)app openURL:(NSURL *)url options:(NSDictionary<UIApplicationOpenURLOptionsKey,id> *)options {
    if ([[SensorsAnalyticsSDK sharedInstance] handleSchemeUrl:url]) {
        return YES;
    }
    return NO;
}
```

#### 3.4.3 用手机自带的浏览器扫码打开 App，选择调试模式

在神策分析 v1.13 及之后版本中点击「设置设备调试模式」打开二维码。

> 二维码位置：「神策分析」——「埋点」——「导入实时查看」——「Debug 数据」——「设置设备调试模式」

![](https://3928609189-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-Levm4x0IpHBx6dxiaCM%2F-LeydYULqjq7WfRLX0IT%2F-LeydkPX1F9TGPTBWIxE%2Fapp_debug_mode_data_1.jpg?generation=1557976791885576\&alt=media)

扫码打开 App 时，会弹出提示，选择想要切换的调试模式。

![](https://3928609189-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-Levm4x0IpHBx6dxiaCM%2F-LeydYULqjq7WfRLX0IT%2F-LeydkP_4geTPmV2ca3N%2Fapp_debug_mode_data_2.jpg?generation=1557976791343956\&alt=media)

**开启调试模式(导入数据)：** 打开调试模式，校验数据，并将数据导入到神策分析中。

**开启调试模式(不导入数据)：** 打开调试模式，仅校验数据，但不进行数据导入，数据最终不会进入到数据库。

#### 3.4.4 导入实时查看

开启调试模式后，可以在神策分析 「埋点」→ 「导入实时查看」 点击「开始刷新」查看当前设备的调试数据上报情况

![](https://3928609189-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-Levm4x0IpHBx6dxiaCM%2F-LeydYULqjq7WfRLX0IT%2F-LeydkPbCDHwAFkMYWNg%2Fapp_debug_mode_data_3.jpg?generation=1557976790956334\&alt=media)

#### 3.4.5 查看本地日志

开启调试模式后，也可以通过 Xcode 控制台查看输出的日志。过滤日志关键字为：`SALog`，一个事件有两条日志。 日志中如果出现 `【track event】` 字段， 说明此事件已触发，如果出现 `【valid message】` 字段，说明数据已同步到服务端。

![](https://3928609189-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-Levm4x0IpHBx6dxiaCM%2F-LeydYULqjq7WfRLX0IT%2F-LeydmWsJ_W7Q2H0d3-h%2Fapp_debug_mode_data_xcode_log.jpg?generation=1557976789759660\&alt=media)
