# 时长统计

## 时长统计

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()来统计，请参考页面时长的自动统计章节。


---

# Agent Instructions: Querying This Documentation

If you need additional information that is not directly available in this page, you can query the documentation dynamically by asking a question.

Perform an HTTP GET request on the current page URL with the `ask` query parameter:

```
GET https://dtsupport.gitbook.io/mta-docs/app/app_advance_access/app_advance_access_time_statistics.md?ask=<question>
```

The question should be specific, self-contained, and written in natural language.
The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
