升级vivo push sdk

This commit is contained in:
heavyrian2012
2025-08-27 08:29:20 +08:00
parent e673929aea
commit 9c50f1ed4c
4 changed files with 71 additions and 26 deletions

10
pom.xml
View File

@@ -85,9 +85,9 @@
<dependency>
<groupId>com.vivo.push.sdk</groupId>
<artifactId>vPush-server-sdk</artifactId>
<version>1.0</version>
<version>3.3</version>
<scope>system</scope>
<systemPath>${project.basedir}/src/main/libs/vPush-server-sdk-1.0.jar
<systemPath>${project.basedir}/src/main/libs/vPush-server-sdk-3.3.jar
</systemPath>
</dependency>
@@ -216,6 +216,12 @@
<artifactId>commons-codec</artifactId>
<version>1.16.0</version>
</dependency>
<dependency>
<groupId>commons-logging</groupId>
<artifactId>commons-logging</artifactId>
<version>1.3.2</version>
</dependency>
</dependencies>
<build>

View File

@@ -14,6 +14,7 @@ import org.springframework.util.StringUtils;
import javax.annotation.PostConstruct;
import java.io.IOException;
import java.util.Random;
@Component
public class VivoPush {
@@ -25,22 +26,19 @@ public class VivoPush {
private String authToken;
private void refreshToken() {
Sender sender = null;//注册登录开发平台网站获取到的appSecret
try {
sender = new Sender(mConfig.getAppSecret());
Result result = sender.getToken(mConfig.getAppId(), mConfig.getAppKey());//注册登录开发平台网站获取到的appId和appKey
authToken = result.getAuthToken();
tokenExpiredTime = System.currentTimeMillis() + 12 * 60 * 60 * 1000;
} catch (Exception e) {
e.printStackTrace();
LOG.error("getToken error" + e.getMessage());
}
}
public void push(PushMessage pushMessage) {
String regId = pushMessage.getDeviceToken();
// 添加regId有效性检查
if (!isValidVivoRegId(regId)) {
LOG.error("Invalid vivo regId: {}", regId);
return;
}
LOG.debug("Sending Vivo push with regId: {}", regId);
// 升级点1使用新的认证机制
if (tokenExpiredTime <= System.currentTimeMillis()) {
refreshToken();
refreshToken(); // 内部需要实现getToken逻辑
}
Result resultMessage = null;
@@ -49,31 +47,72 @@ public class VivoPush {
String title = arr[0];
String body = arr[1];
Sender senderMessage = new Sender(mConfig.getAppSecret(), authToken);
// 升级点2创建Sender时只需传入appSecret
Sender senderMessage = new Sender(mConfig.getAppSecret());
// 升级点3必须设置认证token
senderMessage.setAuthToken(authToken);
// 升级点4使用新的Builder参数
Message.Builder builder = new Message.Builder()
.regId(pushMessage.getDeviceToken())//该测试手机设备订阅推送后生成的regId
.regId(regId)
.notifyType(3)
.title(title)
.content(body)
.timeToLive(1000)
.skipType(1)
.networkType(-1)
.requestId(System.currentTimeMillis() + "");
// 升级点5新增必填字段requestId使用时间戳+随机数防重复)
.requestId(System.currentTimeMillis() + "_" + new Random().nextInt(1000))
// 升级点6新增必填字段pushMode0-正式/1-测试)
.pushMode(0); // 根据实际环境设置
// 保留原有TTL逻辑
if (pushMessage.pushMessageType != PushMessageType.PUSH_MESSAGE_TYPE_NORMAL) {
builder.timeToLive(60); // 单位秒
builder.timeToLive(60);
} else {
builder.timeToLive(10 * 60);
}
resultMessage = senderMessage.sendSingle(builder.build());
} catch (Exception e) {
e.printStackTrace();
LOG.error("sendSingle error " + e.getMessage());
LOG.error("sendSingle error", e); // 升级点7使用完整的异常堆栈
}
if (resultMessage != null) {
LOG.info("Server response: MessageId: " + resultMessage.getTaskId()
+ " ErrorCode: " + resultMessage.getResult()
+ " Reason: " + resultMessage.getDesc());
if (resultMessage != null) {
// 升级点8优化日志格式
LOG.info("Vivo push response: [MessageId={}] [ErrorCode={}] [Reason={}]",
resultMessage.getTaskId(),
resultMessage.getResult(),
resultMessage.getDesc());
}
}
// 新增的token刷新方法需根据示例代码实现
private void refreshToken() {
try {
Sender tokenSender = new Sender(mConfig.getAppSecret());
// 升级点9使用新的getToken接口
Result tokenResult = tokenSender.getToken(
mConfig.getAppId(), // 需要配置appId
mConfig.getAppKey() // 需要配置appKey
);
if (tokenResult.getResult() == 0) {
authToken = tokenResult.getAuthToken();
// 假设token有效期为48小时按vivo标准
tokenExpiredTime = System.currentTimeMillis() + 48 * 3600 * 1000;
} else {
LOG.error("Refresh token failed: [code={}] [desc={}]",
tokenResult.getResult(),
tokenResult.getDesc());
}
} catch (Exception e) {
LOG.error("Refresh token error", e);
}
}
// 校验regId格式
private boolean isValidVivoRegId(String regId) {
return regId != null && regId.startsWith("v2-") && regId.length() > 50;
}
}

Binary file not shown.