diff --git a/pom.xml b/pom.xml
index 479fe54..3168a7e 100644
--- a/pom.xml
+++ b/pom.xml
@@ -85,9 +85,9 @@
com.vivo.push.sdk
vPush-server-sdk
- 1.0
+ 3.3
system
- ${project.basedir}/src/main/libs/vPush-server-sdk-1.0.jar
+ ${project.basedir}/src/main/libs/vPush-server-sdk-3.3.jar
@@ -216,6 +216,12 @@
commons-codec
1.16.0
+
+
+ commons-logging
+ commons-logging
+ 1.3.2
+
diff --git a/src/main/java/cn/wildfirechat/push/android/vivo/VivoPush.java b/src/main/java/cn/wildfirechat/push/android/vivo/VivoPush.java
index 102eb66..895def0 100644
--- a/src/main/java/cn/wildfirechat/push/android/vivo/VivoPush.java
+++ b/src/main/java/cn/wildfirechat/push/android/vivo/VivoPush.java
@@ -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:新增必填字段pushMode(0-正式/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;
+ }
}
diff --git a/src/main/libs/vPush-server-sdk-1.0.jar b/src/main/libs/vPush-server-sdk-1.0.jar
deleted file mode 100755
index 904175d..0000000
Binary files a/src/main/libs/vPush-server-sdk-1.0.jar and /dev/null differ
diff --git a/src/main/libs/vpush-server-sdk-3.3.jar b/src/main/libs/vpush-server-sdk-3.3.jar
new file mode 100644
index 0000000..8c97bf4
Binary files /dev/null and b/src/main/libs/vpush-server-sdk-3.3.jar differ