tencent cloud

设备管理(动态设备/应用)

下载
聚焦模式
字号
最后更新时间: 2026-06-15 15:38:48
说明:
动态设备仅支持手机端(安卓、iOS)。

1. 新建应用

在左侧菜单栏中,单击设备管理,选择动态设备(应用)列表,进入动态应用管理页面。



单击新建应用,进入新建应用页面。在页面上输入应用名称,依次填充和设置信息,单击保存即可成功新建应用。



说明:
密钥:建议优先选择使用提供的密钥
接入环境:客户可以选择拟接入的网关类型。
创建设备/应用成功后页面会返回该设备/应用的密钥 dataKey,请妥善保存记录,后续若丢失遗忘请 联系我们 查询。
通过 SDK 集成接入的客户需要进行签名操作,分为 Java、Objective-C 和 Go 语言版本,请参照下方介绍。
记录控制台展示出的应用 ID 与应用密钥,以助后续按应用创建的设备 Sign 签名的生成与鉴权。



生成按应用创建的设备 Sign 签名
按应用创建的设备 Sign 签名的生成需要两个参数:客户自定义业务控制设备唯一标识即 deviceName;上图中创建成功后返回的应用密钥。利用两个参数启动脚本,完成按应用创建的设备 Sign 签名生成。
Java 语言
package com.android.tencentvpn.util;
import io.jsonwebtoken.Jwts;
import io.jsonwebtoken.SignatureAlgorithm;
import java.security.Key;
import java.util.Date;
import javax.crypto.spec.SecretKeySpec;

public class SignGenerate {
private static final long EXPIRE_TIME = 72 * 60 * 60 * 1000; // 过期时间, 单位毫秒
/**
* @param deviceName 业务自己控制设备唯一标识
* @param SecretKey 云api返回的 应用密钥
* @return 多网sdk 需要传入的签名字符串 最终通过setSign 调用
*
*/
public static String generateSign(String deviceName, String SecretKey) {
try {
Date now = new Date();
Date expireDate = new Date(now.getTime() + EXPIRE_TIME);
Key key =
new SecretKeySpec(SecretKey.getBytes(), SignatureAlgorithm.HS256.getJcaName());
return Jwts.builder()
.claim("deviceName", deviceName)
.expiration(expireDate)
.signWith(key)
.compact();
} catch (Exception e) {
e.printStackTrace();
}
return "";
}
}
Objective-C 语言
//podfile中添加pod 'JWT',集成JWT库
// .h文件:
@interface SignGenerator : NSObject
/**
* @deviceName 业务自己控制设备唯一标识
* @param SecretKey 云api返回的 应用密钥
* @return 多网sdk 需要传入的签名字符串 最终通过setSign 调用
*/
+ (NSString *)generateSignWithDeviceName:(NSString *)deviceName secretKey:(NSString *)secretKey;
@end
// .m文件
#import "SignGenerator.h"
#import <JWT/JWT.h>
@implementation SignGenerator
+ (NSString *)generateSignWithDeviceName:(NSString *)deviceName secretKey:(NSString *)secretKey {
// 1. 设置过期时间(72小时后)
NSDate *currentDate = [NSDate date];
NSDate *expireDate = [currentDate dateByAddingTimeInterval:72 * 60 * 60];
// 2. 构建 Claims(负载)
NSDictionary *claims = @{
@"deviceName": deviceName,
@"exp": @((long)[expireDate timeIntervalSince1970]) // Expiration
};
NSData *keyData = [secretKey dataUsingEncoding:NSUTF8StringEncoding];
// 3. 使用 HS256 算法和密钥签名
JWTBuilder *builder = [JWTBuilder encodePayload:claims]
.secretData(keyData)
.algorithmName(@"HS256"); //算法名
NSString *jwt = builder.encode;
// 4. 错误处理
if (builder.jwtError) {
NSLog(@"JWT 生成失败: %@", builder.jwtError);
return @"";
}
return jwt;
}
@end
Go 语言
package main
import (
"fmt"
"github.com/dgrijalva/jwt-go/v4"
"time"
)
func main() {
sign, expireTime, err := GenerateSign("tencent-test")
if err != nil {
panic(err)
}
println(sign, expireTime)
}
// SignClaims JwtCustomClaims
type SignClaims struct {
jwt.StandardClaims
DeviceName string `json:"deviceName"`
}
var (
ExpireTime = 72 // 过期时间, 单位小时
SecretKey = []byte("shCrVLKq/Hp6UdtVpw8lBqu6ZDcLwOABf2Az67e/pjI=") // APP密钥
)
// GenerateSign 生成签名
func GenerateSign(deviceName string) (string, int64, error) {
expireTime := time.Now().Add(time.Duration(ExpireTime) * time.Hour)
claims := &SignClaims{
StandardClaims: jwt.StandardClaims{
NotBefore: jwt.Now(),
ExpiresAt: jwt.At(expireTime),
},
DeviceName: deviceName,
}
println(fmt.Sprintf("%#v", claims))

token := jwt.NewWithClaims(jwt.SigningMethodHS256, claims)
sign, err := token.SignedString(SecretKey)
if err != nil {
return "", 0, err
}
return sign, expireTime.Unix(), nil
}
ArkTS 语言
// 依赖 @ohos/jsonwebtoken 库用于生成 JWT 签名
// "dependencies": {
// "@ohos/jsonwebtoken": "1.0.2"
// },

import jwt from '@ohos/jsonwebtoken';
import { JwtPayload } from '@ohos/jsonwebtoken';

const SIGN_EXPIRE_TIME = 72 * 60 * 60 * 1000; // 过期时间,72小时,单位毫秒

function generateSign(deviceName: string, secretKey: string): string {
try {
let exp = Math.floor((Date.now() + SIGN_EXPIRE_TIME) / 1000);
let payload: JwtPayload = {
deviceName: deviceName,
exp: exp
};

let token: string = jwt.sign(payload, secretKey);

hilog.info(DOMAIN, TAG, "generateSign success, jwt=%{public}s", token);
return token;
} catch (e) {
hilog.error(DOMAIN, TAG, "generateSign error: %{public}s", JSON.stringify(e));
return "";
}
}
设置应用签名鉴权
调用接口 setSign,传入创建应用时记录的 appId 即应用 ID 和 sign 即签名字符串,完成按应用创建的设备,设置应用签名鉴权。
注意:
1. 签名建议在服务端生成下发到终端,不建议把应用 ID,应用密钥等在设备端暴露和存储,避免安全风险。
2. 设备名称 deviceName 请严格保持每个物理设备与 deviceName 一一对应。按应用鉴权方式下,设备用量监控/流量统计需要以 deviceName 作为索引获取。多设备混用 deviceName 或者一个设备使用多个 deviceName 会导致查询异常。

2. 查看动态设备/应用详情

单击查看详情,进入该设备/应用的详情页面。



详情页面展示设备信息和设备相关的网络情况,展示聚合服务器节点和上下行速率统计,同时展示流量包列表。
进入设备管理 > 网络信息,单击查看实时监控,将跳转至该设备的实时流量监控页面。




3. 修改动态设备/应用信息

在应用详情页面基本信息卡片中,单击修改,即可修改设备名称和备注字段。




4. 删除应用

您可以在管理设备页面删除您的设备/应用,删除操作支持单选设备和多选设备。
选中需要删除的设备前方的勾选框,在列表上方,单击删除设备,弹出二次确认弹窗,单击确认后删除设备。



注意:
设备/应用删除后,该设备的密钥将会失效,已经产生的 License 授权费用和流量费用不会减免,将按照正常的出账周期进行结算。

5.相关 SDK 接口

5.1 Android SDK

注意:
请提前完成环境配置。MpAccRegister 类,setEnv 接口。
//Context 为ApplicationContext
MpAccRegister.setEnv(context, 1);
SDK下载和详细文档请参考 API 概览,此处只列举本文相关功能对应的特定接口。

setSign

设置应用签名鉴权,用于按应用创建的设备。
public static void setSign(String appId, String sign)
参数说明
参数
类型
描述
appId
String
应用 appId
sign
String
签名字符串

5.2 iOS SDK

注意:
请提前完成环境配置。在 SDK 初始化阶段调用 MpAccClient.shared.enableOverseas(true),切为国际站环境。
func enableOverseas(enabled: Bool)
SDK下载和详细文档请参考 API 概览,此处只列举本文相关功能对应的特定接口。

setSign

设置应用签名鉴权。
func setSign(appId: String, sign: String)
参数
描述
appId
应用 ID
sign
签名

5.3 Windows SDK

配置加速参数

在启动加速进程前,vendor 需要收集必选参数,在启动 SDK 加速时需要作为参数携带。
appId 和 appSign:app 模式注册,在 控制台 获取。
scheduleMode:默认工作模式为 RTC。
调用如下接口配置加速的各项参数(仅配置参数不启动加速):
curl -X POST "http://127.0.0.1:9801/api/v2/client/mp-speeder" ^
-H "accept: */*" ^
-H "Content-Type: application/json" ^
-d "{\\"serviceMode\\": 0,\\"appId\\":\\"app-0eoo3vpctx\\",\\"appSign\\":\\"eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJkZXZpY2VOYW1lIjoiamFja3ktdGVzdC0yMC0xIn0.TleKYrzBL1dyp2i8WTBgs8Y8UvBJQv-n2A2BRMT1xuQ\\",\\"registerEnv\\":1,\\"scheduleMode\\":\\"rtc\\"}"
本接口传入 Client 实体,定义如下:
名称
类型
说明
appId
String
app 模式注册下使用。
appSign
String
app 模式注册下使用。
scheduleMode
String
可选:Windows 默认加速模式 "RTC"。

帮助和支持

本页内容是否解决了您的问题?

填写满意度调查问卷,共创更好文档体验。

文档反馈