APP 活跃上报接口
本接口用于设备端上报 APP 的活跃数据(运行时长、启动次数等),支持实时、延迟及特殊上报模式。
相关业务文档:APP活跃统计管理
接口地址(APP 活跃上报)
http://app.activity.thirdparty.akrdinfo.cn:30133/app-api/third/app/activity/v2
请求参数说明(APP 活跃上报)
时区警告
特殊上报和延迟上报模式下,涉及日期的判断逻辑(如跨天、日期变更)**必须严格按照北京时间(Asia/Shanghai,UTC+8)**进行处理,以确保服务端统计的准确性。
mac: 终端设备的 MAC 地址 (必填)
cpu: 设备 CPU 信息 (必填)
packageName: APP 包名 (必填)
versionCode: APP 版本号 (必填)
type: 上报类型,0-实时上报/特殊上报,1-延迟汇总上报 (必填)
timeIntervalConfig: 上次从服务端获取的配置间隔(分钟),也是本次上报周期的运行时长 (Type=0 时必填)
time_stamp: 设备时间戳,13位 Long 类型 (Type=0 时必填)
time_zone: 设备时区 (如 "Asia/Shanghai")
delayDatas: 延迟上报数据集合 (Type=1 时必填)
delayDatas[*].day: 延迟上报日期,格式为 YYYY-MM-DD
delayDatas[*].duration: 对应日期内的运行总时长,单位:分钟
上报模式说明
接口支持以下三种上报模式,设备端需根据业务场景选择合适的模式:
1. 实时上报模式 (Type = 0)
- 场景:设备正常联网运行期间的常规活跃数据上报。
- 逻辑:
- 获取配置:设备首次上报或按配置间隔上报时,服务端会在响应中返回
deviceConfigurationResp,其中包含下一次上报的时间间隔要求。 - 间隔计时:设备端需按此间隔进行计时。
- 回传时长:计时结束后,设备再次调用本接口,并将上一次服务端下发的间隔时间作为
timeIntervalConfig参数回传。 服务端将此数值记录为该周期的运行时长。
- 获取配置:设备首次上报或按配置间隔上报时,服务端会在响应中返回
2. 延迟上报模式 (Type = 1)
- 场景:用于上报历史积压数据(如跨天数据、断网重连后的补报)。
- 逻辑:
- 每日汇总:设备端需自行记录当天的应用运行时长。跨过当日零点(北京时间)后,将前一日的总运行时长通过
delayDatas字段上报。 - 断网补报:如果设备关机或断网导致数据未能及时上报,需在网络恢复后打包补报历史数据。
- 重试策略:若接口返回 500 错误,建议按 5m/30m/100m/300m/1d/3d/5d/10d/20d 的间隔重试;若多次失败则丢弃。非 200/500 错误(如网络故障)建议延迟 1 小时重试。
- 每日汇总:设备端需自行记录当天的应用运行时长。跨过当日零点(北京时间)后,将前一日的总运行时长通过
3. 特殊上报模式 (Type = 0, timeIntervalConfig = 0)
- 场景:不统计具体运行时长,仅统计“是否活跃”(如开机启动、日期变更)。
- 逻辑:
- 触发条件:
- 设备开机启动时。
- 设备日期发生变更时(以北京时间为准)。
- 参数设置:走实时上报逻辑(
type=0),但必须将timeIntervalConfig固定设置为0。 - 服务端处理:服务端接收到 0 时长请求后,仅记录一次活跃行为,不累计运行时长。
- 触发条件:
请求示例
- 模式一:实时上报
- 模式二:延迟上报
- 模式三:特殊上报
场景:常规心跳上报,回传配置的时长。
- Apifox
- Linux/Mac (Curl)
- Windows (CMD)
- Windows (PowerShell)
入参示例 (JSON):
{
"mac": "00:1A:79:A0:01:CC",
"cpu": "17509184403286cce35bc4be141eaab",
"packageName": "com.gzsuy.sz01",
"versionCode": 11235,
"type": 0,
"timeIntervalConfig": 5,
"time_stamp": 1753181666064,
"time_zone": "Asia/Shanghai"
}
curl --location --request POST 'http://app.activity.thirdparty.akrdinfo.cn:30133/app-api/third/app/activity/v2' \
--header 'Content-Type: application/json' \
--data-raw '{
"mac": "00:1A:79:A0:01:CC",
"cpu": "17509184403286cce35bc4be141eaab",
"packageName": "com.gzsuy.sz01",
"versionCode": 11235,
"type": 0,
"timeIntervalConfig": 5,
"time_stamp": 1753181666064,
"time_zone": "Asia/Shanghai"
}'
curl -X POST "http://app.activity.thirdparty.akrdinfo.cn:30133/app-api/third/app/activity/v2" ^
-H "Content-Type: application/json" ^
-d "{\"mac\": \"00:1A:79:A0:01:CC\", \"cpu\": \"17509184403286cce35bc4be141eaab\", \"packageName\": \"com.gzsuy.sz01\", \"versionCode\": 11235, \"type\": 0, \"timeIntervalConfig\": 5, \"time_stamp\": 1753181666064, \"time_zone\": \"Asia/Shanghai\"}"
$url = "http://app.activity.thirdparty.akrdinfo.cn:30133/app-api/third/app/activity/v2"
$body = @{
mac = "00:1A:79:A0:01:CC"
cpu = "17509184403286cce35bc4be141eaab"
packageName = "com.gzsuy.sz01"
versionCode = 11235
type = 0
timeIntervalConfig = 5
time_stamp = 1753181666064
time_zone = "Asia/Shanghai"
} | ConvertTo-Json
Invoke-RestMethod -Uri $url -Method Post -Body $body -ContentType "application/json"
场景:上报昨日汇总数据或断网补报数据。
- Apifox
- Linux/Mac (Curl)
- Windows (CMD)
- Windows (PowerShell)
入参示例 (JSON):
{
"mac": "00:1A:79:A0:01:CC",
"cpu": "17509184403286cce35bc4be141eaab",
"packageName": "com.gzsuy.sz01",
"versionCode": 11235,
"type": 1,
"delayDatas": [
{
"day": "2025-09-22",
"duration": 248
},
{
"day": "2025-09-23",
"duration": 376
}
]
}
curl --location --request POST 'http://app.activity.thirdparty.akrdinfo.cn:30133/app-api/third/app/activity/v2' \
--header 'Content-Type: application/json' \
--data-raw '{
"mac": "00:1A:79:A0:01:CC",
"cpu": "17509184403286cce35bc4be141eaab",
"packageName": "com.gzsuy.sz01",
"versionCode": 11235,
"type": 1,
"delayDatas": [
{ "day": "2025-09-22", "duration": 248 },
{ "day": "2025-09-23", "duration": 376 }
]
}'
curl -X POST "http://app.activity.thirdparty.akrdinfo.cn:30133/app-api/third/app/activity/v2" ^
-H "Content-Type: application/json" ^
-d "{\"mac\": \"00:1A:79:A0:01:CC\", \"cpu\": \"17509184403286cce35bc4be141eaab\", \"packageName\": \"com.gzsuy.sz01\", \"versionCode\": 11235, \"type\": 1, \"delayDatas\": [{\"day\": \"2025-09-22\", \"duration\": 248}, {\"day\": \"2025-09-23\", \"duration\": 376}]}"
$url = "http://app.activity.thirdparty.akrdinfo.cn:30133/app-api/third/app/activity/v2"
$body = @{
mac = "00:1A:79:A0:01:CC"
cpu = "17509184403286cce35bc4be141eaab"
packageName = "com.gzsuy.sz01"
versionCode = 11235
type = 1
delayDatas = @(
@{ day = "2025-09-22"; duration = 248 },
@{ day = "2025-09-23"; duration = 376 }
)
} | ConvertTo-Json -Depth 3
Invoke-RestMethod -Uri $url -Method Post -Body $body -ContentType "application/json"
场景:开机启动或日期变更触发,时长传 0。
- Apifox
- Linux/Mac (Curl)
- Windows (CMD)
- Windows (PowerShell)
入参示例 (JSON):
{
"mac": "00:1A:79:A0:01:CC",
"cpu": "17509184403286cce35bc4be141eaab",
"packageName": "com.gzsuy.sz01",
"versionCode": 11235,
"type": 0,
"timeIntervalConfig": 0,
"time_stamp": 1753181666064,
"time_zone": "Asia/Shanghai"
}
curl --location --request POST 'http://app.activity.thirdparty.akrdinfo.cn:30133/app-api/third/app/activity/v2' \
--header 'Content-Type: application/json' \
--data-raw '{
"mac": "00:1A:79:A0:01:CC",
"cpu": "17509184403286cce35bc4be141eaab",
"packageName": "com.gzsuy.sz01",
"versionCode": 11235,
"type": 0,
"timeIntervalConfig": 0,
"time_stamp": 1753181666064,
"time_zone": "Asia/Shanghai"
}'
curl -X POST "http://app.activity.thirdparty.akrdinfo.cn:30133/app-api/third/app/activity/v2" ^
-H "Content-Type: application/json" ^
-d "{\"mac\": \"00:1A:79:A0:01:CC\", \"cpu\": \"17509184403286cce35bc4be141eaab\", \"packageName\": \"com.gzsuy.sz01\", \"versionCode\": 11235, \"type\": 0, \"timeIntervalConfig\": 0, \"time_stamp\": 1753181666064, \"time_zone\": \"Asia/Shanghai\"}"
$url = "http://app.activity.thirdparty.akrdinfo.cn:30133/app-api/third/app/activity/v2"
$body = @{
mac = "00:1A:79:A0:01:CC"
cpu = "17509184403286cce35bc4be141eaab"
packageName = "com.gzsuy.sz01"
versionCode = 11235
type = 0
timeIntervalConfig = 0
time_stamp = 1753181666064
time_zone = "Asia/Shanghai"
} | ConvertTo-Json
Invoke-RestMethod -Uri $url -Method Post -Body $body -ContentType "application/json"
返回示例
成功返回
{
"code": 200,
"data": [
{
"type": 10,
"param": [
1, // 下次上报间隔配置(分钟)
5
]
}
],
"msg": "Submitted successfully"
}
失败返回
{
"code": 500,
"data": null,
"msg": "data in wrong format"
}
实体类定义 (Java)
import com.fasterxml.jackson.annotation.JsonProperty;
import lombok.Data;
import java.util.Date;
import java.util.List;
/**
* app活跃请求实体
*/
@Data
public class AppActivityReq {
public static final int TYPE_REALTIME = 0;
public static final int TYPE_DELAY = 1;
/**
* mac地址
*/
private String mac;
/**
* cpu
*/
private String cpu;
/**
* 包名
*/
private String packageName;
/**
* 版本号
*/
private Integer versionCode;
/**
* 拉取到的服务端配置时间间隔(分钟),也是本次上报的运行时长
* Type=0 时必填,特殊上报模式传 0
*/
private Integer timeIntervalConfig;
/**
* 类型:0-实时上报/特殊上报,1-延迟汇总上报
*/
private int type;
/**
* 设备时间戳 (13位 Long 类型)
*/
@JsonProperty("time_stamp")
private Long timeStamp;
@JsonProperty("time_zone")
private String timeZone;
private String ip;
private List<DelayData> delayDatas;
@Data
public static class DelayData {
/**
* 延迟上报日期 (YYYY-MM-DD)
*/
String day;
/**
* 运行时长 (分钟)
*/
private int duration;
}
}