Browse Source

升级vivo push sdk

heavyrian2012 1 month ago
parent
commit
9c50f1ed4c

+ 8 - 2
pom.xml

@@ -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>

+ 61 - 22
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;
         }
-    }
 
-    public void push(PushMessage pushMessage) {
+        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) {
+            // 升级点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
+            );
 
-            LOG.info("Server response: MessageId: " + resultMessage.getTaskId()
-                    + " ErrorCode: " + resultMessage.getResult()
-                    + " Reason: " + resultMessage.getDesc());
+            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;
+    }
 }

BIN
src/main/libs/vPush-server-sdk-1.0.jar


BIN
src/main/libs/vpush-server-sdk-3.3.jar