设备类型 | 描述 |
自有设备 | 由客户自行拥有所有权、使用权的设备。 |
厂商设备 | 由设备制造商生产并直接提供的设备。这些设备通常具有标准化的设计和功能,面向市场销售,供不同企业和用户购买和使用。 |
动态设备/应用 | 对于海量设备接入的场景(例如手机应用),原来的一机一密不再适用,因此可以使用动态设备/应用的形式:一个密钥可以动态创建设备的集合,可以对应一个客户的应用。客户可以基于应用密钥,不需要创建一机一密的密钥,在客户端发起连接。 |















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).notBefore(now).expiration(expireDate).signWith(key).compact();} catch (Exception e) {e.printStackTrace();}return "";}}
//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,@"nbf": @((long)[currentDate timeIntervalSince1970]), // Not Before@"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
package mainimport ("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 JwtCustomClaimstype SignClaims struct {jwt.StandardClaimsDeviceName 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}






信息项 | 说明 |
流量包 ID | 成功购买流量包后系统会自动生成唯一的流量包 ID。 |
档位 | 购买的流量包内包含的资源档位。 |
剩余流量(GB) | 剩余流量用量,您可以更加直观地看到流量包的用量和余量情况。 |
设备 ID | 购买流量包后绑定的设备,创建设备时系统会自动生成唯一的设备 ID。 |
购买时间/过期时间 | 成功购买流量包的时间/当前流量包失效的时间,一般为下个月的同一天。 |
是/否续购 | 购买流量包时是否选择自动续费(流量包到期后自动续费)。 |
操作 | 进入流量包管理配置页面,可进一步修改流量包的详细信息,包括绑定的设备、是否自动续购,变更流量包档位。 |







文档反馈