> For the complete documentation index, see [llms.txt](https://dtsupport.gitbook.io/mta-docs/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://dtsupport.gitbook.io/mta-docs/app/app_advance_access/app_advance_access_time_statistics.md).

# 时长统计

## 时长统计

MTA提供页面时长及APP使用时长统计：

**页面时长**

* [iOS](https://dtsupport.gitbook.io/mta-docs/app/app_advance_access/pages/-M7juN6qczm6VyD63IvA#ios-端-)
* [Android](https://dtsupport.gitbook.io/mta-docs/app/app_advance_access/pages/-M7juN6qczm6VyD63IvA#android-端)

**APP使用时长**

* [iOS](https://dtsupport.gitbook.io/mta-docs/app/app_advance_access/pages/-M7juN6qczm6VyD63IvA#ios端)
* [Android](https://dtsupport.gitbook.io/mta-docs/app/app_advance_access/pages/-M7juN6qczm6VyD63IvA#ios端)

## 页面时长

### 功能说明

单次使用时长指的是用户从进入应用前台到离开前台的时间。（默认一屏打开一个页面）

## iOS 端

### 自动统计

iOS SDK 会自动统计 ViewController 中 View 的时长。若您自行实现了 ViewController 中的 viewDidAppear 和 viewWillDisappear 这两个方法。请在这两个方法中分别调用父类的对应方法。否则此功能可能无法正常工作。若您不想使用自动统计页面时长，将 `MTAConfig` 中的 `autoTrackPage` 属性置为 `NO` 即可。

```c
- (BOOL)application:(UIApplication *)application
didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {
    // ...
    [[MTAConfig getInstance] setAutoTrackPage:NO];
    [MTA startWithAppkey:@"I2E3KXDU1E2W"];
    // I2E3KXDU1E2W 属于独有的 Appkey 用于配置 SDK
    // ...
    return YES;
}
```

### 手动统计

若您想手动统计某个页面的时长。可以使用

```c
+ (void)trackPageViewBegin:(NSString *)page;
+ (void)trackPageViewEnd:(NSString *)page;
```

这两个方法来手动统计页面时长。\
示例代码：

```c
// 开始统计
void start() {
    [MTA trackPageViewBegin:@"my_view"];
}

// 结束统计
void stop() {
    [MTA trackPageViewEnd:@"my_view"];
}
```

## Android 端

### 自动统计

3.0.0及以上版本的Android SDK 默认通过Application.registerActivityLifecycleCallbacks()自动统计 Activity 的时长，也可以通过在Application.onCreate()初始化激活此功能。若不想使用自动统计页面时长，可在初始化StatService类接口之前调用 `StatConfig.setAntoActivityLifecycleStat(false)`、`StatConfig.setEnableAutoMonitorActivityCycle(false)` 即可。

```java
public class App extends Application {
    @Override
    public void onCreate() {
        super.onCreate();
        StatService.registerActivityLifecycleCallbacks(this);
        // ...
    }
}
```

### 手动统计

若手动统计某个页面的时长，可以使用以下2组方法。需要注意的是要确保初始化时已经调用过`StatConfig.setAntoActivityLifecycleStat(false)、StatConfig.setEnableAutoMonitorActivityCycle(false)`禁止SDK的自动统计。

#### 自动页面名称

SDK自动通过Activity类名作为页面名称，比如`com.tencent.mm.MainActivity`，客户可通过管理台配置此名称的别名，方便查看。调用位置通常为Activity的onResume和onPause。

```java
    /**
     * 记录用户进入activity时间，在Activity.onResume()处调用
     * @param activity activity上下文
     */
    public static void onResume(Context activity);

    /**
     * 记录用户离开activity时间，需要与onResume成对出现
     *
     * @param activity activity上下文，不能为null
     */
    public static void onPause(Context activity);
```

#### 自定义页面名称

采用客户调用时传递的页面名称，需注意方法调用成对匹配。调用位置通常为Activity的onResume和onPause。

```java
    /**
     * 开始时长统计
     * @param ctx context上下文
     * @param pageName 被统计的页面名称
     */
    public static void trackBeginPage(Context ctx, String pageName);

    /**
     * 结束时长统计
     * @param ctx ontext上下文
     * @param pageName 被统计的页面名称
     */
    public static void trackEndPage(Context ctx, String pageName);
```

示例代码：

```java
public class MainActivity extends AppCompatActivity {

    @Override
    protected void onPause() {
        super.onPause();
        // 以下二选一，注意成对匹配
        StatService.onPause(this);
        // StatService.trackBeginPage(this, "myPage");
        // ...
    }

    @Override
    protected void onResume() {
        super.onResume();
        // 以下二选一，注意成对匹配
        StatService.onResume(this);
        // StatService.trackEndPage(this, "myPage");
        // ...
    }
}
```

## APP 使用时长

### 功能说明

统计整个 APP 的使用时长。

## iOS端

### 自动统计

iOS SDK 会自动统计整个 App 的使用时长。若您不想使用这个功能，将 `MTAConfig` 中的 `autoTM` 属性置为 `NO` 即可。

```c
- (BOOL)application:(UIApplication *)application
didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {
    // ...
    [[MTAConfig getInstance] setAutoTM:NO];
    [MTA startWithAppkey:@"I2E3KXDU1E2W"];
    // I2E3KXDU1E2W 属于独有的 Appkey 用于配置 SDK
    // ...
    return YES;
}
```

### 手动统计

若您想手动统计整个 App 的使用时长。可以使用

```c
+ (void)trackActiveBegin;
+ (void)trackActiveEnd;
```

这两个方法来手动统计页面时长。 示例代码：

```c
// 开始统计
void start() {
    [MTA trackActiveBegin];
}

// 结束统计
void stop() {
    [MTA trackActiveEnd];
}
```

## Android端

Android端的使用时长主要是通过Application.registerActivityLifecycleCallbacks()来统计，请参考页面时长的自动统计章节。
