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